Cliente: Cashela

El interruptor que nadie había medido

El módulo de liquidación estaba construido, revisado y desplegado. Solo faltaba encenderlo en producción. Antes de hacerlo hice la pregunta que no estaba en el ticket: ¿qué se mueve en la primera corrida?

Órdenes acumuladas
25
Que el job nunca tomaría
9
Movido antes de medir
nada

El reto

Liquidar es mover dinero retenido desde la wallet donde entra el pago hacia la wallet gastable del comercio, cuando se cumple el plazo pactado con el proveedor. El proceso automático estaba listo y solo quedaba encender la bandera. Pero el sistema llevaba meses acreditando pagos sin liquidarlos, y nadie había mirado qué se había acumulado del otro lado del interruptor. Encender es una acción de un segundo con un efecto que no se deshace: el dinero, una vez movido, ya se movió.

El enfoque

Medí el estado real contra una copia de producción antes de tocar nada. Aparecieron 25 órdenes acreditadas y sin liquidar, y lo decisivo fue que no eran un solo grupo sino dos problemas opuestos. Unas tenían la fecha de liberación ya vencida: el proceso las tomaría todas juntas en la primera corrida, en un único lote, sin que nadie hubiera decidido que eso debía ocurrir ese día. Las otras no tenían fecha en absoluto, y a ésas el proceso no las tomaría nunca — la fecha se sella al acreditar y encender el automático no rellena hacia atrás. Iban a quedar retenidas para siempre, en silencio y sin error. Encima, el saldo retenido superaba lo que reclamaban las órdenes por el importe exacto de una de ellas: un crédito duplicado, no un redondeo.

Resultados

Antes de encender nada se separó lo que se mueve solo de lo que no se movería jamás, y cada grupo salió por su propio camino: el automático para los vencidos y una mesa manual en el backoffice para los que el proceso nunca tomaría. En el camino se corrigieron dos cosas más: el importe que se liquida es el neto que efectivamente entró y no el bruto que puso el pagador —mover el bruto habría liberado comisiones que no son del comercio— y las banderas del automático se sacaron del árbol del backoffice, porque apagar un menú no puede apagar el motor que mueve el dinero. El principio quedó escrito: antes de encender un proceso automático sobre dinero, medir el backlog que va a encontrar. Un interruptor nuevo sobre datos viejos no es una función nueva, es una migración.

Tecnologías

Laravel · PostgreSQL · SQL forense · Feature flags · Jobs programados