El dinero no se duplica · Episodio 2 de 7
El Bizum que se queda a medias
Laura envía 150 € por Bizum a Ana, que tiene su cuenta en otro banco. Operaciones descuenta el cupo, Cuentas carga los 150 € y Bizum devuelve un rechazo: el teléfono de Ana ya no tiene Bizum. Cada paso se ha hecho bien. El conjunto se ha quedado a medias.
El punto de partida
Las áreas del banco terminó con una decisión y una pregunta. La decisión: el límite diario de Bizum es un agregado propio, separado de la cuenta, para que la regla de los 2.000 € al día se cumpla venga el Bizum de la cuenta que venga. La pregunta: ¿qué pasa si el límite se descuenta y el cargo en la cuenta falla?
Un Bizum a otro banco tiene cuatro pasos, en tres contextos y un sistema externo. Operaciones reserva el cupo en el límite de Laura; Cuentas carga los 150 €; el sistema de Bizum lo envía al banco de Ana; Comunicación avisa a Laura. Cada paso tiene su propia transacción, y no hay ninguna que cubra los cuatro.
Hacer y deshacer
Si no hay una transacción que deshaga todo de golpe, hay que deshacer paso a paso. Para cada paso se diseña su compensación: lo que contrarresta su efecto. Y alguien tiene que llevar la cuenta de qué pasos se han hecho para saber qué compensar. Esa lista de pasos con sus compensaciones es una saga.
En la simulación, los pasos están en fila, cada uno en el color de su contexto, y las compensaciones debajo. Elige qué falla y envía el Bizum. Compara un banco sin saga (cada paso hace lo suyo y ya) con uno en el que Operaciones dirige la saga.
Qué ha pasado
- Sin saga, un fallo deja a Laura sin cupo, sin dinero, o sin las dos cosas, y a Ana sin nada. No es un error de ningún equipo: cada paso hizo bien lo suyo. Falta alguien que vea el conjunto.
- Con saga, se compensa hacia atrás lo que ya se hizo, y solo eso. Si falla el cargo, solo hay que devolver el cupo; si Bizum lo rechaza, hay que devolver también el dinero.
- La compensación de Cuentas no borra el cargo. Los movimientos son inmutables: lo que se registra es un abono, «devolución de Bizum», y en el extracto de Laura quedan los dos. Una compensación es un hecho nuevo, no un borrado.
- Después del pivote no se compensa. Una vez el banco de Ana ha aceptado el dinero, deshacerlo sería pedirle a Ana que lo devuelva. Si falla el aviso, se reintenta hacia delante hasta que llega.
La saga del Bizum la dirige Operaciones: es un director, como el proceso de alta del episodio 6 de Las áreas del banco. Sabe en qué paso está cada Bizum y qué compensación toca si algo falla. También podría hacerse por coreografía, con cada contexto reaccionando al fallo del siguiente, pero con cuatro pasos y un sistema externo es más fácil de seguir con un director.
Una compensación no es un «deshacer»
Una transacción de base de datos deshace sin dejar rastro: si no se confirma, es como si nunca hubiera pasado. Una compensación deja rastro, y eso tiene consecuencias de negocio. Laura ha visto bajar su saldo durante unos segundos; alguien tiene que decidir si se le notifica el cargo y la devolución o solo el rechazo. Y una compensación también puede fallar (Cuentas puede estar caída cuando toca abonar), así que tiene que poder reintentarse sin abonar dos veces: es la idempotencia del episodio anterior.
El recibo que vuelve seis semanas después
Con las domiciliaciones, una saga puede durar mucho más que un Bizum. El recibo de la luz se presenta, se carga en la cuenta de Laura y el banco del acreedor cobra. Parece terminado. Pero Laura puede devolver un recibo cargado durante las ocho semanas siguientes, sin dar explicaciones: el banco le abona el importe y se lo reclama al banco del acreedor.
Elige cuándo lo devuelve Laura.
Lo que se puede compensar depende de cuándo
Antes del cargo, no hay nada que compensar: se cancela. Seis semanas después, la compensación tiene dos pasos y uno de ellos depende de otro banco. Diez semanas después, ya no se puede. La misma acción de Laura tiene tres respuestas distintas según en qué punto de la saga llega.
Por eso una saga no es solo la lista de pasos: es también hasta cuándo se puede compensar cada uno, y eso lo decide el negocio, no la base de datos.
Para llevarse
- Cuando un cambio cruza varios agregados o contextos, no se deshace: se compensa paso a paso, hacia atrás, con hechos nuevos que quedan a la vista.
- El pivote marca hasta dónde se puede volver. Antes, se compensa; después, se reintenta hacia delante.
- Las compensaciones también fallan: tienen que poder reintentarse sin efecto doble. Y pueden llegar semanas después.
Para que una saga funcione, cada paso tiene que enterarse de que el anterior ha terminado. Normalmente con un evento. ¿Y si el contexto guarda su cambio y se cae justo antes de avisar?
Siguiente Episodio 3 · Guardado, pero no avisado Cuentas se reinicia entre guardar el movimiento y publicarlo. El patrón outbox.