Red de remesas · Colombia → Venezuela

Del Web Forms heredado a una plataforma de remesas propia

Reemplazamos el sistema ASP.NET de una red que envía pesos de Colombia y paga bolívares en Venezuela. La plataforma nueva tiene 8 roles, MFA obligatorio y cada movimiento de dinero dentro de funciones de Postgres.

Un envío Pago Móvil de punta a punta: el local llena el formulario y confirma, revisa la lista del día y el girador abre el ID en su cola. Datos inventados.
En resumen

Reemplazamos el sistema ASP.NET Web Forms de una red de envíos de dinero de Colombia a Venezuela. La plataforma nueva cubre los 8 roles de la operación, desde el local que recibe el efectivo hasta el girador que paga en bolívares, con MFA obligatorio para todos y cada movimiento de dinero dentro de funciones de la base de datos. El primer commit es del 14 de septiembre de 2026; a finales de octubre la plataforma ya trabajaba con los usuarios reales de la red.

Cliente
Red de remesas · Colombia → Venezuela
Sector
Remesas y casas de cambio
Dónde
Colombia → Venezuela
Año
2026
Entregables
  • Plataforma web con 8 roles
  • MFA TOTP y acceso por invitación
  • Dinero en funciones de Postgres
  • Migración desde SQL Server
  • Reportes con exportación XLSX y CSV
8roles, todos con MFA obligatorio
132pruebas automatizadas, todas en verde
6 semanasdel primer commit a usuarios reales
El contexto

Un sistema Web Forms que movía dinero real

La red trabaja con dos casas de cambio y una red de locales en Colombia que reciben pesos en efectivo. El local crea el envío a una cuenta bancaria o a Pago Móvil, y vende recargas y planes de TV contra un saldo prepagado en pesos. En Venezuela, los giradores pagan desde las cuentas en bolívares de la casa y adjuntan el comprobante del banco.

Todo eso corría en una aplicación ASP.NET Web Forms sobre SQL Server. En septiembre de 2026 recibimos la app y un respaldo de su base de datos. Escribimos el núcleo nuevo desde cero y usamos el sistema anterior como referencia de reglas y como fuente de datos.

Diseño y construcción

El dinero solo se mueve dentro de la base de datos

Cada operación con dinero es una función SECURITY DEFINER en Postgres (Supabase, región sa-east-1), y el navegador nunca escribe un saldo. Detrás hay un libro de partida doble, un esquema de auditoría que solo acepta inserciones, llaves de idempotencia para que un doble clic no cree dos envíos y códigos de paso adicional atados al hash de cada solicitud. El esquema vive en 73 migraciones y la app llama cerca de 100 funciones distintas.

La interfaz es Next.js 16.4 con React 19.2 y TypeScript, en Vercel, con 66 páginas y 22 rutas de API. Se entra solo por invitación, con MFA por app autenticadora (TOTP), 30 minutos de inactividad, 8 horas de sesión como máximo y una sesión por usuario. Los comprobantes de pago caen en un bucket privado en cuarentena, pasan por un escáner aislado y se rechazan si su SHA-256 ya existe. Los datos del sistema anterior pasaron de SQL Server a Postgres con un ETL escrito para el proyecto.

  1. 01

    El local crea el envío

    Busca remitente y destinatario por cédula, elige banco o Pago Móvil y ve en vivo cuánto sale de su saldo y cuántos bolívares recibe el destinatario. Pago Móvil aplica la tasa × 1,01. Confirma con un código de 6 dígitos y obtiene un recibo con ID operativo.

  2. 02

    El girador paga en Venezuela

    La cola se actualiza cada 10 segundos y separa el trabajo por casa. Al abrir un ID, queda reservado para ese girador; elige la cuenta de origen, sube el comprobante y ve la comisión interbancaria del 0,3 % antes de consignar.

  3. 03

    8 roles, 38 acciones

    Local, consignaciones, administrador, distribuidor, distribuidor sénior, compras, supervendedor y vendedor. Las 38 acciones con permiso salen del rol, y el administrador puede permitir o bloquear una acción a una persona sin cambiarle el rol.

  4. 04

    132 pruebas automatizadas

    Vitest corre 132 pruebas unitarias y de componentes, todas en verde. Otros 11 archivos de Playwright con axe-core recorren los flujos completos y revisan accesibilidad, y GitHub Actions ejecuta la CI.

Resultados

Seis semanas entre el primer commit y la operación

Entre el 14 de septiembre y el 29 de octubre de 2026 hubo 71 commits, con revisiones del cliente el 6, el 8 y el 13 de octubre. A finales de octubre la plataforma funcionaba con los usuarios reales de la red, en una URL con acceso solo por invitación.

Aún no tenemos cifras de volumen ni de tiempos de pago que podamos publicar. El cliente es confidencial: las capturas usan datos inventados y dos casas ficticias, Andina y Orinoco.

  • Sistema ASP.NET Web Forms reemplazado por una plataforma propia
  • 8 roles y 38 acciones con permiso, MFA obligatorio para todos
  • 73 migraciones y cerca de 100 funciones de base de datos
  • 132 pruebas automatizadas, todas en verde
Preguntas frecuentes

Las preguntas que escuchamos a menudo

¿Por qué mover el dinero en funciones de la base de datos?

Porque una sola función de Postgres valida el saldo, escribe el asiento de partida doble y deja la auditoría en la misma transacción. Si algo falla, no queda nada a medias, y ningún navegador puede escribir un saldo.

¿Se pueden migrar los datos del software anterior de la casa de cambio?

Sí. El ETL del proyecto lee el respaldo .bak de SQL Server y lo carga en Postgres. Los saldos heredados quedan como punto de partida y cada movimiento posterior lo registran las funciones nuevas.

¿El MFA es obligatorio para todos los usuarios?

Sí, en los 8 roles. El usuario entra por invitación, define su contraseña, activa una app autenticadora con QR o clave manual, y desde ahí cada acceso pide el código de 6 dígitos. Ese código nunca llega por WhatsApp.

Hablar con Slash

Pongámoslo en producción

Cuéntanos tu reto. Respondemos en menos de 24 horas laborales con una primera lectura honesta: si podemos ayudarte, te diremos cómo; si no, te diremos quién puede.

Contesto personalmente. Sin formularios eternos ni respuestas automáticas.

Escribirle a Esteban