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.
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.str
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.bool
default:"False"
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.tuple[float, ...]
Tipos de IVA disponibles en los desplegables de la interfaz.
tuple[float, ...]
Tipos de IRPF disponibles en los desplegables de la interfaz.
float
default:"21.0"
Tipo de IVA que se aplica por defecto al crear una nueva factura. Puede cambiarse en Herramientas → Preferencias.
float
default:"15.0"
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.str
default:"\"PRES\""
Serie reservada para la numeración de presupuestos.
tuple[str, ...]
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.str
default:"\"FACT\""
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.
str
default:"\"lefa-smtp\""
Nombre de servicio con el que se registra la entrada en el llavero.
str
default:"\"password\""
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).
El valor por defecto de
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.
Devuelve el entero siguiente al mayor correlativo encontrado en la base de datos para la combinación de serie y año indicada. Si no existe ninguna factura previa, devuelve
1.
NumeracionService.formatear_numero()
Genera la cadena del número de factura a partir de sus componentes.
Ejemplo: