Un antiguo problema que nunca se ha resuelto con elegancia.
Todos los paquetes bancarios con los que he trabajado almacenan el saldo con la entidad de cuenta. Calcularlo sobre la marcha a partir del historial de movimientos es impensable.
La forma correcta es:
- La tabla de movimientos tiene una transacción de "saldo de apertura" para todas y cada una de las cuentas. Necesitará esto dentro de algunos años cuando necesite mover movimientos antiguos de la tabla de movimientos activos a una tabla de historial.
- La entidad de cuenta tiene un campo de saldo
- Hay un activador en la tabla de movimientos que actualiza los saldos de las cuentas acreditadas y debitadas. Obviamente, tiene control de compromiso. Si no puede tener un activador, debe haber un único módulo que escribe movimientos bajo control de compromiso
- Tiene un programa de 'red de seguridad' que puede ejecutar sin conexión, que vuelve a calcular todos los saldos y muestra (y opcionalmente corrige) los saldos erróneos. Esto es muy útil para realizar pruebas.
Algunos sistemas almacenan todos los movimientos como números positivos y expresan el crédito/débito invirtiendo los campos desde/hasta o con una bandera. Personalmente, prefiero un campo de crédito, un campo de débito y una cantidad firmada, esto hace que las reversiones sean mucho más fáciles de seguir.
Tenga en cuenta que estos métodos se aplican tanto al efectivo como a los valores.
Las transacciones de valores pueden ser mucho más complicadas, especialmente para las acciones corporativas, deberá acomodar una sola transacción que actualice uno o más saldos de efectivo de compradores y vendedores, sus saldos de posiciones de valores y posiblemente el corredor/depositario.