| Attribute | Value |
|---|---|
| Context | Wave Planning Service |
| Pattern | Published Language |
| Direction | Inbound (Wave Planning → Process Path) |
| Protocol | Apache Kafka |
| Topics | wave-planning.waves.* |
Wave Planning Service creates and releases waves of orders for batch processing. Process Path consumes wave events and routes the contained shipments to the Batch/Flow path. Wave Planning owns the wave composition logic, and Process Path follows their published contract.
1
2
3
4
5
6
7
8
┌─────────────────────────┐ ┌─────────────────────────┐
│ WAVE PLANNING │ │ PROCESS PATH │
│ │ │ │
│ • Wave creation │ ─────► │ • Batch/Flow routing │
│ • Order clustering │ Event │ • Wave execution │
│ • Carrier optimization │ │ • Capacity allocation │
│ • Zone balancing │ │ │
└─────────────────────────┘ └─────────────────────────┘
Purpose: Route wave shipments to Batch/Flow path
Topic: wave-planning.waves.released
Action: Bulk route shipments to Batch/Flow, trigger batch picking
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"specversion": "1.0",
"type": "com.paklog.wave.released.v1",
"source": "/wave-planning-service",
"id": "evt-wave-123456",
"time": "2025-01-20T10:05:00.000Z",
"subject": "WAVE-2025-01-20-001",
"data": {
"waveId": "WAVE-2025-01-20-001",
"waveName": "UPS_GROUND_CUTOFF_1400",
"waveType": "CARRIER_CUTOFF",
"orderCount": 50,
"itemCount": 175,
"shipmentIds": [
"SHP-101", "SHP-102", "SHP-103"
],
"carrierCutoff": "2025-01-20T14:00:00Z",
"targetCarrier": "UPS",
"targetPath": "BATCH_FLOW",
"zoneDistribution": {
"ZONE-A": 20,
"ZONE-B": 18,
"ZONE-C": 12
},
"estimatedPickTime": "PT45M",
"estimatedPackTime": "PT30M",
"priority": "NORMAL",
"releasedAt": "2025-01-20T10:05:00Z"
}
}
Purpose: Cancel routing for wave shipments
Topic: wave-planning.waves.cancelled
1
2
3
4
5
6
7
8
9
10
{
"type": "com.paklog.wave.cancelled.v1",
"data": {
"waveId": "WAVE-2025-01-20-001",
"cancellationReason": "CARRIER_DELAY",
"affectedShipments": ["SHP-101", "SHP-102", "SHP-103"],
"rescheduledTo": "WAVE-2025-01-20-002",
"cancelledAt": "2025-01-20T10:10:00Z"
}
}
Purpose: Update wave composition after release
Topic: wave-planning.waves.modified
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"type": "com.paklog.wave.modified.v1",
"data": {
"waveId": "WAVE-2025-01-20-001",
"modifications": {
"addedShipments": ["SHP-104"],
"removedShipments": ["SHP-101"],
"newOrderCount": 50,
"newItemCount": 180
},
"modificationReason": "ORDER_CANCELLATION",
"modifiedAt": "2025-01-20T10:15:00Z"
}
}
Wave Planning creates different wave types based on optimization goals:
Optimized for meeting carrier pickup deadlines.
1
2
3
4
5
6
{
"waveType": "CARRIER_CUTOFF",
"targetCarrier": "UPS",
"carrierCutoff": "2025-01-20T14:00:00Z",
"priority": "HIGH"
}
Process Path Action: Prioritize routing, expedite if needed
Optimized for pick path efficiency.
1
2
3
4
5
6
7
8
9
{
"waveType": "ZONE_BASED",
"primaryZone": "ZONE-A",
"zoneDistribution": {
"ZONE-A": 80,
"ZONE-B": 15,
"ZONE-C": 5
}
}
Process Path Action: Route to path aligned with zone
Optimized for high-value or expedited orders.
1
2
3
4
5
{
"waveType": "PRIORITY",
"priorityReason": "SAME_DAY_DELIVERY",
"slaCutoff": "2025-01-20T12:00:00Z"
}
Process Path Action: Override normal routing, expedite
1
2
3
4
5
6
7
8
9
10
11
1. Validate wave event
2. Check Batch/Flow path capacity
3. If capacity available:
- Bulk assign all shipments to Batch/Flow
- Publish ShipmentRoutedToPath for each
- Update wave tracking
4. If capacity constrained:
- Split wave across available paths
- Notify Wave Planning of split
5. Monitor wave progress
6. Report completion to Wave Planning
Before accepting a wave, Process Path checks:
1
2
3
4
5
6
7
8
9
10
{
"waveId": "WAVE-2025-01-20-001",
"capacityCheck": {
"requestedShipments": 50,
"batchFlowCapacity": 60,
"batchFlowUtilization": 45,
"canAccept": true,
"alternativePaths": []
}
}
| Wave Characteristic | Preferred Path | Reasoning |
|---|---|---|
| High order count (>20) | BATCH_FLOW | Efficient batch picking |
| Zone-concentrated | BATCH_FLOW | Optimized pick paths |
| Mixed zones | BATCH_FLOW or AFE | Depends on item count |
| Priority/Same-day | SINGLES or AFE | Faster cycle time |
Process Path tracks wave progress and reports to Wave Planning:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"type": "com.paklog.processpath.wave.progress.v1",
"data": {
"waveId": "WAVE-2025-01-20-001",
"status": "IN_PROGRESS",
"totalShipments": 50,
"pickedShipments": 35,
"packedShipments": 20,
"shippedShipments": 15,
"progress": {
"pickProgress": 70,
"packProgress": 40,
"shipProgress": 30
},
"estimatedCompletion": "2025-01-20T11:30:00Z",
"onTrackForCutoff": true
}
}
Process Path provides feedback that influences future wave creation:
1
2
3
4
5
6
7
8
9
10
{
"type": "com.paklog.processpath.wave.capacity.feedback.v1",
"data": {
"pathType": "BATCH_FLOW",
"currentCapacity": 60,
"recommendedWaveSize": 40,
"activeWaves": 2,
"nextAvailableSlot": "2025-01-20T10:30:00Z"
}
}
1
2
3
4
5
6
7
8
9
10
11
{
"type": "com.paklog.processpath.wave.performance.feedback.v1",
"data": {
"waveId": "WAVE-2025-01-20-001",
"actualPickTime": "PT50M",
"estimatedPickTime": "PT45M",
"variance": "PT5M",
"bottlenecks": ["ZONE-B_CONGESTION"],
"recommendations": ["REDUCE_ZONE_B_CONCENTRATION"]
}
}
| Error | Action |
|---|---|
| Wave too large | Request split from Wave Planning |
| Batch/Flow unavailable | Route to AFE as fallback |
| Carrier cutoff at risk | Escalate priority, notify WES |
| Wave shipment short | Report exception, continue |
| Metric | Target | Description |
|---|---|---|
| Wave acceptance rate | > 99% | Waves accepted without split |
| Wave completion rate | > 98% | Waves completed before cutoff |
| Pick time variance | < 10% | Actual vs estimated pick time |
| Pack time variance | < 15% | Actual vs estimated pack time |
process_path_waves_received_totalprocess_path_waves_completed_totalprocess_path_wave_completion_time_secondsprocess_path_wave_cutoff_compliance_rate