Skip to content

Plataforma técnica · Orchestrator

Servicios de Finanzas

Orchestrator Finanzas Servicios

El dominio Finanzas del Orchestrator vive en orchestrator/src/domain/financieros/ y coordina la operación bancaria del tenant: cuentas bancarias, movimientos, libro banco, conciliación, anticipos de proveedor y préstamos.

El enfoque de esta sección es dev/orchestrator. Por lo tanto, documenta servicios, routers, repositorios, eventos y reglas de validación. La lectura contable general se mantiene en Finanzas · contable y los estados financieros se documentan en Balances.

flowchart TB
  subgraph ROUTES["routes/financieros/"]
    IDX["index.ts<br/>monta sub-routers"]
    RB["bancos.ts"]
    RM["movimientos.ts"]
    RC["conciliacion.ts"]
    RA["anticipos.ts"]
    RP["prestamos.ts"]
    RL["libro-banco.ts"]
    RCM["categorias-movimiento.ts"]
    RR["resoluciones-conciliacion.ts"]
  end

  subgraph DOMAIN["domain/financieros/"]
    FS["FinancierosService"]
    MS["MovimientosService"]
    CS["ConciliacionService"]
    AS["AnticiposProveedorService"]
    PS["PrestamosService"]
    FR["FinancierosRepository"]
    MR["MovimientosRepository"]
    CR["ConciliacionRepository"]
    AR["AnticiposProveedorRepository"]
    PR["PrestamosRepository"]
    RCR["ResolucionesConciliacionRepository"]
    TYPES["types.ts<br/>(DTOs e interfaces)"]
    LST["listeners.ts"]
  end

  subgraph DB["Mother · schema financieros"]
    CATB[("categorias_bancarias")]
    BAN[("bancos")]
    MOV[("movimientos_bancarios")]
    CATM[("categorias_movimiento")]
    CON[("conciliacion_bancaria")]
    ANT[("aplicaciones_anticipos_proveedor")]
    PRE[("prestamos")]
    AMO[("amortizacion_cuotas")]
    RES[("resoluciones_conciliacion")]
  end

  subgraph EXT["Schemas externos consumidos"]
    PC[("administracion.plan_contable")]
    CVD[("operaciones_sii.compras_ventas_detalle")]
    F29[("declaraciones.declaraciones_f29")]
    HON[("remuneraciones.honorarios")]
  end

  subgraph EVENTS["domain/common/events"]
    BUS["DomainEventBus"]
  end

  IDX --> RB
  IDX --> RM
  IDX --> RC
  IDX --> RA
  IDX --> RP
  IDX --> RL
  IDX --> RCM
  IDX --> RR

  RB --> FS
  RCM --> FS
  RL --> FS
  RM --> MS
  RC --> CS
  RA --> AS
  RP --> PS
  RR --> CS

  FS -.usa.-> FR
  MS -.usa.-> MR
  MS -.valida categorías.-> FR
  CS -.usa.-> CR
  CS -.lee movimientos.-> MR
  CS -.categoriza.-> FR
  CS -.anticipos.-> AR
  CS -.resoluciones.-> RCR
  AS -.usa.-> AR
  PS -.usa.-> PR

  FR --> CATB
  FR --> BAN
  FR --> CATM
  FR --> CON
  MR --> MOV
  CR --> CON
  AR --> ANT
  PR --> PRE
  PR --> AMO
  RCR --> RES

  FR -.valida cuenta.-> PC
  CR -.valida documentos.-> CVD
  CR -.pago F29.-> F29
  CR -.pago honorarios.-> HON

  MS -- "outbox.queue<br/>movimiento:vinculado" --> BUS
  CS -- "outbox.queue<br/>conciliacion:matched" --> BUS
  CS -- "outbox.queue<br/>conciliacion:desconciliada" --> BUS
  BUS -- "compra:contabilizada" --> LST
  LST -- "solicitarMatch()" --> CS
ServicioResponsabilidad
FinancierosServiceMantiene categorías bancarias, bancos, categorías de movimiento, libro banco y lectura base de conciliación. Valida cuentas contra administracion.plan_contable cuando corresponde.
MovimientosServiceLista, crea, edita y elimina movimientos bancarios manuales. Valida ABONO/CARGO, monto positivo, estado PENDIENTE para cambios destructivos y dispara ETL BancoEstado desde ruta.
ConciliacionServiceVincula movimientos con compras/ventas, F29 u honorarios; registra conciliación manual; desconcilia; marca incobrables; castiga contra estimación; compensa documentos cliente/proveedor.
AnticiposProveedorServiceExpone anticipos disponibles de proveedor y aplica saldos contra facturas de compra pendientes. Requiere categoría ANTICIPO-PROV con cuenta contable configurada.
PrestamosServiceRegistra préstamos, genera tabla de amortización francesa, lista cuotas y marca cuotas pagadas. Bloquea eliminación si existen cuotas pagadas.

