Ir al contenido

Pipeline de Normalizaciones

Este pipeline cubre las tareas de normalización necesarias para el cruzamiento confiable de fuentes de datos en IngelCoding. Actualmente agrupa dos sub-procesos complementarios:

  • Normalizaciones-Brigadas: fuzzy matching de nombres de brigadas entre SAP, HES y registros internos, para permitir cruces confiables entre fuentes heterogéneas.
  • Normalizaciones-Proyectos: creación de la dimensión dim_ot (órdenes de trabajo / proyectos), normalizando identificadores y metadatos para que sean clave única de cruce en Power BI y Google Sheets.
Sub-procesoDescripción
Normalizaciones-BrigadasEstandariza nombres de brigadas mediante cruce exacto + fuzzy matching; produce gantt_normalizado_powerbi.csv
Normalizaciones-ProyectosConstruye dim_ot como dimensión central de OTs/proyectos; clave de cruce en el modelo Star Schema de Power BI

Lectura de las fuentes de entrada:

  • gantt_consolidada_powerbi.csv — consolidado multi-zonal (Osorno, Castro, Chiloé) generado por el dominio Gantt.
  • Tablas de control de OTs (dim_control_ots_osorno, dim_control_ots_castro, dim_control_ots_ancud) y fact_facturacion — insumos para dim_ot. Ver DB-Diccionario-Tablas.

Cruce de nombres de brigadas en dos etapas:

  1. Cruce exacto contra base_personas.py (catálogo canónico de personal).
  2. Fuzzy matching por similitud (rapidfuzz) para los casos sin cruce exacto.
  3. normalize_nombre() → transforma 'CARLOS ALMONACID' a 'C. Almonacid'.
  4. Extracción del código de proceso embebido en el nombre: EERR / NNSS / OOMM / OOCC.

Módulos: scripts/updates/normalize_brigadas.py, static_data/base_personas.py, static_data/base_nombres_apellidos.py.

Construcción de dim_ot como dimensión central de OTs. Ver Dim_OT-Modelo-Explicacion.

  1. Recolección de OTs crudas desde las 5 fuentes: control OTs Osorno/Castro/Ancud, Gantt, Facturación.
  2. Clasificación por patrón (OT: \d{3}/[A-Z]{2}-\d{3}, OA: \d{8}, MAN, LITERAL).
  3. Desnormalización: OTs concatenadas con ; se expanden en filas individuales para cruce granular.
  4. Normalización de campos: ot_limpia, tipo, zonal, fuente, proyecto_original.
  5. Deduplicación y escritura de dim_ot en SQLite / PostgreSQL.

:::note Confirmar con el usuario Los pasos 3.1–3.5 están basados en Dim_OT-Modelo-Explicacion y DB-Diccionario-Tablas. Confirmar si existe un script dedicado para la construcción de dim_ot o si el proceso es parte de otro dominio (ej. Gantt o un ETL transversal). :::

Verificación de integridad referencial entre las dos normalizaciones:

  • OTs en gantt_normalizado_powerbi.csv cruzadas contra dim_ot.ot_limpia — se reportan OTs sin cobertura (~21% esperado según Pipeline-Productividad).
  • Brigadas en Gantt cruzadas contra dim_personal_brigadas para detectar nombres aún no normalizados.
  • gantt_normalizado_powerbi.csv → directorio SALIDAS/ (consumo Power BI calendario).
  • dim_ot actualizada en SQLite y PostgreSQL → consumida por Pipeline-PowerBI vía fallback triple.
  • OTs sin cruce (~21%): son OTs nuevas no registradas en dim_ot más la fila literal "SIN OT". Es comportamiento esperado; no indica error de parseo.
  • Fuzzy matching con umbrales bajos: un umbral muy permisivo puede cruzar nombres incorrectamente. El catálogo base_personas.py es la fuente autoritativa — preferir cruce exacto siempre.
  • Fuentes de OTs heterogéneas: cada fuente concatena OTs de forma distinta (;, espacio, guión). La lógica de split debe ser robusta ante variaciones.

Tags: #normalizaciones #pipeline #dim_ot #fuzzy-matching #brigadas