Saltar al contenido

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 2024
4
5Fernando,
6
7Segun nuestro acuerdo de suministro (ref: BMW-SF-2023-0847),
8SmartFactory debe proporcionar datos de inspección dimensional de
9cada lote en el formato que acordamos, con la trazabilidad y los
10indices de capacidad que exige nuestro sistema de calidad (IATF 16949):
11
121. Timestamp ISO 8601 con zona horaria UTC
132. Identificador único de pieza (trazabilidad desde materia prima)
143. Mediciones dimensionales con tolerancia nominal +/- real
154. Resultado PASS/FAIL por cada dimension crítica
165. Referencia al sensor de inspección (calibración vigente)
176. Firma digital del lote (hash SHA-256 del dataset)
18
19Fecha límite: recibir el primer export automatizado para el lote
20de la semana 12 (18-22 marzo). Formato: Parquet particionado por
21fecha de producción, schema adjunto.
22
23El mes que viene tenemos auditoria VDA 6.3 y estos registros son
24parte de lo que se revisa. Si no cumplimos la fecha, el resultado
25nos bajara de rating A a B, lo que implica inspección 100% en
26recepcion BMW (+15 días de lead time, coste para vosotros).
27
28Saludos,
29Klaus Weber
30Supplier 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 8601
7 "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 UTC
6 "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.001
24 }
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.67
39 }
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:

  1. 01.EXTRACT: Leer inspecciones del lote de Iceberg (gold.quality_inspections) + datos de ERP (API SAP) + calibraciones (PostgreSQL)
  2. 02.TRANSFORM: Convertir timestamps a ISO 8601 UTC, enriquecer con trazabilidad, calcular Cpk por dimension, mapear nombres a formato BMW
  3. 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)
  4. 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.
  5. 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.

Regístrate para guardar tu progreso.