El archivoDocumentation 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.
lefa/config.py es el único punto de verdad para todas las rutas de datos locales y los valores constantes de la aplicación. Cualquier otro módulo que necesite una ruta, un tipo impositivo o una serie de facturación lo importa directamente desde aquí; nunca se repiten literales en el resto del código.
Rutas de datos
Toda la persistencia de LEFA es local. Las rutas se construyen a partir dePath.home(), por lo que el directorio raíz siempre se sitúa dentro del perfil del usuario actual, independientemente de dónde esté instalada la aplicación.
| Constante | Ruta en disco | Descripción |
|---|---|---|
APP_DATA_DIR | ~/.lefa | Directorio raíz de datos de LEFA. |
DATABASE_PATH | ~/.lefa/lefa.db | Base de datos SQLite principal. |
PDF_OUTPUT_DIR | ~/.lefa/facturas_pdf | PDFs de facturas generadas. |
PRESUPUESTOS_PDF_DIR | ~/.lefa/presupuestos_pdf | PDFs de presupuestos generados. |
SMTP_CONFIG_PATH | ~/.lefa/smtp_config.json | Configuración del servidor de correo SMTP. |
PREFERENCIAS_PATH | ~/.lefa/preferencias.json | Preferencias del autónomo (IVA, emisor, formato, etc.). |
VERIFACTU_REGISTROS_DIR | ~/.lefa/verifactu/registros | Registros JSON inmutables encadenados para VeriFactu. |
FACTURAE_OUTPUT_DIR | ~/.lefa/facturas_xml | Ficheros XML en formato Facturae 3.2. |
VeriFactu
LEFA incluye soporte para el sistema de facturación verificable de la AEAT. Las dos constantes siguientes controlan el endpoint de envío y si el modo VeriFactu está activo.URL base de la Agencia Tributaria para el envío de registros VeriFactu (entorno de producción).Para pruebas, la AEAT pone a disposición el host
prewww2.aeat.es.Activa o desactiva el modo VeriFactu (envío real a la AEAT). Por defecto es
False: LEFA genera el hash encadenado y el QR tributario con la leyenda SISTEMA INFORMÁTICO NO VERIFICADO, pero no transmite los registros.El módulo
lefa/verifactu/ genera siempre el registro local y el QR tributario en el PDF, independientemente del valor de VERIFACTU_MODO_VERIFACTU. Solo el envío a la AEAT queda desactivado cuando la constante es False.Impuestos por defecto
Estas constantes definen los tipos impositivos habituales para autónomos en España y los valores que se preseleccionan al crear una nueva factura.Tipos de IVA disponibles en los desplegables de la interfaz.
Tipos de IRPF disponibles en los desplegables de la interfaz.
Tipo de IVA que se aplica por defecto al crear una nueva factura. Puede cambiarse en Herramientas → Preferencias.
Retención de IRPF que se aplica por defecto al crear una nueva factura. Puede cambiarse en Herramientas → Preferencias.
Series
LEFA admite varias series de numeración con correlativo independiente. Las constantes siguientes definen las series predefinidas y el prefijo que se usa cuando no hay ninguna configuración personalizada.Serie reservada para la numeración de presupuestos.
Conjunto de series que se inicializa en las preferencias en una instalación nueva.La serie
RECT se utiliza automáticamente al rectificar una factura existente.Prefijo de la serie de facturación general. Es el fallback cuando
series_facturacion está vacío en las preferencias.Keyring
La contraseña SMTP se almacena en el llavero del sistema operativo (GNOME Keyring, KWallet o Credential Manager en Windows) mediante la bibliotecakeyring. Nunca se escribe en disco en texto plano.
Nombre de servicio con el que se registra la entrada en el llavero.
Nombre de usuario bajo el que se guarda la contraseña en el llavero.
En servidores Linux sin escritorio gráfico (headless) o en conexiones SSH sin sesión D-Bus activa,
keyring puede no encontrar el demonio del llavero (GNOME Keyring o KWallet) y lanzar una excepción. En esos entornos se recomienda ejecutar LEFA desde una sesión de escritorio.Función ensure_directories()
ensure_directories() crea las carpetas de datos necesarias si no existen. Es idempotente: si los directorios ya existen, no hace nada. Se invoca desde PreferenciasService (en cargar() y guardar()) cada vez que se accede o persisten las preferencias, lo que garantiza que las carpetas estén disponibles antes de cualquier operación de escritura.
~/.lefa, ~/.lefa/facturas_pdf, ~/.lefa/presupuestos_pdf, ~/.lefa/verifactu/registros y ~/.lefa/facturas_xml. Los archivos smtp_config.json y preferencias.json residen directamente en APP_DATA_DIR, cuya creación ya queda cubierta por la primera llamada a mkdir.
Numeración
NumeracionService (en lefa/services/numeracion_service.py) genera los números de factura a partir de tres variables: la serie, el año de emisión y la secuencia correlativa. La plantilla de formato se selecciona mediante un identificador de cadena (formato_id) que se almacena en las preferencias del autónomo bajo la clave formato_numeracion.
Formatos disponibles
El diccionarioFORMATOS_NUMERACION asocia cada identificador con una plantilla de marcadores ({serie}, {anio}, {seq}). La columna «Etiqueta» reproduce literalmente los valores de ETIQUETAS_FORMATO, que son las cadenas que se muestran en la interfaz y que utilizan distintos anchos de secuencia a modo ilustrativo. El ancho real en producción se controla con digitos_secuencia en las preferencias (por defecto 4).
formato_id | Plantilla | Etiqueta (ETIQUETAS_FORMATO) |
|---|---|---|
fact_anio_4 | {serie}-{anio}-{seq} | FACT-2026-0001 (serie-año-4 dígitos) |
anio_3 | {anio}-{seq} | 2026-001 |
serie_anio_3 | {serie}-{anio}-{seq} | F-2026-001 |
serie_anio_compact | {serie}{anio}-{seq} | FAC2026-001 |
seq4_anio | {seq}/{anio} | 0001/2026 |
serie_seq3 | {serie}-{seq} | WEB-001 (serie sin año) |
formato_numeracion es "fact_anio_4".
Los formatos que no incluyen
{anio} (por ejemplo serie_seq3) mantienen un correlativo continuo sin reiniciarse al cambiar de ejercicio. Los formatos que no incluyen {serie} comparten correlativo entre todas las series.NumeracionService.siguiente_secuencia()
Calcula el siguiente número correlativo disponible consultando las facturas ya emitidas en la base de datos.
| Parámetro | Tipo | Descripción |
|---|---|---|
session | sqlalchemy.orm.Session | Sesión activa de SQLAlchemy. |
serie | str | Serie de facturación (p. ej. "FACT", "RECT"). |
anio | int | Ejercicio fiscal (p. ej. 2026). |
formato_id | str | Identificador del formato de numeración (ver tabla anterior). |
digitos | int | Número de dígitos del correlativo. Por defecto 4. |
1.
NumeracionService.formatear_numero()
Genera la cadena del número de factura a partir de sus componentes.
| Parámetro | Tipo | Descripción |
|---|---|---|
serie | str | Serie de facturación. |
anio | int | Año de emisión. |
secuencia | int | Número correlativo. |
formato_id | str | Identificador del formato de numeración. |
digitos | int | Número de dígitos del correlativo. Por defecto 4. |