Saltar al contenido

Control de Préstamos

control-prestamos.mrubi.dev
Captura de Control de Préstamos

El reto principal

Un préstamo no es una fila en una tabla: es un contrato con una tabla de cuotas, un saldo que cambia con cada abono y un historial que tiene que cuadrar hacia atrás en cualquier momento. El reto fue que el saldo mostrado en pantalla y la suma de los movimientos registrados nunca pudieran discrepar, ni siquiera si el navegador se cierra a mitad de una operación.

Problema concreto

Registrar un abono toca tres tablas: el movimiento, la cuota que se salda y el saldo del préstamo. Si el proceso moría entre la segunda y la tercera, el préstamo quedaba descuadrado y no había forma limpia de saber cuál era el estado correcto. La solución fue envolver la operación completa en una transacción (START TRANSACTION / COMMIT / ROLLBACK) y dejar de guardar el saldo como un número editable: se calcula desde los movimientos.

Qué aprendí

Los datos derivados mienten en cuanto hay una escritura fallida. Si un número se puede calcular desde los hechos registrados, es mejor calcularlo que almacenarlo — y cuando el rendimiento obliga a almacenarlo, que sea la base de datos quien lo mantenga, no la aplicación.

  • Toda operación que toca varias tablas va dentro de una transacción, sin excepciones
  • El dinero se guarda en DECIMAL, nunca en FLOAT: los redondeos binarios se acumulan
  • Un informe financiero es la mejor prueba de integridad que puedes tener: si no cuadra, hay un bug
Tecnologías
  • PHP
  • MySQL
  • AdminLTE
  • Bootstrap
  • jQuery
  • VPS