lección 4
Día 3 -- Exportar datos de calidad 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 - Preparacion auditoria 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 el formato que acordamos, con la trazabilidad y los10indices de capacidad que exige nuestro sistema de calidad (IATF 16949):11121. Timestamp ISO 8601 con zona horaria UTC132. Identificador único de pieza (trazabilidad desde materia prima)143. Mediciones dimensionales con tolerancia nominal +/- real154. Resultado PASS/FAIL por cada dimension crítica165. Referencia al sensor de inspección (calibración vigente)176. Firma digital del lote (hash SHA-256 del dataset)1819Fecha límite: recibir el primer export automatizado para el lote20de la semana 12 (18-22 marzo). Formato: Parquet particionado por21fecha de producción, schema adjunto.2223El mes que viene tenemos auditoria VDA 6.3 y estos registros son24parte de lo que se revisa. Si no cumplimos la fecha, el resultado25nos bajara de rating A a B, lo que implica inspección 100% en26recepcion BMW (+15 días de lead time, coste para vosotros).2728Saludos,29Klaus Weber30Supplier 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."
BMW no pide: exige. Y lo que está en juego no es una multa, es la clasificación de proveedor, que sale en buena parte de una auditoría de proceso -- la VDA 6.3 -- que el cliente te hace cada año o cada dos, y que va ajustando con lo que ve entregado: incidencias, piezas malas por millón, retrasos. Con la clasificación alta tus envíos entran en la planta de BMW con muy poca comprobación. Si baja, te inspeccionan la recepción y te abren un plan de acciones correctoras, y ahí es donde aparecen los quince días de más por envío y los 200.000 euros de inventario parado. Fíjate en la asimetría, porque es la razón de que Fernando esté de pie junto a tu mesa: el fallo dura un viernes y salir del agujero lleva meses de entregas impecables, porque no basta con arreglar la causa, hay que demostrar que se quedó arreglada. No se soluciona mandando el fichero el lunes.
## 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": 1710491021847, // 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 (acordado en contrato, trazabilidad IATF 16949)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
- Estudios de capacidad del sistema de medición (R&R / VDA 5): la incertidumbre de medición de cada equipo y característica. Es un dato que produce Calidad, no el pipeline, y que hay que pedirle a Patricia: el certificado de calibración solo cubre una parte de esa incertidumbre
- 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%. Eso vale tal cual si el proceso está centrado; si está desviado, el Cpk baja aunque la dispersión sea la misma.
Y hay un segundo índice que vas a calcular al lado, el Cp, que se parece pero contesta a otra pregunta. El Cp mira solo si tu dispersión cabe en la tolerancia. El Cpk mira además si estás centrado. Si los dos salen parecidos, el proceso está donde tiene que estar y lo único que importa es cuánto oscila. Si el Cp sale bien y el Cpk sale mal, la máquina es precisa pero está haciendo las piezas sistemáticamente grandes o pequeñas. Esa distinción no es estadística, es la diferencia entre dos reparaciones. Un Cp bajo se arregla mirando el desgaste de la herramienta o el juego del husillo. Un Cpk bajo con Cp bueno se arregla ajustando el cero, y a veces es cosa de media hora. Cuando le lleves el informe a Patricia, dile los dos números: con uno solo no puede decidir qué hacer.
## 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
Antes de darle a enviar, un paso que no es técnico: decidir qué haces si el lote no certifica. Porque va a pasar. El Cpk se calcula en la fase de transformación, o sea que el viernes por la mañana vas a saber, antes que nadie, si el lote de la semana 12 pasa o no pasa. Lo que no se hace es dejar que lo descubra Klaus. Un export que llega en fecha con un Cpk de 1,18 declarado honestamente es un problema de calidad, y eso se gestiona con un plan de acciones. Un export que no llega, o que llega maquillado, es un problema de confianza, y de ese se sale mucho más despacio. Así que el pipeline manda el export con su Cpk real -- lo que se haga con las piezas es decisión de Calidad, no del pipeline -- y dispara un aviso a Patricia y a Fernando en cuanto lo calcula, con las características que fallan y cuánto les falta. Que ellos decidan si llaman a Klaus antes de que lo lea. Esta es la parte del trabajo que no es de datos y que igualmente te toca a ti: eres el primero que ve el número.
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.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...
Regístrate para guardar tu progreso.