Skip to content

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).

ServicioResponsabilidad
DeclaracionesServiceLifecycle del F29: list/get, updateStatus con guardas de IVA pagado, ajuste baja remanente, regenerar asientos anuales.
F29GeneratorServiceEngine 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.
DJ1879ServiceGenera DJ 1879 anual desde honorarios. Consolida por receptor, aplica factores de corrección monetaria, exporta CSV de 18 columnas para subir al SII.
DJ1887ServiceGenera 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).

Los 6 eventos del catálogo viven en DomainEventMap y se emiten post-COMMIT vía outbox transaccional:

EventoTriggerPayload
f29:generadaF29GeneratorService.generate (sin TX externa){ declaracionId, periodo: { anio, mes }, rutContribuyente }
f29:status_cambiadoDeclaracionesService.updateStatus (cuando cambia){ declaracionId, periodo, estado, prevEstado }
dj:1879_generadaDJ1879Service.generar{ declaracionId, anio, totalReceptores, totalRetencionHonorarios }
dj:1879_status_cambiadoDJ1879Service.validar (cuando cambia){ declaracionId, anio, estado, prevEstado }
dj:1887_generadaDJ1887Service.generar{ declaracionId, anio, totalTrabajadores, totalRentaActualizada, totalIUSC }
dj:1887_status_cambiadoDJ1887Service.validar (cuando cambia){ declaracionId, anio, estado, prevEstado }

Catálogo completo en Domain Events › Declaraciones.

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
Pieza algorítmicaServicioPara
Cálculo F29 desde fuentes (compras/ventas/boletas/honorarios/payroll)F29GeneratorServiceReemplaza el SP histórico con lógica TypeScript testeable.
Remanente anterior corregido por UTMF29GeneratorServiceActualiza el remanente del mes previo al período actual.
Ajuste baja remanente (SII notifica reducción)DeclaracionesServiceRegistra el monto, regenera el F29 y emite asiento contable de cargo a gasto.
Contabilización IVA al pasar a DECLARADODeclaracionesServiceMarca movimientos del período como PAGADO y genera asientos F29 anuales.
Guarda al revertir desde DECLARADODeclaracionesServiceRechaza si hay líneas en PAGADO (solo permite si todas están CONTABILIZADO).
Consolidación honorarios por receptor + factor correcciónDJ1879ServiceResume retenciones anuales con monto sin actualizar y actualizado.
Consolidación liquidaciones por trabajador + tope salud (60 UF × 7%)DJ1887ServiceCalcula renta tributable real respetando tope previsional.
CSV multi-sección (B/C, 56 cols, 12 meses)DJ1887ServiceFormato específico del SII AT 2026.
CSV 18 columnas (RUT + retenciones + 12 meses)DJ1879ServiceFormato específico del SII.

Los tres tipos comparten un statemachine similar:

BORRADOR → VALIDADO → DECLARADO
↘ ANULADO

El F29 además permite RECTIFICADO. Solo DeclaracionesService.updateStatus aplica el guard de reversa cuando hay IVA pagado.