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

Dona suport a aquest servei

Desenvolupament de programari i aplicacions a mida

Llegir el codi