Facturae en Python
L’XML de factura electrònica que la llei espanyola dona per obligatori, generat des de Python.
Llibreries de codi obert · Python · Codi publicat
El problema
El Reial Decret 238/2026, de 25 de març, porta la factura electrònica entre empreses d’opció a obligació. El format no és un PDF ni un JSON: és un XML amb una estructura fixa, imports que han de quadrar entre si i camps que es rebutgen si vénen amb la forma equivocada. Escriure’l a mà funciona fins a la primera factura amb dos tipus d’IVA.
Què fa
- Genera l’XML de Facturae a partir de les dades de la factura escrites com a estructures de Python.
- Calcula els totals des de les línies —quantitat per preu— en comptes d’acceptar-los donats.
- Valida les dades que es rebutgen en presentar: codi postal espanyol, país en alfa-2 i blocs d’impostos.
- Falla quan una clau ve mal escrita, en lloc d’emetre un XML al qual li falta aquest camp.
El que es va decidir en construir-lo
- Els totals es calculen; no s’accepten donats
- Si qui crida pogués passar el total, tard o d’hora en passaria un que no coincideix amb les línies, i l’XML resultant seria vàlid per a l’analitzador i rebutjat a destinació. El total surt de les línies sempre. És menys flexible i és justament el que es vol: no hi ha manera d’escriure una factura que no quadri amb si mateixa.
- Una clau mal escrita atura el procés
- Un diccionari accepta qualsevol clau, així que una errada no produeix un error: produeix un XML sense aquest camp, que es veu bé i es rebutja setmanes després. La biblioteca comprova les claus i falla en el moment, que és quan encara hi ha algú mirant.
- Els imports van en decimal, no en coma flotant
- Els diners en coma flotant produeixen el cèntim que no quadra, i en una factura aquest cèntim és un rebuig. Es fa servir el tipus decimal de la biblioteca estàndard, que és exacte en base deu i és la raó per la qual la biblioteca no necessita cap dependència per fer aritmètica fiable.
Fins on arriba
- L’XML surt sense signar. Facturae exigeix una signatura XAdES abans de presentar-lo a FACe, i aquesta signatura no la posa aquesta biblioteca.
- No valida contra l’esquema oficial en temps d’execució: comprova el que comprova, i està escrit quin és.
- No envia res. Generar el document i presentar-lo són dos problemes diferents i aquí només hi ha el primer.
- No és assessorament fiscal ni legal. Què cal facturar i quan queda fora de l’abast.
- 0 dependències
- MIT llicència
- 3.9+ Python
Construït amb
- Python
- ElementTree
- decimal