Ir al contenido
FINORA Academy
SistemaFINORA Core

FINORA Core · Conceptos

Partida doble garantizada por la base de datos

En desarrolloImplementado

La partida doble es la regla más vieja de la contabilidad: todo lo que entra por un lado sale por otro. En cada comprobante, la suma del debe es igual a la suma del haber.

CuentaDebeHaber
Caja1.250,00
Depósitos de ahorro del cliente1.250,00
Total1.250,001.250,00

El problema: una regla que dependía de cada programa

Sección titulada «El problema: una regla que dependía de cada programa»

Hasta ahora, en FINORA Core solo el motor de asientos comprobaba el cuadre, y solo para lo que pasaba por él. Otros caminos (la taquilla, el reverso, la distribución de costos, la remesa) escribían líneas directamente. Si uno de ellos dejaba un comprobante con una sola pata, nadie se enteraba hasta el cierre, o nunca.

Es como una balanza de mercado donde cada vendedor promete pesar bien. Mientras todos cumplan, no pasa nada. El día que uno no cumple, nadie lo nota.

La solución: que la base de datos no deje cerrar la bolsa

Sección titulada «La solución: que la base de datos no deje cerrar la bolsa»

Ahora la regla vive en la base de datos, que es por donde pasan todos los programas sin excepción:

sequenceDiagram
  participant P as Cualquier programa
  participant BD as Base de datos
  P->>BD: Línea DR Caja 1.250,00 (comprobante C-1)
  P->>BD: Línea CR Depósitos 1.250,00 (comprobante C-1)
  P->>BD: COMMIT
  BD->>BD: ¿C-1 cuadra por moneda? Debe 1.250,00 = Haber 1.250,00
  BD-->>P: Confirmado
  P->>BD: Línea DR Caja 500,00 (comprobante C-2) y COMMIT
  BD->>BD: ¿C-2 cuadra? Debe 500,00, Haber 0,00
  BD-->>P: Modo alerta: confirma y registra la violación. Modo estricto: revierte todo

Cuatro controles, explicados sin código:

  1. Cuadre al confirmar. Al hacer commit, cada comprobante tocado por la transacción debe cuadrar por compañía, comprobante y moneda. Se revisa al final y no línea por línea, porque un comprobante se arma con varias líneas.
  2. Fecha cerrada. Un día cerrado y reportado no admite asientos nuevos. El cierre y los asientos se turnan con un candado: el cierre espera a que terminen los asientos en curso y los incluye; lo que llega durante el cierre espera y después ve la fecha cerrada.
  3. Comprobante obligatorio. Sin comprobante no hay cuadre posible. El concepto y la moneda también se controlan, porque sin ellos no hay trazabilidad ni reporte por moneda.
  4. Idempotencia sin dobles. Si una operación se reintenta (se cayó la red, el usuario pulsó dos veces), la segunda vez el core devuelve el asiento de la primera en lugar de crear otro. Y si la misma clave vuelve con otro monto, lo registra como violación.

El cierre usa comprobantes por fecha que pueden tener millones de líneas. Volver a sumarlos completos en cada lote sería lentísimo. Por eso la base usa un atajo seguro: si lo que esta transacción agregó al comprobante suma cero, el comprobante sigue igual de cuadrado que antes, y no hace falta releerlo. Solo cuando lo agregado no suma cero se suma el comprobante completo.

ModoQué pasa con un comprobante descuadradoPara qué
Alerta (hoy)Se confirma y queda registrada una violación con su detalleMedir antes de endurecer: saber qué caminos fallan
EstrictoSe revierte la transacción completa con un código de error propioHacer imposible el descuadre

Cambiar de modo lo hace un aprobador contable, con un motivo que queda en la bitácora. Una violación se resuelve con una nota, pero resolverla no toca el mayor: un descuadre histórico se corrige con un asiento de ajuste aprobado, y la nota cita ese comprobante.

  • La Conciliación Continua lee estas violaciones en su tablero; sin este guardián, ese bloque queda en gris.
  • Reabrir una fecha cerrada ahora exige rol, motivo y cuatro ojos: lo pide una persona y lo aprueba otra. Ver Cuatro ojos: nadie aprueba lo suyo.
  • Las decisiones que siguen abiertas son del contador: el plan de cuentas oficial y su naturaleza, la cuenta de residuo del redondeo y la moneda funcional.