Skip to content

Plataforma técnica · Orchestrator

Movimientos Service

Orchestrator Finanzas Movimientos

MovimientosService gobierna los movimientos bancarios visibles para conciliación. Distingue movimientos importados o del sistema de movimientos manuales creados por el usuario.

MétodoUso
getMovimientos(ctx, filter)Lista movimientos bancarios por banco, periodo, tipo, estado, texto, rango de monto e inclusión de anticipos proveedor.
createMovimiento(ctx, data)Crea movimiento manual. Si incluye categoria_movimiento_id, encola movimiento:vinculado.
getMovimientosSistema(ctx, filter)Lista documentos del sistema candidatos a conciliación.
updateMovimiento(ctx, id, data)Edita movimiento manual solo si está PENDIENTE. Si asigna categoría, encola movimiento:vinculado.
deleteMovimiento(ctx, id)Elimina movimiento solo si está PENDIENTE.
triggerEtlBancoEstado(ctx, data)Valida bancoId y periodo; la ruta ejecuta el proceso Python.
Campo o estadoRegla
tipo_movimientoDebe ser ABONO o CARGO.
montoDebe ser mayor a 0.
categoria_movimiento_idSi se informa, debe existir en FinancierosRepository.findCategoriaMovimientoById.
EdiciónSolo se permite sobre movimientos en estado PENDIENTE.
EliminaciónSolo se permite sobre movimientos en estado PENDIENTE.
periodo ETLDebe tener formato YYYY-MM.

El servicio lo encola dentro de withTransaction cuando un movimiento queda asociado a una categoría contable.

TriggerCondición
createMovimientocategoria_movimiento_id != null
updateMovimientocategoria_movimiento_id != null

El payload se resuelve desde MovimientosRepository.findMovimientoVinculadoEventPayload, para no duplicar armado de datos en el servicio.

La ruta /api/financieros/movimientos/etl valida el request y ejecuta python -m accounting_system.banco_estado_loader con --banco-id y --periodo, usando c:\dev\Nostromo como cwd.

MétodoRutaService call
GET/api/financieros/movimientosgetMovimientos(ctx, filter)
GET/api/financieros/movimientos-sistemagetMovimientosSistema(ctx, filter)
POST/api/financieros/movimientoscreateMovimiento(ctx, body)
PUT/api/financieros/movimientos/:idupdateMovimiento(ctx, id, body)
DELETE/api/financieros/movimientos/:iddeleteMovimiento(ctx, id)
POST/api/financieros/movimientos/etltriggerEtlBancoEstado(ctx, body) y spawn Python desde la ruta