Accentio Payments
Resumen
Accentio Payments es el motor de cobros y licencias de Accentio Studios. Reúne en un ledger los pagos, las suscripciones, las licencias y las invoices, sobre Stripe, Mercado Pago, PayPal, NuPay y transferencia, y responde a cada app quién tiene licencia, por consulta o por webhook. Corre como un proceso de NestJS 11 sobre Fastify y MongoDB, con un panel de staff en React construido sobre Excelsior. Está en construcción: las fundaciones, las apps, el catálogo, los titulares y las licencias están hechos, y los despliegues de staging y producción están escritos y esperan su primera ejecución.
Puntos clave
Puerto con cuatro drivers4 drivers de proveedor sobre 1 puerto, verificados contra simuladores
Diseñé un puerto de proveedor detrás del cual los drivers de Stripe, Mercado Pago, PayPal y NuPay traducen los eventos de cada proveedor a comandos del dominio. Cada proveedor corre simulado, en sandbox, en live o apagado, y el arranque falla si un proveedor no tiene driver.
Inbox, outbox y reintentos
Construí el flujo de eventos: los webhooks entrantes de los proveedores entran a un inbox después de verificar su firma, y los webhooks hacia las apps salen de un outbox, firmados y con reintentos programados.
Escrituras idempotentes y candados
Hice que las escrituras admitan reintentos con un interceptor de Idempotency-Key, y corrí los jobs de fondo (vencimientos, liquidaciones, reintentos de webhooks) bajo candado para que dos instancias no corran el mismo job.
Motor de fees e invoices
Construí un motor de fees que calcula cada cobro para que el total cubra las tarifas del proveedor y el impuesto, e invoices con su propio link de pago y un PDF impreso desde el mismo HTML que la vista previa del editor.
Pruebas, docs y SDKCerca de 10.700 casos de prueba en 694 archivos de spec; 152 rutas HTTP en 41 controllers
Cubrí el motor con pruebas unitarias, de integración, de contrato y visuales, lo documenté en 240 documentos con Diátaxis y una referencia generada desde el código, y escribí un SDK de NestJS para las apps.