DUSOFT · Control de versiones · Licitación DIGSA LP-173-2026

Modernización verificable,
tres versiones en paralelo.

El sistema de dispensación y logística de medicamentos migrado de PostgreSQL 8.2 (2007) a PostgreSQL 18 y de PHP 5.6 a PHP 8.4 — con la versión original corriendo como referencia, la actualizada en paridad funcional, y la mejorada cumpliendo los requisitos del pliego DIGSA.

PG 8.2 → PG 18 PHP 5.6 → PHP 8.4 Paridad verificada 73/73 módulos Anexo 1 DIGSA · 100% en ruta
Versión 1 · Referencia

Original

http://2.25.233.216:8101/

El código tal como está en el repositorio original (upstream), sin ningún arreglo, corriendo en el stack de su era (PHP 5.6). Es el punto de comparación honesto: con los datos reales de producción, hoy no logra pasar del login — los errores que se ven aquí son los que el código del repo produce tal cual.

Stack: PHP 5.6 · PG 18 (misma BD) · Estado: referencia
Abrir versión original
Versión 2 · Migrada

Actualizada

http://2.25.233.216:8103/

La migración completa: base de datos PostgreSQL 8.2 → 18 (200 GB reales, restore verificado), PHP 5.6 → 8.4, dependencias actualizadas, y paridad funcional total con la operación histórica: 73/73 módulos y los 75 puntos del menú sin un solo fatal en ninguno de los dos stacks.

Fases 1–4 cerradas · Paridad: 100%
Abrir versión actualizada
Versión 3 · Pliego DIGSA

Mejorada

http://2.25.233.216:8105/

La versión de la oferta: sobre la base migrada, incorpora las capacidades exigidas por el Anexo 1 del pliego — API REST v1 documentada (OpenAPI), CIV con QR antifraude, y la ruta de trabajo para FHIR/RDA, RIPS 3.2, IA y el resto del checklist contractual.

Fase 5 en curso · Ver checklist del pliego ↓
Abrir versión mejorada

Qué se hizo con cada versión

Cronología de la modernización. Cada fase está documentada en el repositorio (docs/modernizacion/) con dictamen del comité de expertos (DBA, dirección de proyecto, programación senior, infraestructura) y evidencia de verificación.

Fase 1 · Base de datos

PostgreSQL 8.2.11 → PostgreSQL 18

Restore completo de producción (200 GB, 909 tablas con datos, rc=0). Incompatibilidades catalogadas y resueltas: OIDs, encoding LATIN1→UTF8 (la app sigue viendo Latin-1 vía client_encoding, sin mojibake), y los casts implícitos que PG 8.3 eliminó (int=varchar en funciones plpgsql, lpad(numeric)) corregidos con casts retro-compatibles.

Fase 2 · Lenguaje

PHP 5.6 → PHP 8.4

Barrido mecánico con scripts propios basados en el tokenizer: 1.188 constructores PHP4 delegados, 2.380 offsets de llaves, 187 by-ref call-time, 903 claves bareword, 98 =& new, y los 3 bugs del framework que hoy rompen el repo original (incluido el fatal de modules.class.php:122). Lint limpio en 2.643 archivos.

Fase 3 · Dependencias

adodb 5.22 · nusoap · FPDF 1.8.6

adodb 4.91→5.22.12 (con legacy dual para el oráculo). nusoap rehabilitado en PHP 8 (shim php://input) con roundtrip SOAP verificado. FPDF 1.52→1.8.6 con render PDF probado en ambos stacks. jpgraph retirado (licencia QPL/comercial).

Fase 4 · Pruebas

Matriz automatizada oráculo vs objetivo

Simulación de los 73 módulos app y de los 75 items del árbol de menú con sesión autenticada en ambos contenedores: paridad total, cero diferencias, cero fatales. Diagnóstico de los módulos faltantes (deriva menú↔código de 2016) y rescate de 23 módulos desde la historia de git con compatibilización.

Fase 5 · Mejora (en curso)

Cumplimiento del pliego DIGSA

Sobre la versión mejorada: API REST v1 (Bearer, log de accesos, OpenAPI 3, solo consultas parametrizadas), CIV + QR antifraude (HMAC-SHA256, anti-reuso, bitácora inmutable), análisis DBA a fondo y saneo de vicios de código. El detalle y la validación de cada requisito, en el checklist ↓

Versión 3 · Mejorada

Checklist de cumplimiento — Anexo 1 del pliego

Cada requisito con su estado, dónde se puede validar y la explicación detallada. Estados: CUMPLE PARCIAL EN DESARROLLO PENDIENTE NO-SW (no es software: va en la oferta/operación).

NumeralRequisito (Anexo 1)EstadoDónde validarlo

Manuales descargables (PDF)

Un manual por versión, con pantallazos reales capturados del sistema en ejecución y ayudas visuales. Se regeneran con cada hito.

Manual · Versión Original

Qué contiene el repo original, cómo se comporta con los datos reales (incluido el fatal del login) y por qué sirve de referencia de comparación.

Descargar PDF

Manual · Versión Actualizada

La migración completa explicada para el usuario: acceso, menú, módulos verificados, qué cambió bajo el capó (BD y PHP) sin cambiar la operación.

Descargar PDF

Manual · Versión Mejorada

Guía de lo nuevo: API REST v1 con ejemplos de consumo, y el flujo CIV+QR (emisión, verificación pública, dispensación anti-reuso) con evidencias.

Descargar PDF