Infraestructura contable
Hostra mantiene un libro contable de partida doble como fuente única de verdad del movimiento de dinero. Cada transacción es un conjunto balanceado de cargos y abonos, los asientos no cambian una vez escritos y los saldos se calculan a partir de ellos, no se guardan ni se editan.
Por qué partida doble
Un saldo en una sola columna puede estar mal sin que nadie lo note: una actualización se aplica dos veces, se registra un reembolso pero no la comisión, y el número en la base ya no se explica solo. La partida doble vuelve inválido un estado incorrecto: una transacción que no cuadra no se confirma. Además, la respuesta a «por qué este saldo es así» siempre es la lista de asientos que lo formaron.
El modelo
- Cuenta
- Una posición del catálogo de cuentas: saldo del comercio, compensación con el proveedor, ingreso por comisiones, costo de red.
- Asiento
- Un solo cargo o abono en una cuenta, con monto, moneda y precisión en unidades mínimas.
- Transacción
- Un conjunto de asientos cuyos cargos y abonos deben sumar cero antes de confirmarse.
- Reglas de registro
- Relación determinista entre un evento de liquidación y sus asientos: el mismo evento siempre se registra igual.
- Saldo
- Un valor calculado a partir de los asientos, no un contador editable que pueda alejarse del historial.
- Registro de auditoría
- Un eslabón de la cadena de hashes del cambio de estado, verificable en el endpoint de auditoría.
Propiedades
- Balanceado: en cada transacción confirmada los cargos son iguales a los abonos.
- Inmutable: los asientos solo se agregan, nunca se editan. Una corrección es una nueva transacción compensatoria.
- Saldos calculados: el saldo se obtiene de los asientos, así que historial y estado nunca se contradicen.
- Unidades mínimas: los montos se guardan como enteros en centavos para evitar errores de redondeo.
- Determinista: el mismo evento de liquidación genera siempre los mismos asientos, por eso los reintentos son seguros.
- Auditable: cada cambio de estado extiende una cadena de hashes que se puede verificar de forma independiente.
Relación con la liquidación
El libro contable no llama a proveedores y el motor de liquidación no inventa la contabilidad. El motor controla el ciclo de vida de una instrucción —pendiente, en curso, exitosa, fallida o revertida— y cada transición genera los asientos definidos para ella. Como el motor confirma exactamente una vez, el libro nunca recibe un asiento duplicado; y como los asientos son deterministas, repetir un evento no puede dar otro resultado contable.
Conciliación
La conciliación compara tres fuentes: lo que dice el libro contable, el estado final que registró el motor de liquidación y lo que reporta el proveedor o la red. Como los asientos son inmutables y están encadenados, cualquier diferencia apunta a una transacción concreta y no a un saldo inexplicable. Las diferencias se resuelven con una transacción compensatoria, sin tocar el historial original.