Plataforma técnica · Orchestrator
Declaraciones Tributarias
Orchestrator Declaraciones Sii
El dominio Declaraciones consolida tres declaraciones tributarias chilenas en el Orchestrator:
- F29 — IVA y otros impuestos mensuales. Vive en
domain/declaraciones/. - DJ 1879 — Retenciones sobre honorarios (anual). Vive en
domain/declaraciones_juradas/. - DJ 1887 — Sueldos y retenciones de trabajo dependiente (anual). Vive en
domain/declaraciones_juradas/.
Las DJ se agrupan acá aunque vivan en otro directorio del backend — comparten flujo (consolidar período → corrección monetaria → header + detalle → CSV para SII) y UI (panel de declaraciones en Sevastopol).
Servicios
Section titled “Servicios”| Servicio | Responsabilidad |
|---|---|
DeclaracionesService | Lifecycle del F29: list/get, updateStatus con guardas de IVA pagado, ajuste baja remanente, regenerar asientos anuales. |
F29GeneratorService | Engine de cálculo del F29 (TypeScript). Reemplazó al SP sp_generar_f29. Calcula débito/crédito IVA, remanente con corrección UTM, PPM, IUSC, ajuste baja. |
DJ1879Service | Genera DJ 1879 anual desde honorarios. Consolida por receptor, aplica factores de corrección monetaria, exporta CSV de 18 columnas para subir al SII. |
DJ1887Service | Genera DJ 1887 anual desde liquidaciones PAGADAS. Aplica tope de salud (60 UF), calcula renta tributable real, exporta CSV de 56 columnas (Sección B + C). |
Hooks emitidos
Section titled “Hooks emitidos”Los 6 eventos del catálogo viven en DomainEventMap y se emiten post-COMMIT vía outbox transaccional:
| Evento | Trigger | Payload |
|---|---|---|
f29:generada | F29GeneratorService.generate (sin TX externa) | { declaracionId, periodo: { anio, mes }, rutContribuyente } |
f29:status_cambiado | DeclaracionesService.updateStatus (cuando cambia) | { declaracionId, periodo, estado, prevEstado } |
dj:1879_generada | DJ1879Service.generar | { declaracionId, anio, totalReceptores, totalRetencionHonorarios } |
dj:1879_status_cambiado | DJ1879Service.validar (cuando cambia) | { declaracionId, anio, estado, prevEstado } |
dj:1887_generada | DJ1887Service.generar | { declaracionId, anio, totalTrabajadores, totalRentaActualizada, totalIUSC } |
dj:1887_status_cambiado | DJ1887Service.validar (cuando cambia) | { declaracionId, anio, estado, prevEstado } |
Catálogo completo en Domain Events › Declaraciones.
Dependencias del dominio
Section titled “Dependencias del dominio”flowchart LR
subgraph CFG["Configuración"]
COMP["administracion.configuracion_empresa<br/>(razón social, RUT)"]
PARS["nostromo_common.parametros<br/>(UTM, UF, factores corrección)"]
end
subgraph SRC["Fuentes de datos"]
OP["operaciones_sii<br/>(ventas, compras, boletas, detalle)"]
HON["honorarios"]
LIQ["payroll.liquidaciones"]
end
subgraph SVC["domain/declaraciones[_juradas]/"]
F29G["F29GeneratorService"]
DCL["DeclaracionesService"]
DJ79["DJ1879Service"]
DJ87["DJ1887Service"]
end
subgraph OUT["Salida"]
F29T[("declaraciones.declaraciones_f29<br/>+ detalle + asientos_f29<br/>+ ajustes_remanente")]
DJ79T[("declaraciones_juradas.dj_1879_*")]
DJ87T[("declaraciones_juradas.dj_1887_*")]
CSV["CSV para SII<br/>(formatos específicos)"]
EVT["DomainEventBus<br/>(f29:* + dj:*)"]
end
COMP --> F29G
PARS --> F29G & DJ79 & DJ87
OP --> F29G
HON --> F29G & DJ79
LIQ --> F29G & DJ87
F29G --> F29T
DCL --> F29T
DCL -. invoca .-> F29G
DJ79 --> DJ79T --> CSV
DJ87 --> DJ87T --> CSV
F29G & DCL & DJ79 & DJ87 -. post-COMMIT .-> EVT Algoritmos clave (resumen)
Section titled “Algoritmos clave (resumen)”| Pieza algorítmica | Servicio | Para |
|---|---|---|
| Cálculo F29 desde fuentes (compras/ventas/boletas/honorarios/payroll) | F29GeneratorService | Reemplaza el SP histórico con lógica TypeScript testeable. |
| Remanente anterior corregido por UTM | F29GeneratorService | Actualiza el remanente del mes previo al período actual. |
| Ajuste baja remanente (SII notifica reducción) | DeclaracionesService | Registra el monto, regenera el F29 y emite asiento contable de cargo a gasto. |
Contabilización IVA al pasar a DECLARADO | DeclaracionesService | Marca movimientos del período como PAGADO y genera asientos F29 anuales. |
Guarda al revertir desde DECLARADO | DeclaracionesService | Rechaza si hay líneas en PAGADO (solo permite si todas están CONTABILIZADO). |
| Consolidación honorarios por receptor + factor corrección | DJ1879Service | Resume retenciones anuales con monto sin actualizar y actualizado. |
| Consolidación liquidaciones por trabajador + tope salud (60 UF × 7%) | DJ1887Service | Calcula renta tributable real respetando tope previsional. |
| CSV multi-sección (B/C, 56 cols, 12 meses) | DJ1887Service | Formato específico del SII AT 2026. |
| CSV 18 columnas (RUT + retenciones + 12 meses) | DJ1879Service | Formato específico del SII. |
Convención de estados
Section titled “Convención de estados”Los tres tipos comparten un statemachine similar:
BORRADOR → VALIDADO → DECLARADO ↘ ANULADOEl F29 además permite RECTIFICADO. Solo DeclaracionesService.updateStatus aplica el guard de reversa cuando hay IVA pagado.