Cálculos financieros (saldos, arqueo, traspasos). Invocar al tocar montos NUMERIC, saldos, métricas de dashboard o movimientos espejo.
NUMERIC llega como string en JS → usar parseFloat(). Nunca parseInt().Fuente de verdad: src/services/cuenta_banco.service.ts.
estado = 'PAGADO'.INGRESOEGRESOTRASPASO_ENTRADATRASPASO_SALIDAFuente de verdad: src/services/reporte.service.ts.
ESTADOS_EJECUTADOS = ['APROBADO', 'PAGADO']APROBADO: comprometido/ejecutado a nivel financiero (aunque no esté pagado)PAGADO: ejecutado y pagadoSe deriva de:
saldoInicialDonde “estado aplicable” depende del contexto:
PAGADOAPROBADO + PAGADOSIN_SALDO_REAL si no hay saldo realCUADRADO si diferencia <= tolerancia (0.01)SOBRANTE si saldoReal > saldoCalculadoFALTANTE si saldoReal < saldoCalculadoFuente: src/services/movimiento.service.ts + tests tests/categorias/aprobacion-automatica.test.ts.
requiereAprobacion=false: el movimiento puede pasar a APROBADO al crear (si no está efectuado).requiereAprobacion=true y montoMaxSinAprobacion está definido:
monto <= montoMaxSinAprobacion → APROBADOmonto > montoMaxSinAprobacion → PENDIENTEFuente: schema cuentasBanco.esGlobal + tabla cuentaNegocio.
esGlobal=true: cuenta visible para cualquier negocio.esGlobal=false: cuenta visible si:
cuentasBanco.negocioId coincide, ocuentaNegocio(cuentaId, negocioId) (cuenta compartida).TRASPASO_SALIDA (origen)TRASPASO_ENTRADA (destino)traspasoRefId)