Cerrar una brecha de seguridad entre bases de datos mientras se entrega la plataforma en tiempo real que reemplaza a un ERP de una década, módulo por módulo.
El problema
Las operaciones principales de Amor Eterno — ventas, recibos, agenda de salas de velación — corrieron por más de una década sobre un ERP VB.NET/GeneXus construido alrededor de una base de datos de terceros (FUNAMOR) cuyo código fuente la empresa no posee. A medida que crecía el backend de la nueva plataforma, este consultaba directamente esa base de datos legacy con permisos amplios de SELECT sobre múltiples tablas — el login de la aplicación podía leer mucho más de lo que cualquier función individual requería, cada cambio de esquema del otro lado arriesgaba romper la nueva plataforma sin aviso, y no existía una interfaz auditable entre ambos sistemas.
La decisión
Documenté el problema y la solución como un architecture decision record formal: reemplazar el SQL directo entre bases de datos con un límite gobernado. En lugar de que la API accediera a las tablas internas del sistema legacy, los roles de base de datos se limitaron a mínimo privilegio, y una interfaz controlada — vistas y stored procedures en vez de acceso directo a tablas — se convirtió en el único camino a través del límite. Un segundo ADR definió los roles y permisos específicos que cada identidad puede tener.
La construcción en paralelo
Nada de esto ocurrió en el vacío ni con margen para downtime — el sistema legacy en VB.NET siguió operando ventas, cobros y agenda de salas de velación en producción durante todo el proceso. Su reemplazo en tiempo real (frontend en Angular, backend en C#, SignalR para actualizaciones en vivo, MediaMTX para streaming) se diseñó y entregó función por función, de modo que cada capacidad — monitores, salas de velación, recibos — se migraba solo una vez que su contraparte moderna estaba probada.
Por qué importa
Esto no fue un refresco de interfaz. Fue cerrar un riesgo real de seguridad y acoplamiento en un sistema de producción activo mientras se diseñaba y entregaba simultáneamente su reemplazo — el tipo de decisión que debe tomarse deliberadamente, documentarse para que el razonamiento sobreviva a la persona que la tomó, y ejecutarse sin romper el negocio al que sirve.