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 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 formato ISO/TS 16949 con:
10
111. Timestamp ISO 8601 con zona horaria UTC
122. Identificador único de pieza (trazabilidad desde materia prima)
133. Mediciones dimensionales con tolerancia nominal +/- real
144. Resultado PASS/FAIL por cada dimension crítica
155. Referencia al sensor de inspección (calibración vigente)
166. Firma digital del lote (hash SHA-256 del dataset)
17
18Fecha límite: recibir el primer export automatizado para el lote
19de la semana 12 (18-22 marzo). Formato: Parquet particionado por
20fecha de producción, schema adjunto.
21
22Si no cumplimos la fecha, el siguiente audit VDA nos bajara de
23rating A a B, lo que implica inspección 100% en recepcion BMW
24(+15 días de lead time, coste para vosotros).
25
26Saludos,
27Klaus Weber
28Supplier 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 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 (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 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
  • 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:

  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

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

[01]

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.

Cargando editor...
[02]

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.

Cargando editor...
[03]

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.

Cargando editor...

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