Saltar al contenido principal

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:

  1. Manejo de Texto Plano: Capacidades nativas para procesar archivos de ancho fijo (Fixed Width) con encodings complejos (EBCDIC/CP850).
  2. Precisión Numérica: Manejo nativo de tipos Decimal para evitar errores de coma flotante en datos financieros.
  3. 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 .txt o .csv.
    • Escritura (Red): Conexión segura a la BD PostgreSQL de Yuruary (Local o Cloud).

⚙️ 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.

  1. El script intenta convertir cada fila.
  2. Si una fila es válida: Pasa al siguiente paso (Load).
  3. 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.
  4. 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:

  1. Scripts .py: Módulos de migración por entidad (ej. migrate_owners.py, migrate_debt.py).
  2. Dockerfile: Definición del entorno con Python, Drivers OBDC/Postgres y PETL preinstalados.
  3. 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.

� Diagrama del Flujo