Estrategia de Migración: Legacy AS/400 a Yuruary
Herramienta Principal: Python + PETL
Arquitectura: Contenedor Docker en Windows Server (On-Premise)
📋 Resumen Ejecutivo
La migración de datos críticos desde el sistema Legacy (AS/400) hacia la nueva arquitectura Yuruary (PostgreSQL) se ejecutará mediante scripts de Python de alto rendimiento utilizando la librería PETL (Python ETL).
¿Por qué Python + PETL?
Elegimos este stack por su superioridad técnica en tareas específicas de Data Engineering frente a Node.js:
- Manejo de Texto Plano: Capacidades nativas para procesar archivos de ancho fijo (Fixed Width) con encodings complejos (EBCDIC/CP850).
- Precisión Numérica: Manejo nativo de tipos
Decimalpara evitar errores de coma flotante en datos financieros. - Facilidad de Transformación: Sintaxis declarativa para limpieza y conversión de fechas.
🏗️ Infraestructura
El agente de migración no corre en la nube, corre localmente, cerca de los datos.
- Componente:
yuruary-migration-worker(Docker Container). - Alojamiento: Servidor Windows existente en las oficinas del cliente o pasarela intermedia.
- Accesos:
- Lectura (Mount Bind): Acceso directo a la carpeta compartida donde el AS/400 deposita los archivos
.txto.csv. - Escritura (Red): Conexión segura a la BD PostgreSQL de Yuruary (Local o Cloud).
- Lectura (Mount Bind): Acceso directo a la carpeta compartida donde el AS/400 deposita los archivos
⚙️ Arquitectura del Pipeline (ETL)
El proceso sigue un flujo estricto de Extracción, Transformación y Carga, diseñado para ser resiliente a errores.
1. Extract (Extraer)
Leemos los datos crudos sin modificar su contenido original.
- Archivos de Ancho Fijo (Fixed Width):
Utilizamos
petl.fromtext()definiendo el layout exacto de los reportes de spool del AS/400. - Archivos Delimitados (CSV):
Utilizamos
petl.fromcsv()para exportaciones más limpias.
2. Transform (Transformar)
Aplicamos "Diccionarios de Transformación" para limpiar, tipar y estandarizar los datos.
Ejemplos de Lógica:
- Fechas:
convert(table, 'fecha_nacimiento', lambda v: datetime.strptime(v, '%d%m%y')) - Moneda:
convert(table, 'saldo', decimal.Decimal) - Strip: Limpieza automática de espacios en blanco
strip().
3. Load (Cargar)
Inserción masiva optimizada en PostgreSQL.
- Función:
petl.todb()Escribe los datos transformados directamente en las tablas destino de Yuruary, manejando transacciones para garantizar atomicidad.
🛡️ Manejo de "Datos Sucios" (Smart Error Handling)
Implementamos la lógica de "Capture & Continue". La migración no debe detenerse por un error en una sola fila.
- El script intenta convertir cada fila.
- Si una fila es válida: Pasa al siguiente paso (Load).
- Si una fila falla (ej. fecha "99/99/99"):
- NO rompe el proceso.
- La fila original + el mensaje de error se capturan.
- Se escribe en un archivo de reporte automático:
rechazos_inmuebles.xlsx.
- Resultado: Al finalizar, el cliente recibe un Excel con las filas exactas que debe corregir manualmente en el AS/400 o aprobar para una carga manual.
� Entregable del Hito
El equipo de Softmena entregará un repositorio dedicado yuruary-migration conteniendo:
- Scripts
.py: Módulos de migración por entidad (ej.migrate_owners.py,migrate_debt.py). Dockerfile: Definición del entorno con Python, Drivers OBDC/Postgres y PETL preinstalados.config.yaml: Archivo de configuración para definir rutas de archivos de entrada y credenciales de base de datos de manera agnóstica al entorno.