Ferred implementa la facturación electrónica según el estándar DTE (Documento Tributario Electrónico) del Ministerio de Hacienda de El Salvador. Cada venta genera automáticamente una Factura de Consumidor Final (tipoDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Carlos-Gnd/FERRED-Inventario-y-Ventas/llms.txt
Use this file to discover all available pages before exploring further.
01) que se construye, firma y envía al sistema de Hacienda de forma asíncrona. Si el servicio de Hacienda no está disponible en el momento de la venta, esta igual queda registrada y el DTE puede reenviarse después.
¿Qué es un DTE?
Un DTE (Documento Tributario Electrónico) es el comprobante fiscal digital obligatorio en El Salvador desde la implementación del sistema de facturación electrónica del Ministerio de Hacienda. Ferred genera exclusivamente el tipo01: Factura de Consumidor Final, orientada a ventas al público en general sin necesidad de identificar al comprador.
Cada DTE contiene:
- Un
codigoGeneracion(UUID v4 en mayúsculas) que identifica unívocamente el documento. - Un
numeroControlcon formatoDTE-01-<sucursal>P001-<secuencia>. - Un JSON estructurado que incluye datos del emisor, receptor, items vendidos y resumen fiscal.
- Un código QR apuntando al portal de consulta pública de Hacienda.
Ciclo de vida del DTE
UnaFacturaDte transita entre los siguientes estados:
| Estado | Descripción |
|---|---|
SIMULADO | Estado inicial tras crear la venta. También se usa cuando el sandbox de Hacienda no está disponible (timeout de red). |
PENDIENTE | Estado temporal que se asigna al iniciar un reenvío manual con POST /api/dte/:id/reenviar. |
PROCESADO | Hacienda respondió con estado: "PROCESADO" y devolvió un selloRecibido. El DTE es válido fiscalmente. |
ERROR_HACIENDA | Hacienda respondió con un código HTTP 4xx/5xx o con un estado distinto de PROCESADO. Requiere revisión. |
ERROR_INTERNO | El sistema de Ferred no pudo construir o enviar el DTE por un error interno (base de datos, etc.). |
Estructura del JSON DTE
El servicioconstruirJsonDTE en dte.service.ts genera el siguiente documento:
uniMedida) se mapean desde el tipoUnidad del producto según el catálogo de Hacienda:
tipoUnidad en Ferred | Código Hacienda | Descripción |
|---|---|---|
PESO | 32 | Kilogramo |
MEDIDA | 52 | Metro |
LOTE | 26 | Caja |
UNIDAD / otros | 59 | Unidad |
Generación del QR
El QR se genera como imagen base64 usando la libreríaqrcode y apunta al portal público de consulta de Hacienda:
{ "qrBase64": "data:image/png;base64,..." }. Requiere que la factura ya tenga un codigoGeneracion asignado (es decir, que el DTE haya sido construido al menos una vez).
Reenvío de DTEs fallidos
Si un DTE quedó en estadoERROR_HACIENDA o SIMULADO y deseas reenviarlo:
ADMIN, CAJERO (solo su sucursal).
El servicio reenviarDTE:
- Actualiza el estado de la factura a
PENDIENTE. - Llama a
enviarDteHacienda(facturaId)de forma síncrona y devuelve el resultado.
estado final (PROCESADO, ERROR_HACIENDA, etc.) y, si fue exitoso, el selloRecibido de Hacienda y el qrBase64.
Modo sandbox vs producción
El ambiente del DTE se controla con la variable de entornoDTE_ENV:
Valor DTE_ENV | Campo ambiente en el JSON | Descripción |
|---|---|---|
sandbox | "00" | Envíos al sandbox de pruebas de Hacienda |
| cualquier otro | "01" | Envíos al sistema productivo de Hacienda |
DTE_ENV y configura las credenciales reales (DTE_AUTH_TOKEN o DTE_SANDBOX_USER / DTE_SANDBOX_PASS).