El modeloDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/entreunosyceros/lefa/llms.txt
Use this file to discover all available pages before exploring further.
Factura representa el documento de facturación central de LEFA. Gestiona todo el ciclo de vida de una factura emitida por el autónomo, desde su creación como borrador hasta su cobro. Mientras la factura permanece en estado BORRADOR, el campo numero_factura es NULL para evitar comprometer la numeración oficial antes de su emisión. El modelo incluye soporte para facturas rectificativas mediante una auto-referencia, trazabilidad de origen desde presupuestos y campos de encadenamiento para el sistema VeriFactu.
Tabla SQL
La tabla en la base de datos SQLite se llamafacturas. Define la siguiente restricción de unicidad:
| Restricción | Columna | Nombre interno |
|---|---|---|
UniqueConstraint | numero_factura | uq_numero_factura |
numero_factura admite NULL, múltiples borradores pueden coexistir sin violar la restricción.
Campos
Clave primaria autoincrementada. Identificador único e inmutable de la factura en la base de datos.
Número oficial de la factura (máx. 30 caracteres). Es
NULL mientras la factura está en estado BORRADOR. Se asigna en el momento de la emisión y queda protegido por la restricción de unicidad uq_numero_factura.Serie de facturación (máx. 20 caracteres). Valor por defecto:
"FACT". Permite separar distintas series de facturación (p. ej. "RECT" para rectificativas).Clave foránea hacia
clientes.id. Identifica el cliente destinatario de la factura. No puede ser NULL.Fecha en que se emite la factura. Permanece
NULL en borradores. Se almacena como tipo Date de SQLAlchemy.Fecha límite de pago acordada con el cliente. Puede ser
NULL si no se establece plazo. Se usa en texto_estado_vencimiento() para calcular el estado de cobro.Estado actual de la factura según el enum
EstadoFactura. Valor por defecto: EstadoFactura.BORRADOR. Controla qué operaciones están disponibles sobre la factura.Porcentaje de IVA aplicable a la factura. Valor por defecto:
21.0. Se usa en calcular_iva().Porcentaje de retención de IRPF aplicable. Valor por defecto:
15.0. Se usa en calcular_irpf().Indica si la factura ha sido enviada por correo electrónico al cliente. Valor por defecto:
False.Fecha en que se realizó el envío por correo. Es
NULL si enviada es False. Se formatea en texto_estado_envio().Dirección de correo electrónico a la que se envió la factura (máx. 150 caracteres). Puede ser
NULL.Hash SHA de 64 caracteres generado para el sistema VeriFactu. Es inmutable tras la emisión.
NULL hasta que se genera el hash.Hash de la factura precedente en la cadena VeriFactu (máx. 64 caracteres). Permite el encadenamiento requerido por la normativa.
NULL en la primera factura de la serie.Clave foránea auto-referencial hacia
facturas.id. Si no es NULL, indica que esta factura rectifica a la factura con ese id. Se usa junto a la propiedad es_rectificativa.Clave foránea hacia
presupuestos.id. Registra el presupuesto del que se generó esta factura mediante conversión. NULL si la factura se creó directamente.Enum EstadoFactura
EstadoFactura hereda de str y enum.Enum, por lo que sus valores son cadenas de texto directamente comparables y serializables.
| Valor del enum | Cadena almacenada | Significado |
|---|---|---|
EstadoFactura.BORRADOR | "Borrador" | Factura en edición. Sin número oficial asignado. Modificable. |
EstadoFactura.EMITIDA | "Emitida" | Factura numerada y enviada al cliente. Solo lectura. |
EstadoFactura.COBRADA | "Cobrada" | Pago recibido y confirmado. Estado terminal. |
Una factura en estado
EMITIDA o COBRADA no puede editarse. La propiedad es_editable devolverá False en ambos casos.Relaciones
Relación muchos-a-uno hacia el modelo
Cliente. Accesible como atributo de instancia. Se configura con back_populates="facturas".Relación auto-referencial. Apunta a la instancia
Factura que esta factura está rectificando. Se establece mediante remote_side="Factura.id" y la clave foránea factura_rectificada_id. Devuelve None si no es una rectificativa.Relación uno-a-muchos hacia
LineaFactura. Las líneas se ordenan por LineaFactura.id y se eliminan en cascada (cascade="all, delete-orphan") al borrar la factura.Propiedades calculadas
es_editable (propiedad)
True únicamente cuando la factura está en estado BORRADOR. La interfaz de LEFA usa esta propiedad para habilitar o deshabilitar controles de edición.
es_rectificativa (propiedad)
True si la factura tiene asignada una referencia a otra factura que corrige. Equivale a comprobar que factura_rectificada_id no sea None.
Métodos de cálculo
Todos los métodos de cálculo operan sobre la colecciónself.lineas y los porcentajes fiscales almacenados en la instancia.
Modelo LineaFactura
Cada Factura contiene una lista de objetos LineaFactura almacenados en la tabla lineas_factura. Representan los conceptos o servicios facturados de forma individual.
Clave primaria autoincrementada de la línea.
Clave foránea hacia
facturas.id. Vincula la línea con su factura padre.Descripción del concepto o servicio (máx. 500 caracteres). No puede ser
NULL.Número de unidades del concepto. Valor por defecto:
1.0.Precio por unidad en euros. Valor por defecto:
0.0.Propiedad subtotal
cantidad × precio_unitario, redondeado a dos decimales. Es la base sobre la que Factura.calcular_subtotal() acumula el total de todas las líneas.