automotive-supply-chain
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 pd
import numpy as np
from datetime import datetime, timedelta
class AutomotiveJITScheduler:
"""
Manage Just-In-Time delivery schedules for automotive assembly
"""
def __init__(self, assembly_schedule, takt_time_minutes):
"""
Initialize JIT scheduler
Parameters:
- assembly_schedule: vehicle build schedule
- takt_time_minutes: time per vehicle (e.g., 60 seconds = 1 vehicle/min)
"""
self.assembly_schedule = assembly_schedule
self.takt_time = takt_time_minutes
def calculate_part_requirements(self, bom_df):
"""
Calculate part requirements based on assembly schedule
Parameters:
- bom_df: Bill of Materials with parts per vehicle
Returns:
- 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 model
model_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 need
Returns:
- supplier delivery schedule
"""
call_offs = []
# Group by supplier and part
grouped = part_requirements.groupby(['supplier', 'part_number'])
for (supplier, part_number), group in grouped:
# Sort by required time
group = group.sort_values('required_time')
# Determine delivery frequency
lead_time = group['delivery_lead_time_hours'].iloc[0]
# Calculate delivery windows
for 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 door
return (hash(supplier) % 20) + 1 # 20 dock doors
def calculate_lineside_inventory(self, call_offs, consumption_rate):
"""
Calculate lineside inventory levels
Parameters:
- call_offs: delivery schedule
- consumption_rate: parts consumed per hour
Returns:
- inventory profile over time
"""
# Simulate inventory over time
inventory_profile = []
current_inventory = 0
time_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 time
deliveries = call_offs[call_offs['delivery_time'] == t]['quantity'].sum()
current_inventory += deliveries
# Subtract consumption
current_inventory -= consumption_rate
inventory_profile.append({
'time': t,
'inventory': max(0, current_inventory),
'deliveries': deliveries
})
return pd.DataFrame(inventory_profile)
# Example usage
assembly_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_sequence
def generate_sequenced_order(self, part_specs):
"""
Generate sequenced parts order matching build sequence
Parameters:
- 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 VIN
spec = 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 sequence
Returns:
- 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 manager
Parameters:
- target_ppm: target defect rate (parts per million)
"""
self.target_ppm = target_ppm
self.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 period
Returns:
- PPM metrics by supplier
"""
df = pd.DataFrame(self.quality_data)
# Filter time period
cutoff_date = datetime.now() - timedelta(days=time_period_days)
df = df[df['receipt_date'] >= cutoff_date]
# Filter supplier if specified
if supplier:
df = df[df['supplier'] == supplier]
# Calculate PPM by supplier
supplier_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_ppm
return 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
# Example
qm = AutomotiveQualityManager(target_ppm=50)
# Record receipts
qm.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 cost
self.ev_bom_cost = 35000 # Average EV vehicle BOM cost
def 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 comparison
def analyze_battery_supply_chain(self, battery_capacity_kwh, cell_chemistry='NMC'):
"""
Analyze battery supply chain requirements
Parameters:
- 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 materials
total_materials = {
material: amount * battery_capacity_kwh
for 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) * cost
for 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
}
# Example
analyzer = 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_inventory
self.kpis['inventory_turns'] = turns
return turns
def 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_hours
return total_cycle_time_hours
def calculate_otd(self, on_time_deliveries, total_deliveries):
"""On-Time Delivery (target: >99%)"""
otd = on_time_deliveries / total_deliveries * 100
self.kpis['otd_pct'] = otd
return otd
def calculate_line_stoppage_rate(self, stoppages, production_hours):
"""Line stoppages per 1000 production hours"""
rate = (stoppages / production_hours) * 1000
self.kpis['line_stoppage_per_1000hrs'] = rate
return rate
def 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)
# Example
tracker = 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 optimization
from pulp import *
import pyomo.environ as pyo
# Data analysis
import pandas as pd
import numpy as np
# Visualization
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
# Machine learning for forecasting
from sklearn.ensemble import RandomForestRegressor
from 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
More from kishorkukreja/awesome-supply-chain
procurement-optimization
When the user wants to optimize procurement decisions, allocate orders across suppliers, or determine optimal order quantities. Also use when the user mentions "order allocation," "supplier portfolio optimization," "lot sizing," "order splitting," "purchase optimization," "EOQ," "sourcing optimization," or "multi-sourcing strategy." For supplier selection, see supplier-selection. For spend analysis, see spend-analysis.
77replenishment-strategy
When the user wants to design or optimize replenishment strategies, determine replenishment policies, or improve inventory flow between locations. Also use when the user mentions "inventory replenishment," "stock replenishment," "min-max inventory," "DRP," "auto-replenishment," "vendor-managed inventory," "forward pick replenishment," or "retail store replenishment." For safety stock calculations, see inventory-optimization. For multi-echelon networks, see multi-echelon-inventory.
37inventory-optimization
When the user wants to optimize inventory levels, calculate safety stock, determine reorder points, or minimize inventory costs. Also use when the user mentions "inventory management," "safety stock," "EOQ," "reorder point," "service level," "stockout prevention," "ABC analysis," "inventory turns," or "working capital reduction." For warehouse slotting, see warehouse-slotting-optimization. For multi-echelon systems, see multi-echelon-inventory.
35supplier-selection
When the user wants to evaluate suppliers, select vendors, or perform supplier scoring and qualification. Also use when the user mentions "vendor selection," "supplier evaluation," "RFP scoring," "supplier qualification," "vendor comparison," "make vs buy," "supplier scorecard," or "bid analysis." For ongoing supplier risk monitoring, see supplier-risk-management. For contract negotiation, see contract-management.
32pharmaceutical-supply-chain
When the user wants to optimize pharmaceutical supply chains, manage cold chain logistics, ensure regulatory compliance, or implement serialization. Also use when the user mentions "pharma supply chain," "GMP compliance," "cold chain," "drug serialization," "clinical trials logistics," "pharmaceutical distribution," "good distribution practices," "GDP," "drug safety," or "pharmaceutical quality." For general healthcare, see hospital-logistics. For clinical trials specifically, see clinical-trial-logistics.
30retail-replenishment
When the user wants to optimize retail store replenishment, calculate reorder points for stores, or manage continuous replenishment. Also use when the user mentions "store replenishment," "auto-replenishment," "min-max inventory," "store orders," "DC to store," "continuous replenishment," or "vendor-managed inventory (VMI)." For initial allocation, see retail-allocation. For DC operations, see warehouse-design.
29