El router principal routes/financieros/index.ts aplica authenticateToken una vez y monta sub-routers especializados. Todas las rutas quedan bajo /api/financieros.

RouterFamilias de endpointsServicio principal
bancos.ts/categorias, /bancosFinancierosService
categorias-movimiento.ts/categorias-movimientoFinancierosService
libro-banco.ts/libro-banco?bancoId&anio&mesFinancierosService
movimientos.ts/movimientos, /movimientos-sistema, /movimientos/:id, /movimientos/etlMovimientosService
conciliacion.ts/conciliacion/*ConciliacionService
anticipos.ts/anticipos-proveedor/*AnticiposProveedorService
prestamos.ts/prestamos/*PrestamosService
resoluciones-conciliacion.ts/resoluciones-conciliacionConciliacionService

ConciliacionService.vincular(ctx, dto) es el flujo central. Valida que exista el movimiento bancario, que el total asignado no exceda el monto disponible y que los documentos estén en un estado conciliable.

ContrapartidaValidaciónEfecto
COMPRA_VENTADocumento en operaciones_sii.compras_ventas_detalle con estado CONTABILIZADO.Marca documentos como pagados y actualiza estados de conciliación.
DECLARACIONF29 con total_a_pagar > 0 y estado distinto de ANULADO.Registra fecha_pago con la fecha del movimiento bancario.
HONORARIOHonorario en estado CONTABILIZADO.Cambia a PAGADA, registra fecha_pago_real y forma_pago.
MANUALMovimiento con categoría contable y sin conciliaciones parciales previas.Cierra el movimiento como conciliado sin documento externo.

La forma de pago se deriva del banco: si tipo_cuenta = 'CAJA', se usa EFECTIVO; en los demás casos se usa TRANSFERENCIA.

Cuando el movimiento no tiene categoría manual, conciliación asigna una categoría de movimiento por código de negocio:

CódigoCaso
PAGO-IMPPago de declaración F29 sin otros documentos.
PAGO-HONPago de honorario sin otros documentos.
PAGO-PROVDocumento de compra/proveedor.
COBRO-CLTEDocumento de venta o boleta.
ANTICIPO-PROVMovimiento de cargo tratado como anticipo a proveedor. Debe tener cuenta_contable_codigo.
DirecciónEventoTriggerServicio
Emitemovimiento:vinculadoMovimiento manual creado o actualizado con categoría de movimiento; conciliación que asigna categoría automática.MovimientosService, ConciliacionService
Emiteconciliacion:matchedVinculación bancaria exitosa contra documentos comerciales.ConciliacionService
Emiteconciliacion:desconciliadaDesconciliación de un movimiento.ConciliacionService
Consumecompra:contabilizadaCompra contabilizada con formaPago transferencia o cheque.listeners.ts llama ConciliacionService.solicitarMatch.

El outbox transaccional de BaseService.withTransaction encola los eventos dentro de la transacción y los publica al DomainEventBus después del COMMIT. Si la transacción falla, los eventos no se emiten.

PrestamosService.generarAmortizacion(ctx, prestamoId, overrides) calcula amortización francesa. La tasa anual se transforma a tasa periódica según periodicidad (MENSUAL, TRIMESTRAL, SEMESTRAL, ANUAL) y la última cuota ajusta el capital restante para evitar residuos por redondeo.

OperacionRegla
Crear préstamoRequiere banco, nombre, tipo, monto original, tasa, fecha inicio, vencimiento y número de cuotas.
Generar amortizaciónBorra cuotas previas del préstamo e inserta la nueva tabla calculada.
Pagar cuotaRequiere fecha de pago y monto pagado positivo.
Eliminar préstamoSe bloquea si existen cuotas pagadas.
SchemaUso
financierosTablas propias del dominio: bancos, movimientos, categorías, conciliación, resoluciones, anticipos, préstamos y cuotas.
administracionValidación de cuentas contables contra plan_contable.
operaciones_siiDocumentos comerciales conciliables y estados de pago.
declaracionesF29 conciliable contra movimientos bancarios.
remuneracionesHonorarios conciliables y cambio de estado a pagado.
PatrónCómo se aplica
BaseService.withTransaction(ctx, cb)Mutaciones de bancos, categorías, movimientos, conciliación, anticipos y préstamos se ejecutan con transacción cuando cambian estado.
Repository estáticoCada repositorio expone métodos static async y se consume desde el servicio correspondiente.
Transactional OutboxMovimientos y conciliación encolan eventos dentro de la TX y los publican post-COMMIT.
Observerlisteners.ts escucha compra:contabilizada y solicita match automático cuando la forma de pago es transferencia o cheque.
Validación defensivaEl servicio valida estado, monto disponible, cuentas contables, tipo de documento y cobertura antes de persistir.