Pagos de compensación laboral. Byte4Bit. Arquitectura, construcción y despliegue del procesador ACH.
Audit1ACH
Diseñé, construí y desplegué el procesador de pagos ACH que cobra primas de compensación laboral generando y conciliando ficheros NACHA.
El problema
Cobrar primas de seguro por ACH significa producir ficheros NACHA que un banco acepte, y después convivir con todo lo que vuelve días más tarde: devoluciones, rechazos, cambios de estado y la conciliación que nadie ve hasta que está mal. Un fichero malformado no es un error de validación: es dinero que no se movió.
Fui responsable de la arquitectura, la implementación y el despliegue del procesador. La capa de dominio no sabe nada de HTTP, de Mongo ni del bus de mensajes: la generación NACHA, el manejo de devoluciones y la conciliación son lógica pura detrás de puertos, con adaptadores para todo lo que cambia.
El formato del fichero es lógica de dominio, no pegamento
La generación y el parseo NACHA viven en el dominio, testeables sin base de datos ni banco. Los adaptadores que mueven los ficheros se pueden cambiar sin tocar las reglas que los hacen válidos.
Las devoluciones son parte del diseño, no un añadido
Devoluciones, estado de transacción y cutover tienen cada uno su propio servicio, porque lo interesante de ACH no es el envío, son los días que vienen después.
Desplegado como código
El procesador viene con su propio Terraform y su build de contenedor, así que un entorno es un artefacto revisable y no un runbook que alguien recuerda.
Decisiones y el precio que pagué por ellas
Arquitectura hexagonal con el dominio en el centro
El núcleo procesa pagos, así que la estructura debería decirlo. Las dependencias apuntan hacia dentro, y la infraestructura depende de la lógica de negocio y no al revés.
Trade-off aceptado
Más indirección que una capa de servicios directa, y un equipo tiene que entender puertos y adaptadores antes de moverse rápido en el código.
Validar antes de que nada llegue al banco
Un fichero NACHA rechazado cuesta un ciclo de liquidación, así que la validación de esquema va delante de cada escritura y de cada fichero generado, no solo en el borde.
Trade-off aceptado
Más rechazo estricto en la frontera, y más trabajo para dejar pasar un caso legítimo pero inusual.
Asíncrono por mensajería, no por sondeo
Ingesta, procesamiento, devoluciones y conciliación son preocupaciones distintas que fallan por separado, así que hablan por un bus de mensajes con reintentos en lugar de una cadena síncrona larga.
Trade-off aceptado
Consistencia eventual que el producto tiene que expresar, e idempotencia que cada consumidor tiene que ganarse.