Skill v1.0.0
currentAutomated scan100/100name: automotive-supply-chain description: When the user wants to optimize automotive manufacturing supply chains, manage tier suppliers, implement JIT production, or handle automotive-specific logistics. Also use when the user mentions "automotive manufacturing," "OEM supply chain," "tier 1/2/3 suppliers," "sequenced parts delivery," "just-in-time automotive," "vehicle assembly," or "automotive aftermarket." For general manufacturing, see production-scheduling. For lean principles, see lean-manufacturing. metadata: version: "1.0.0"
Automotive Supply Chain
You are an expert in automotive supply chain management and manufacturing operations. Your goal is to help optimize complex multi-tier supply networks, implement just-in-time delivery, manage supplier relationships, and ensure efficient vehicle assembly operations.
Initial Assessment
Before optimizing automotive supply chains, understand:
- Manufacturing Context
- OEM, Tier 1, Tier 2, or Tier 3 supplier?
- Product types? (vehicles, engines, transmissions, components)
- Production volume? (high-volume, low-volume, custom)
- Manufacturing approach? (make-to-stock, make-to-order, configure-to-order)
- Number of platforms/models?
- Supply Chain Structure
- How many tier suppliers?
- Geographic footprint? (local, regional, global)
- Sole source vs. multi-source strategy?
- In-house vs. outsourced components?
- Vertical integration level?
- Current State
- Inventory turns?
- Supplier quality metrics (PPM defects)?
- On-time delivery performance?
- Line stoppage frequency?
- Supply chain costs as % of revenue?
- Business Drivers
- Cost reduction targets?
- New model launches?
- Electrification strategy (EV transition)?
- Reshoring or nearshoring plans?
- Sustainability goals?
Automotive Supply Chain Framework
Tier Structure
Multi-Tier Supplier Network:
OEM (Vehicle Manufacturer)↑Tier 1 (System Integrators)↑ ↑ ↑Tier 2 (Component Suppliers)↑ ↑ ↑ ↑Tier 3 (Raw Materials, Basic Parts)
Tier Definitions:
- OEM (Original Equipment Manufacturer): Ford, GM, Toyota, VW, Tesla
- Final vehicle assembly
- Design and engineering
- Brand ownership
- Dealer network management
- Tier 1 Suppliers: Bosch, Continental, Denso, Magna
- Major systems and modules (seats, cockpit, powertrain)
- Direct delivery to OEM assembly lines
- Often sequenced or just-in-time
- Design and engineering capability
- Tier 2 Suppliers: Component manufacturers
- Individual parts and subassemblies
- Supply to Tier 1
- More standardized products
- Limited design input
- Tier 3 Suppliers: Raw materials and commodities
- Steel, aluminum, plastics, electronics
- Supply to Tier 2 (sometimes Tier 1)
- Highly commoditized
Just-In-Time (JIT) and Sequencing
JIT Delivery Model
import pandas as pdimport numpy as npfrom datetime import datetime, timedeltaclass AutomotiveJITScheduler:"""Manage Just-In-Time delivery schedules for automotive assembly"""def __init__(self, assembly_schedule, takt_time_minutes):"""Initialize JIT schedulerParameters:- assembly_schedule: vehicle build schedule- takt_time_minutes: time per vehicle (e.g., 60 seconds = 1 vehicle/min)"""self.assembly_schedule = assembly_scheduleself.takt_time = takt_time_minutesdef calculate_part_requirements(self, bom_df):"""Calculate part requirements based on assembly scheduleParameters:- bom_df: Bill of Materials with parts per vehicleReturns:- time-phased part requirements"""requirements = []for idx, vehicle in self.assembly_schedule.iterrows():build_time = vehicle['scheduled_time']model = vehicle['model']vin = vehicle['vin']# Get BOM for this modelmodel_bom = bom_df[bom_df['model'] == model]for _, part in model_bom.iterrows():requirements.append({'vin': vin,'model': model,'part_number': part['part_number'],'quantity': part['quantity_per_vehicle'],'required_time': build_time,'supplier': part['supplier'],'delivery_lead_time_hours': part['delivery_lead_time_hours']})return pd.DataFrame(requirements)def generate_supplier_call_off(self, part_requirements, buffer_hours=2):"""Generate supplier call-off schedule (when to deliver each part)Parameters:- part_requirements: parts needed with timing- buffer_hours: safety buffer before assembly needReturns:- supplier delivery schedule"""call_offs = []# Group by supplier and partgrouped = part_requirements.groupby(['supplier', 'part_number'])for (supplier, part_number), group in grouped:# Sort by required timegroup = group.sort_values('required_time')# Determine delivery frequencylead_time = group['delivery_lead_time_hours'].iloc[0]# Calculate delivery windowsfor idx, row in group.iterrows():required_time = row['required_time']delivery_time = required_time - timedelta(hours=lead_time + buffer_hours)call_offs.append({'supplier': supplier,'part_number': part_number,'vin': row['vin'],'quantity': row['quantity'],'delivery_time': delivery_time,'required_time': required_time,'dock_door': self._assign_dock_door(supplier)})call_off_df = pd.DataFrame(call_offs)return call_off_df.sort_values('delivery_time')def _assign_dock_door(self, supplier):"""Assign dock door based on supplier"""# Simplified: hash supplier name to dock doorreturn (hash(supplier) % 20) + 1 # 20 dock doorsdef calculate_lineside_inventory(self, call_offs, consumption_rate):"""Calculate lineside inventory levelsParameters:- call_offs: delivery schedule- consumption_rate: parts consumed per hourReturns:- inventory profile over time"""# Simulate inventory over timeinventory_profile = []current_inventory = 0time_periods = pd.date_range(start=call_offs['delivery_time'].min(),end=call_offs['required_time'].max(),freq='H')for t in time_periods:# Add deliveries at this timedeliveries = call_offs[call_offs['delivery_time'] == t]['quantity'].sum()current_inventory += deliveries# Subtract consumptioncurrent_inventory -= consumption_rateinventory_profile.append({'time': t,'inventory': max(0, current_inventory),'deliveries': deliveries})return pd.DataFrame(inventory_profile)# Example usageassembly_schedule = pd.DataFrame({'vin': ['VIN001', 'VIN002', 'VIN003'],'model': ['Model_A', 'Model_B', 'Model_A'],'scheduled_time': pd.to_datetime(['2025-01-20 08:00','2025-01-20 09:00','2025-01-20 10:00'])})bom = pd.DataFrame({'model': ['Model_A', 'Model_A', 'Model_B'],'part_number': ['PART_001', 'PART_002', 'PART_001'],'quantity_per_vehicle': [4, 2, 4],'supplier': ['Supplier_A', 'Supplier_B', 'Supplier_A'],'delivery_lead_time_hours': [4, 2, 4]})scheduler = AutomotiveJITScheduler(assembly_schedule, takt_time_minutes=60)requirements = scheduler.calculate_part_requirements(bom)call_offs = scheduler.generate_supplier_call_off(requirements, buffer_hours=2)print("Supplier Call-Off Schedule:")print(call_offs[['supplier', 'part_number', 'delivery_time', 'quantity']])
Sequenced Parts Delivery
What is Sequencing?
- Parts delivered in exact build sequence
- Example: Seats delivered in order 1-2-3 matching VINs
- Eliminates sorting at assembly line
- Requires tight coordination with supplier
class SequencedPartsManager:"""Manage sequenced parts delivery (e.g., seats, cockpits)"""def __init__(self, build_sequence):self.build_sequence = build_sequencedef generate_sequenced_order(self, part_specs):"""Generate sequenced parts order matching build sequenceParameters:- part_specs: specifications for each vehicle (e.g., seat color/material)Returns:- sequenced order for supplier"""sequenced_order = []for idx, vehicle in self.build_sequence.iterrows():vin = vehicle['vin']model = vehicle['model']# Get part spec for this VINspec = part_specs[part_specs['vin'] == vin].iloc[0]sequenced_order.append({'sequence_number': idx + 1,'vin': vin,'model': model,'part_spec': spec['specification'],'color': spec['color'],'material': spec['material'],'delivery_time': vehicle['scheduled_time'] - timedelta(hours=2)})return pd.DataFrame(sequenced_order)def validate_sequence(self, delivered_sequence, expected_sequence):"""Validate delivered parts match expected sequenceReturns:- sequence accuracy and errors"""errors = []for i, (delivered, expected) in enumerate(zip(delivered_sequence, expected_sequence)):if delivered['vin'] != expected['vin']:errors.append({'position': i + 1,'expected_vin': expected['vin'],'delivered_vin': delivered['vin'],'error_type': 'sequence_mismatch'})if delivered['spec'] != expected['spec']:errors.append({'position': i + 1,'vin': delivered['vin'],'expected_spec': expected['spec'],'delivered_spec': delivered['spec'],'error_type': 'specification_mismatch'})accuracy = 1 - (len(errors) / len(expected_sequence))return {'accuracy_pct': accuracy * 100,'errors': errors,'error_count': len(errors)}
Supplier Quality Management
PPM (Parts Per Million) Defect Tracking
class AutomotiveQualityManager:"""Track supplier quality performance (PPM defects)"""def __init__(self, target_ppm=50):"""Initialize quality managerParameters:- target_ppm: target defect rate (parts per million)"""self.target_ppm = target_ppmself.quality_data = []def record_receipt(self, receipt_data):"""Record parts receipt and inspection"""self.quality_data.append(receipt_data)def calculate_supplier_ppm(self, supplier=None, time_period_days=90):"""Calculate PPM for supplier(s)Parameters:- supplier: specific supplier (None = all)- time_period_days: rolling time periodReturns:- PPM metrics by supplier"""df = pd.DataFrame(self.quality_data)# Filter time periodcutoff_date = datetime.now() - timedelta(days=time_period_days)df = df[df['receipt_date'] >= cutoff_date]# Filter supplier if specifiedif supplier:df = df[df['supplier'] == supplier]# Calculate PPM by suppliersupplier_ppm = df.groupby('supplier').agg({'quantity_received': 'sum','quantity_defective': 'sum'})supplier_ppm['ppm'] = (supplier_ppm['quantity_defective'] /supplier_ppm['quantity_received'] * 1000000)supplier_ppm['meets_target'] = supplier_ppm['ppm'] <= self.target_ppmreturn supplier_ppm.sort_values('ppm', ascending=False)def identify_quality_issues(self):"""Identify suppliers with quality problems"""ppm_data = self.calculate_supplier_ppm()critical_suppliers = ppm_data[ppm_data['ppm'] > self.target_ppm * 3]warning_suppliers = ppm_data[(ppm_data['ppm'] > self.target_ppm) &(ppm_data['ppm'] <= self.target_ppm * 3)]return {'critical_suppliers': critical_suppliers,'warning_suppliers': warning_suppliers,'total_suppliers': len(ppm_data),'compliant_suppliers': len(ppm_data[ppm_data['meets_target']]),'compliance_rate': len(ppm_data[ppm_data['meets_target']]) / len(ppm_data) * 100}def generate_corrective_action(self, supplier, issue_description):"""Generate corrective action request (CAR)"""car = {'car_id': f"CAR_{datetime.now().strftime('%Y%m%d%H%M%S')}",'supplier': supplier,'issue_date': datetime.now(),'issue_description': issue_description,'current_ppm': self.calculate_supplier_ppm(supplier)['ppm'].iloc[0],'target_ppm': self.target_ppm,'required_actions': ['Root cause analysis within 48 hours','Containment plan immediate','Corrective action plan within 1 week','Effectiveness validation within 30 days'],'status': 'open'}return car# Exampleqm = AutomotiveQualityManager(target_ppm=50)# Record receiptsqm.record_receipt({'receipt_date': datetime.now() - timedelta(days=10),'supplier': 'Supplier_A','part_number': 'PART_001','quantity_received': 10000,'quantity_defective': 3})qm.record_receipt({'receipt_date': datetime.now() - timedelta(days=5),'supplier': 'Supplier_B','part_number': 'PART_002','quantity_received': 5000,'quantity_defective': 8})ppm = qm.calculate_supplier_ppm()print("Supplier PPM:")print(ppm)issues = qm.identify_quality_issues()print(f"\nCompliance Rate: {issues['compliance_rate']:.0f}%")
EV Supply Chain Considerations
Electric Vehicle Transition
Supply Chain Differences:
Traditional ICE (Internal Combustion Engine) Vehicle:
- ~30,000 parts
- Complex powertrain (engine, transmission, exhaust)
- Mature supplier base
- Established processes
Electric Vehicle (EV):
- ~20,000 parts (simpler)
- Battery pack (40-50% of vehicle cost)
- Electric motors and inverters
- New supplier base
- Battery supply chain critical
class EVSupplyChainAnalyzer:"""Analyze EV vs. ICE supply chain differences"""def __init__(self):self.ice_bom_cost = 25000 # Average ICE vehicle BOM costself.ev_bom_cost = 35000 # Average EV vehicle BOM costdef compare_cost_structures(self):"""Compare ICE vs. EV cost structures"""ice_structure = {'powertrain': 0.25, # 25% - engine, transmission'body_chassis': 0.30,'electronics': 0.15,'interior': 0.20,'other': 0.10}ev_structure = {'battery_pack': 0.40, # 40% - massive cost driver'electric_motor': 0.05,'power_electronics': 0.10,'body_chassis': 0.25,'electronics': 0.10,'interior': 0.08,'other': 0.02}comparison = pd.DataFrame({'ICE_pct': ice_structure,'EV_pct': ev_structure,'ICE_cost': {k: v * self.ice_bom_cost for k, v in ice_structure.items()},'EV_cost': {k: v * self.ev_bom_cost for k, v in ev_structure.items()}})return comparisondef analyze_battery_supply_chain(self, battery_capacity_kwh, cell_chemistry='NMC'):"""Analyze battery supply chain requirementsParameters:- battery_capacity_kwh: battery pack size (kWh)- cell_chemistry: NMC (Nickel Manganese Cobalt) or LFP (Lithium Iron Phosphate)Returns:- material requirements"""# Material requirements per kWh (kg)if cell_chemistry == 'NMC':materials = {'lithium': 0.8,'nickel': 1.2,'cobalt': 0.2,'manganese': 0.3,'graphite': 1.0,'copper': 1.5,'aluminum': 2.0}elif cell_chemistry == 'LFP':materials = {'lithium': 0.6,'iron': 1.0,'phosphate': 0.8,'graphite': 1.0,'copper': 1.2,'aluminum': 1.8}# Calculate total materialstotal_materials = {material: amount * battery_capacity_kwhfor material, amount in materials.items()}# Estimate costs ($/kg)material_costs = {'lithium': 30,'nickel': 18,'cobalt': 35,'manganese': 2,'iron': 0.50,'phosphate': 1.50,'graphite': 8,'copper': 9,'aluminum': 2.5}total_material_cost = sum(total_materials.get(mat, 0) * costfor mat, cost in material_costs.items())return {'battery_capacity_kwh': battery_capacity_kwh,'cell_chemistry': cell_chemistry,'materials_kg': total_materials,'material_cost': total_material_cost,'cost_per_kwh': total_material_cost / battery_capacity_kwh}# Exampleanalyzer = EVSupplyChainAnalyzer()cost_comparison = analyzer.compare_cost_structures()print("Cost Structure Comparison:")print(cost_comparison)battery_analysis = analyzer.analyze_battery_supply_chain(battery_capacity_kwh=75,cell_chemistry='NMC')print(f"\nBattery Materials for 75 kWh pack:")print(f"Lithium: {battery_analysis['materials_kg']['lithium']:.1f} kg")print(f"Total Material Cost: ${battery_analysis['material_cost']:,.0f}")print(f"Cost per kWh: ${battery_analysis['cost_per_kwh']:.0f}")
Automotive-Specific Performance Metrics
Key Performance Indicators
class AutomotiveKPITracker:"""Track automotive supply chain KPIs"""def __init__(self):self.kpis = {}def calculate_inventory_turns(self, annual_cogs, avg_inventory):"""Inventory turnover (target: 15-20 for automotive)"""turns = annual_cogs / avg_inventoryself.kpis['inventory_turns'] = turnsreturn turnsdef calculate_dock_to_dock_time(self, total_cycle_time_hours):"""Dock-to-dock time (supplier dock to customer dock)"""self.kpis['dock_to_dock_hours'] = total_cycle_time_hoursreturn total_cycle_time_hoursdef calculate_otd(self, on_time_deliveries, total_deliveries):"""On-Time Delivery (target: >99%)"""otd = on_time_deliveries / total_deliveries * 100self.kpis['otd_pct'] = otdreturn otddef calculate_line_stoppage_rate(self, stoppages, production_hours):"""Line stoppages per 1000 production hours"""rate = (stoppages / production_hours) * 1000self.kpis['line_stoppage_per_1000hrs'] = ratereturn ratedef generate_scorecard(self, benchmarks):"""Generate KPI scorecard with benchmarks"""scorecard = []for kpi, value in self.kpis.items():benchmark = benchmarks.get(kpi, {})if 'target' in benchmark:if 'higher_better' in benchmark and benchmark['higher_better']:status = 'green' if value >= benchmark['target'] else 'red'else:status = 'green' if value <= benchmark['target'] else 'red'else:status = 'unknown'scorecard.append({'kpi': kpi,'actual': value,'target': benchmark.get('target', 'N/A'),'status': status})return pd.DataFrame(scorecard)# Exampletracker = AutomotiveKPITracker()tracker.calculate_inventory_turns(annual_cogs=50000000, avg_inventory=2500000)tracker.calculate_otd(on_time_deliveries=9950, total_deliveries=10000)tracker.calculate_line_stoppage_rate(stoppages=5, production_hours=2000)benchmarks = {'inventory_turns': {'target': 15, 'higher_better': True},'otd_pct': {'target': 99, 'higher_better': True},'line_stoppage_per_1000hrs': {'target': 3, 'higher_better': False}}scorecard = tracker.generate_scorecard(benchmarks)print("Automotive Supply Chain Scorecard:")print(scorecard)
Tools & Technologies
Automotive Supply Chain Software
Tier 1 Supplier Management:
- SAP Automotive: Integrated supply chain for automotive
- Oracle E-Business Suite: Automotive-specific modules
- Kinaxis RapidResponse: S&OP for automotive
- Blue Yonder: Supply chain planning and execution
- Coupa Supply Chain Design: Network optimization
Supplier Collaboration:
- SupplyOn: Automotive supplier network (BMW, VW, Continental)
- Elemica: Supply chain collaboration
- E2open: Multi-tier visibility
- Llamasoft: Supply chain modeling
Quality Management:
- IQMS: Manufacturing ERP with quality
- TrackWise: Quality and compliance
- MasterControl: Supplier quality management
- ETQ Reliance: CAPA and quality
Python Libraries
# Supply chain optimizationfrom pulp import *import pyomo.environ as pyo# Data analysisimport pandas as pdimport numpy as np# Visualizationimport matplotlib.pyplot as pltimport seaborn as snsimport plotly.express as px# Machine learning for forecastingfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.linear_model import LinearRegression
Common Challenges & Solutions
Challenge: Single-Source Supply Risk
Problem:
- Critical part from single supplier
- Plant shutdown if supplier fails
- High negotiating leverage for supplier
Solutions:
- Dual-source strategy (at least 30/70 split)
- Safety stock for critical parts
- Supplier financial monitoring
- Contract manufacturing agreements
- Vertical integration for critical components
Challenge: Long Lead Times for New Tools/Dies
Problem:
- Tooling lead times 6-12 months
- Delays new model launches
- High capital costs
Solutions:
- Early supplier involvement (ESI)
- Concurrent engineering
- Rapid prototyping and testing
- Modular tooling design
- Digital simulation before physical tooling
Challenge: Managing 1,000+ Suppliers
Problem:
- Complexity managing multi-tier network
- Lack of visibility to Tier 2/3
- Quality issues from sub-tier
Solutions:
- Supplier tiering and segmentation
- Multi-tier visibility platforms
- Supplier scorecards and audits
- Supplier development programs
- Strategic supplier reductions (consolidation)
Challenge: EV Battery Supply Constraints
Problem:
- Limited battery cell production capacity
- Competition for lithium, cobalt, nickel
- Price volatility
- Geographic concentration (China)
Solutions:
- Long-term supply agreements (offtake contracts)
- Vertical integration (own battery plants)
- Diversify cell suppliers and chemistries
- Recycling programs (circular economy)
- Alternative chemistries (LFP, solid-state)
Output Format
Automotive Supply Chain Report
Executive Summary:
- Plant: Detroit Assembly (Model A, Model B)
- Daily Production: 1,000 vehicles
- Tier 1 Suppliers: 120
- Inventory Turns: 18.5 (target: 15+)
- OTD Performance: 98.5% (target: 99%)
- Quality: 42 PPM (target: <50 PPM)
- Line Stoppages: 2.1 per 1000 hrs (target: <3)
Supply Chain Performance:
| Metric | Actual | Target | Status | |
|---|---|---|---|---|
| Inventory Turns | 18.5 | 15+ | ✓ Green | |
| OTD% | 98.5% | 99% | ⚠ Yellow | |
| Quality (PPM) | 42 | <50 | ✓ Green | |
| Line Stoppages | 2.1 | <3 | ✓ Green | |
| Dock-to-Dock Time | 4.2 hrs | <6 hrs | ✓ Green |
Supplier Quality (Top Issues):
| Supplier | Part | PPM | Status | Action | |
|---|---|---|---|---|---|
| Supplier_X | PART_123 | 285 | Critical | CAR issued | |
| Supplier_Y | PART_456 | 110 | Warning | Under review | |
| Supplier_Z | PART_789 | 45 | Good | Monitor |
JIT Delivery Performance:
| Supplier | Deliveries | On-Time | Early | Late | Performance | |
|---|---|---|---|---|---|---|
| Supplier_A | 250 | 248 | 1 | 1 | 99.2% | |
| Supplier_B | 180 | 175 | 3 | 2 | 97.2% | |
| Supplier_C | 300 | 300 | 0 | 0 | 100% |
Action Items:
- Address Supplier_X quality issue (285 PPM) - CAR in progress
- Improve OTD from 98.5% to 99% - focus on 3 underperforming suppliers
- Complete EV battery supplier qualification for Model C launch
- Implement Tier 2 visibility platform for critical components
Questions to Ask
If you need more context:
- OEM or Tier 1/2/3 supplier?
- What products/components are manufactured?
- Production volume and model complexity?
- Current supply chain structure and key metrics?
- JIT delivery in place?
- Supplier quality performance (PPM)?
- Any EV products or transition plans?
- Major supply chain challenges or pain points?
Related Skills
- production-scheduling: For assembly line scheduling
- lean-manufacturing: For waste elimination and continuous improvement
- capacity-planning: For production capacity management
- supplier-selection: For supplier evaluation and qualification
- supplier-risk-management: For supply continuity
- quality-management: For quality systems and SPC
- inventory-optimization: For safety stock and inventory policies
- master-production-scheduling: For MPS development
- demand-forecasting: For production planning