Por qué el saldo acumulado no es una prueba: el modelo de asientos contables en los sistemas financieros
Leer en portugués
Cuando aparece un saldo erróneo —1.200 R$ de más en una cuenta y 800 R$ de menos en otra—, la pregunta más básica de cualquier auditor es: ¿de dónde ha salido? La respuesta depende por completo de la arquitectura de datos. Los sistemas que almacenan el saldo por línea no registran el origen de cada discrepancia como dato estructurado, por lo que no es posible consultar el recorrido que ha llevado a esa cifra. Los sistemas basados en asientos contables registran cada entrada con su origen, momento y cuenta vinculada, y el saldo siempre se deriva de esos registros.
El principio
Toda transacción financiera tiene dos caras: un importe sale de algún sitio y entra en otro, con el débito y el crédito en equilibrio permanente. La partida doble es una propiedad matemática con unos 500 años de uso continuo: la suma de los débitos es igual a la suma de los créditos en cualquier operación correcta.
Lo que hace que este modelo sea robusto en el ámbito del software es la atomicidad. Una transacción se aplica en su totalidad o no se aplica: todos los asientos que la componen persisten juntos, o ninguno persiste. No existe un estado intermedio en el que se haya producido el débito pero aún no el crédito correspondiente. Esta garantía es la que impide que el valor desaparezca o aparezca de la nada en caso de fallo del sistema.
Los asientos como eventos
El modelo de asientos es, en la práctica, un registro de eventos inmutable. Cada entrada registra lo que ha ocurrido, en qué cuenta, en qué momento y como parte de qué transacción. El saldo no es una cifra almacenada por separado: es una proyección calculada a partir de esos eventos. Esta distinción tiene una consecuencia operativa importante: el estado completo del libro mayor puede reconstruirse desde cero, en cualquier momento, volviendo a procesar los eventos en el orden en que ocurrieron. La auditoría, la reconstrucción histórica y la depuración de discrepancias pasan a ser consultas sobre el mismo registro que sustenta la operación.
Consistencia
En los sistemas financieros, la consistencia eventual no es una opción. Un saldo debe ser correcto en el momento de la consulta, y cualquier lectura que devuelva un estado desactualizado genera un riesgo operativo concreto: autorización de pago sobre un saldo incorrecto, discrepancia entre el extracto y la posición real, inconsistencia entre sistemas que utilizan el mismo libro mayor. Un libro mayor basado en asientos atómicos garantiza una consistencia fuerte: una vez confirmada una transacción, todos los asientos que la componen son visibles y el saldo refleja el estado real, sin ventanas de inconsistencia.
Lo que hacen la mayoría de los sistemas
La mayoría de los sistemas financieros almacenan el saldo, actualizando una cifra por línea en cada operación. Esta opción funciona bien en condiciones normales, pero empieza a presentar problemas cuando es necesario investigar, auditar o reconstruir el sistema.
Cuando el saldo es erróneo, no hay pruebas de cómo se ha llegado a esa situación. El historial de movimientos, cuando existe, se convierte en un registro independiente, sin vínculo formal con el saldo real, lo que convierte la conciliación en un trabajo manual, obliga a realizar una reconstrucción retroactiva antes de cada auditoría y añade riesgo de inconsistencia a cualquier anulación. La fragilidad estructural de este modelo solo se hace evidente cuando es necesario investigar el sistema a fondo, y en ese momento el coste de no disponer de trazabilidad ya se ha acumulado.
Lo que debe tener un libro mayor correcto
Un libro mayor basado en el sistema de partida doble tiene algunas propiedades innegociables, que se refuerzan mutuamente.
- Atomicidad: cada transacción persiste en su totalidad o no persiste, sin estados intermedios visibles.
- Inmutabilidad: ningún asiento se borra ni se edita; los errores se corrigen con nuevos asientos, manteniendo el historial completo y verificable.
- Trazabilidad por operación: cada transacción genera entradas vinculadas, con el débito y el crédito registrados como un par.
- Jerarquía de cuentas: las cuentas se organizan en forma de árbol y el saldo de cualquier nodo se deriva de los asientos de sus hijos.
- Multactivos: una operación puede movimentar más de un activo sin necesidad de soluciones provisionales en el modelo.
Gracias a estas propiedades, cualquier saldo se puede deducir a partir de los asientos, la auditoría es determinista y la anulación es una operación predecible.
Las consecuencias de no hacerlo
Una entidad financiera con una arquitectura basada en saldos se enfrenta a los mismos problemas, en orden: inconsistencias puntuales que no cuadran, conciliación manual que se complica con el volumen, reconstitución retroactiva antes de cada auditoría y dificultad para responder a preguntas sencillas como cuál era el saldo de una cuenta el día 15, a las 14:23.
En entornos regulados, la falta de trazabilidad supone un riesgo operativo: el Bacen, los auditores externos y los socios de custodia exigirán pruebas del origen de los saldos, y una cifra almacenada por línea, sin el historial de asientos que la compone, no cumple este requisito.
Lo que ha creado Lerian
El núcleo bancario de Lerian implementa el sistema de partida doble desde el principio, como modelo de datos fundamental. Cada operación genera asientos vinculados, todos los saldos se calculan a partir de los asientos, el historial es inmutable por diseño y la jerarquía de cuentas se admite de forma nativa. Las transacciones son atómicas por naturaleza, y el modelo de eventos garantiza que cualquier estado histórico del libro mayor sea reconstruible a partir de los propios registros de las operaciones.
El código es abierto, lo que significa que cualquier ingeniero puede auditar el modelo, comprobar cómo funcionan los asientos y confirmar que las propiedades del libro mayor se mantienen en producción. En una infraestructura financiera regulada, la auditabilidad es un requisito imprescindible.
Lee la documentación o consulta el código en GitHub.