lección 4
Día 3 -- Exportar datos ISO para BMW + trazabilidad
BMW exige datos de calidad dimensional en formato ISO 8601 con trazabilidad end-to-end. Diseñas el pipeline de exportación, validación de schema y certificación de lotes.
⏱ 45 min
### Miércoles, 8:00 AM -- El email de BMW
Datos de apoyo para hoy: trabaja con `datos/mediciones_calidad.csv` (columnas `measurement_id, run_id, part_serial, characteristic_id, characteristic_name, nominal_value, usl, lsl, measured_value, result, cmm_device_id, measurement_timestamp`) -- contiene 7 combinaciones con `Cpk < 1.33` que harán fallar la certificación del lote. Enlaza con `datos/produccion.csv` (vía `run_id`) para la trazabilidad de cada pieza.
Llegas a la oficina y Fernando ya está de pie junto a tu escritorio con el portátil en la mano. "Lee esto", dice mostrándote un email. Es del departamento de Calidad de Proveedor de BMW Munich:
1De: Klaus Weber <k.weber@bmw-supplier-quality.de>2Para: Fernando Aguirre <f.aguirre@smartfactory.es>3Asunto: URGENTE - Compliance VDA 6.3 - Datos de calidad Q1 202445Fernando,67Segun nuestro acuerdo de suministro (ref: BMW-SF-2023-0847),8SmartFactory debe proporcionar datos de inspección dimensional de9cada lote en formato ISO/TS 16949 con:10111. Timestamp ISO 8601 con zona horaria UTC122. Identificador único de pieza (trazabilidad desde materia prima)133. Mediciones dimensionales con tolerancia nominal +/- real144. Resultado PASS/FAIL por cada dimension crítica155. Referencia al sensor de inspección (calibración vigente)166. Firma digital del lote (hash SHA-256 del dataset)1718Fecha límite: recibir el primer export automatizado para el lote19de la semana 12 (18-22 marzo). Formato: Parquet particionado por20fecha de producción, schema adjunto.2122Si no cumplimos la fecha, el siguiente audit VDA nos bajara de23rating A a B, lo que implica inspección 100% en recepcion BMW24(+15 días de lead time, coste para vosotros).2526Saludos,27Klaus Weber28Supplier Quality Assurance - BMW AG
BMW no pide -- exige. El rating de proveedor está en juego.
Fernando cierra el portátil. "Klaus es riguroso pero justo. El problema es que nuestros datos de calidad están en TimescaleDB con un formato interno que no cumple nada de lo que pide. Necesito un pipeline que: 1) lea las inspecciones de calidad del lake, 2) las transforme al formato BMW, 3) valide que cumplen el schema, 4) firme digitalmente el lote, y 5) lo deposite en el SFTP de BMW automáticamente. Para el viernes."
### El formato interno vs el formato BMW
Kenji te muestra los datos actuales. "Los sensores de calidad dimensional (320 sensores Keyence IM-8000) miden cada pieza al salir de la maquina. Cada medicion es un punto 3D con la desviacion respecto al CAD nominal. Pero el formato en que lo guardamos no es ni remotamente lo que BMW quiere."
1// Formato INTERNO actual (como lo guardamos en Iceberg)2{3 "sensor_id": "SENS-QUAL-L03-M047-01",4 "machine_id": "MACH-L03-047",5 "piece_id": "PCE-20240315-L03-004782",6 "timestamp": 1710489821847, // Unix ms -- BMW quiere ISO 86017 "dimensions": [8 {"name": "diametro_ext", "nominal_mm": 42.000, "measured_mm": 42.003, "tolerance_mm": 0.010},9 {"name": "profundidad", "nominal_mm": 18.500, "measured_mm": 18.498, "tolerance_mm": 0.015},10 {"name": "rugosidad_ra", "nominal_um": 0.800, "measured_um": 0.750, "tolerance_um": 0.200}11 ],12 "result": "PASS",13 "batch_id": "BATCH-2024-W12-L03-001"14}
Formato interno -- funcional pero no cumple requisitos BMW
1// Formato BMW requerido (ISO/TS 16949 compatible)2{3 "supplier_id": "SF-VIT-001",4 "part_number": "BMW-7020-CE-P4A",5 "inspection_timestamp": "2024-03-15T08:23:41.847Z", // ISO 8601 UTC6 "piece_traceability": {7 "piece_uid": "SF-PCE-20240315-L03-004782",8 "raw_material_lot": "RM-2024-0312-STEEL-42CrMo4",9 "production_line": "LINE-03",10 "machine_id": "MACH-L03-047",11 "operator_shift": "A"12 },13 "measurements": [14 {15 "characteristic_id": "DIM-001",16 "characteristic_name": "External Diameter",17 "nominal_value": 42.000,18 "measured_value": 42.003,19 "upper_tolerance": 42.010,20 "lower_tolerance": 41.990,21 "unit": "mm",22 "result": "PASS",23 "measurement_uncertainty": 0.00124 }25 ],26 "inspection_equipment": {27 "sensor_id": "SENS-QUAL-L03-M047-01",28 "calibration_date": "2024-01-15",29 "calibration_valid_until": "2025-01-15",30 "calibration_certificate": "CAL-2024-0115-KEYENCE-001"31 },32 "lot_summary": {33 "batch_id": "BATCH-2024-W12-L03-001",34 "total_pieces": 6400,35 "passed_pieces": 6387,36 "failed_pieces": 13,37 "yield_pct": 99.797,38 "cpk_min": 1.6739 }40}
Formato BMW -- trazabilidad completa, ISO 8601, con certificacion de calibración
### El gap entre formato interno y formato BMW
Analizas las diferencias. No es solo un cambio de nombres de campos -- hay información que BMW requiere y que no está en tus datos de sensores: el lote de materia prima, el certificado de calibración, el turno del operario, la incertidumbre de medicion y el Cpk del lote. Necesitas cruzar con otras fuentes.
- Datos de sensores (Iceberg gold.quality_inspections): las mediciones dimensionales
- ERP (SAP via API): lote de materia prima, part_number BMW, turno del operario
- Sistema de calibración (base PostgreSQL legacy): fechas de calibración, certificados
- Calculos en pipeline: yield del lote, Cpk (process capability index), firma SHA-256
El Cpk es especialmente crítico. BMW exige Cpk >= 1.33 para aceptar un lote. Si el Cpk calculado es menor, el lote se rechaza automáticamente y SmartFactory debe inspeccionar pieza por pieza (coste: 2 EUR/pieza x 6400 piezas = 12.800 EUR). Patricia: "Históricamente nuestro Cpk está entre 1.5 y 2.0. Pero si un sensor de calidad está descalibrado y no nos damos cuenta, las mediciones se dispersan y el Cpk baja. Por eso la calibración importa tanto."
Contexto industrial: Cpk (Process Capability Index) mide cuanto margen tiene tu proceso respecto a las tolerancias. Cpk = 1.0 significa que tu dispersion ocupa TODA la tolerancia (peligroso). Cpk = 1.33 significa que solo usas el 75% de la tolerancia (mínimo BMW). Cpk = 2.0 es excelente -- solo usas el 50%.
### Diseño del pipeline de exportación
El pipeline que diseñas tiene 5 fases:
- 01.EXTRACT: Leer inspecciones del lote de Iceberg (gold.quality_inspections) + datos de ERP (API SAP) + calibraciones (PostgreSQL)
- 02.TRANSFORM: Convertir timestamps a ISO 8601 UTC, enriquecer con trazabilidad, calcular Cpk por dimension, mapear nombres a formato BMW
- 03.VALIDATE: Verificar que CADA registro cumple el schema BMW. Si un registro falla, se marca pero no se excluye del lote (BMW quiere ver los fallos también)
- 04.SIGN: Calcular hash SHA-256 del dataset completo como firma digital del lote. Si BMW recalcula el hash y no coincide, el lote se rechaza.
- 05.DELIVER: Escribir Parquet particionado por fecha a S3 y depositar en SFTP de BMW con nombre estandarizado
Riesgo crítico: si el pipeline falla silenciosamente y no entrega el lote el viernes, BMW no avisará -- simplemente bajará el rating de A a B en el siguiente audit. Eso implica inspección 100% en recepción: +15 días de lead time en cada envío durante 6 meses hasta el próximo audit. Coste estimado: 200K EUR en inventario extra. La alerta de fallo de entrega debe ser CRITICA y despertar a alguien.
## ejercicios
Transformacion de datos internos a formato BMW ISO
Implementa la transformacion completa de formato interno de SmartFactory a formato BMW ISO/TS 16949. Incluye conversión de timestamps, enriquecimiento con trazabilidad, cálculo de Cpk y firma SHA-256 del lote.
Calculo de Cpk por lote completo y alerta de calidad
Implementa el cálculo de Cpk para un lote completo de 6400 piezas. Si alguna dimension tiene Cpk < 1.33, el lote se marca como NO CONFORME y se genera una alerta para Patricia. Incluye histograma de distribución y comparacion con tolerancias.
Pipeline de entrega automatizada a BMW via SFTP
Implementa el último pasó del pipeline: escribir los datos en formato Parquet particionado, generar el manifiesto del lote con firma SHA-256, y simular la entrega via SFTP con reintentos y notificación de éxito/fallo.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...