SOP-PACK-01: Intelligent Packing Operations v2.0 FINAL¶
Document ID: SOP-PACK-01-v2.0
Version: 2.0 (Automated System)
Status: ✅ PRODUCTION READY
Owner: Protocol Raw Operations
Review Date: End of Month 3 (after 150-200 deliveries)
Document Purpose¶
This SOP defines the complete intelligent packing workflow for Protocol Raw frozen dog food. It covers: - Automated PCM calculation based on real weather forecasts - Pack day workflow (Tuesday & Thursday dispatch) - Quality control procedures with automated pass/fail - Geographic delivery controls - Temperature logger feedback loop - 3PL handoff requirements
Basis: Protocol Raw Packaging Specifications v1.2 + Automated Operations Platform
Quick Reference¶
Pack Day Schedule (Phase A)¶
| Day | Action | Timing | Purpose |
|---|---|---|---|
| Tuesday | Calculate PCM | 9:00 AM | Uses current weather for Wed/Thu delivery |
| Pack orders | 10:00 AM - 4:00 PM | Target: <10 mins per box | |
| Dispatch | 4:00-6:00 PM | DPD collection | |
| Thursday | Calculate PCM | 9:00 AM | Uses current weather for Fri/Sat delivery |
| Pack orders | 10:00 AM - 4:00 PM | Target: <10 mins per box | |
| Dispatch | 4:00-6:00 PM | DPD collection |
PCM Requirements (v1.2 Spec)¶
| Box Size | Temperature Band | PCM Mass | PCM Packs | Risk Level | Logger Required |
|---|---|---|---|---|---|
| 8kg | <20°C | 2.0kg | 4 | STANDARD | No |
| 8kg | 20-29°C | 2.7kg | 6 | MEDIUM | Yes |
| 8kg | ≥30°C | 3.2kg | 7 | HIGH | Yes |
| 12kg | <20°C | 3.0kg | 6 | STANDARD | No |
| 12kg | 20-29°C | 4.1kg | 9 | MEDIUM | Yes |
| 12kg | ≥30°C | 5.3kg | 11 | HIGH | Yes |
| 16kg | <20°C | 4.0kg | 8 | STANDARD | Always |
| 16kg | 20-29°C | 5.5kg | 11 | MEDIUM | Always |
| 16kg | ≥30°C | 7.1kg | 15 | HIGH | Always |
Part 1: System Overview¶
1.1 Automation Architecture¶
ORDER PLACED (Shopify)
↓
SOP-INV-01: FEFO Batch Allocation (automatic)
↓
SOP-0X: Export to Fulfillment (automatic)
order.export_state = 'sent'
↓
TUESDAY/THURSDAY MORNING (9am)
↓
Pack Day Portal: Calculate PCM Button
↓
Edge Function: calculate-pack-day-instructions
├─ Gets all exported orders
├─ Calls OpenWeatherMap API (real forecast)
├─ Determines box size from order_items
├─ Calculates PCM requirements
└─ Creates packing_instructions
↓
View Pack Queue (sorted by risk level)
↓
PACK ORDERS (10am-4pm)
├─ Follow packing instructions
├─ Record pack times
└─ Verify weights
↓
QUALITY CHECK (post-pack)
├─ Weight variance: ±5% tolerance
├─ Pack time: <10 mins (8kg/12kg), <12 mins (16kg)
└─ Visual inspection
↓
SOP-0Y: Dispatch Confirmation
↓
CUSTOMER DELIVERY (24-48h)
↓
TEMPERATURE LOGGER RECOVERY (10% random + all HIGH risk)
↓
Data Analysis & PCM Optimization
1.2 Core Principles¶
- Weather-Based Calculations: PCM requirements calculated using real OpenWeatherMap API forecasts for next 48h
- Phase A Protection: 48h thermal buffer for 24h London transit (100% safety margin)
- Automated Quality Control: Weight variance and pack time auto-calculated with pass/fail
- Batch Traceability: Every pack linked to batch_id for recall capability
- Geographic Controls: Whitelist approach - only London in Phase A, Home Counties in Phase B
1.3 Technology Stack¶
- Database: PostgreSQL (Supabase) with
raw_opsschema - Weather API: OpenWeatherMap (1000 calls/day free tier)
- Automation: Supabase Edge Functions + Make.com
- Portal: Simple HTML page (pack-day-portal.html)
- Analytics: Metabase dashboards (future)
Part 2: Pack Day Workflow¶
2.1 Pre-Pack Preparation (Day Before)¶
Checklist: - [ ] Product core temperature ≤-25°C (24h+ hold time verified) - [ ] PCM packs frozen solid ≤-25°C (48h+ conditioning) - [ ] Pack station organized (wool liners, boxes, void fill staged) - [ ] Temperature probes calibrated - [ ] Scales verified (±0.1kg accuracy) - [ ] Weather forecast reviewed (check for >28°C heatwave warnings)
Freezer Requirements: - Product freezer: -25°C or colder, monitored continuously - PCM freezer: Separate, dedicated, -25°C minimum - Squeeze test: No soft spots in PCM packs allowed
2.2 Pack Morning Procedure (9:00 AM)¶
Step 1: Open Pack Day Portal
Location: pack-day-portal.html (bookmark this)
Step 2: Calculate PCM Requirements
- Click "🧊 Calculate PCM for Today's Packs" button
- System executes:
- Fetches all orders with
export_state = 'sent' - Filters out orders that already have packing instructions
- Calls OpenWeatherMap API for each postcode
- Determines max temperature over next 48 hours
- Calculates PCM requirements per v1.2 spec
- Creates packing instructions in database
- Portal displays results:
- Total orders processed
- Success/failure count
- Risk level breakdown
- Any errors requiring attention
Expected Results:
✅ Success!
Processed 23 orders
23 successful, 0 failed
Results:
#1234 - 6 packs - STANDARD
#1235 - 9 packs - MEDIUM
#1236 - 11 packs - HIGH
...
Step 3: View Pack Queue
Query pack queue (via SQL or future Metabase tile):
SELECT
order_number_label,
customer_name,
delivery_postcode,
box_size,
pcm_packs_count,
risk_level,
ambient_forecast_max,
logger_required,
special_notes
FROM raw_ops.v_pack_queue_with_batch
ORDER BY
CASE risk_level
WHEN 'HIGH' THEN 1
WHEN 'MEDIUM' THEN 2
WHEN 'STANDARD' THEN 3
END,
exported_at ASC;
Pack Order Priority: 1. HIGH risk first (logger required, extra PCM) 2. MEDIUM risk second 3. STANDARD risk last
2.3 Packing Procedure (10:00 AM - 4:00 PM)¶
For Each Order:
A. Pre-Pack Setup - [ ] Start pack timer - [ ] Verify batch_id lab cert PASS (Salmonella/Listeria ABSENT) - [ ] Product at ≤-25°C (probe check OR freezer log) - [ ] PCM packs frozen solid (squeeze test) - [ ] Correct box size for order (8kg/12kg/16kg) - [ ] Wool liner clean, intact, no tears
B. Pack Sequence
Base Layer:
8kg: 1 PCM pack flat on bottom
12kg: 1-2 PCM packs flat on bottom (season dependent)
16kg: 2 PCM packs flat on bottom
Product Layer: - Remove product from freezer - Stack tightly in brick configuration: - 8kg: 2×2×4 (16× 500g pouches) - 12kg: 3×2×4 (24× 500g pouches) - 16kg: 4×2×4 (32× 500g pouches) - Minimize air gaps - Work quickly: Target <3 mins from freezer to box
Top/Side PCM Layer:
COOL (<20°C):
8kg: 3 packs on top
12kg: 4-5 packs on top/sides
16kg: 6 packs on top/sides
STANDARD (20-29°C):
8kg: 5 packs on top
12kg: 7-8 packs on top/sides
16kg: 9 packs on top/sides
HOT (≥30°C):
8kg: 6 packs on top
12kg: 9-10 packs on top/sides
16kg: 13 packs on top/sides
Void Fill: - Kraft paper void fill in ALL empty spaces - No air gaps allowed - Critical for hot weather (HOT season)
Temperature Logger (if required): - Insert between center two product bricks - Must be surrounded by product (not touching liner) - Activate logger immediately before sealing - Record logger_id → order_id mapping
Seal: - Close wool liner completely (no gaps) - H-tape box (all seams reinforced) - PERISHABLE stickers (top and side) - Shipping label correct
C. Post-Pack Verification - [ ] Stop pack timer (must be <10 mins for 8kg/12kg, <12 mins for 16kg) - [ ] Weigh box - [ ] Record weight and pack time
Expected Weights (COOL season):
8kg box: 11.8kg ± 0.6kg (±5% tolerance)
12kg box: 17.4kg ± 0.9kg (±5% tolerance)
16kg box: 23.0kg ± 1.2kg (±5% tolerance)
Weight Variance Alerts: - Under-weight (>5% low): STOP - Reopen and verify PCM count - Over-weight (>5% high): Review void fill usage, optimize
2.4 Quality Check Recording¶
Via SQL or Future Ops Portal:
SELECT raw_ops.record_pack_quality_check(
p_order_id := '[order_id]',
p_actual_weight_kg := 17.2, -- From scale
p_pack_started_at := '2025-11-13 10:15:00+00',
p_pack_completed_at := '2025-11-13 10:23:00+00', -- 8 mins
p_logger_activated := false, -- true if logger inserted
p_void_fill_complete := true,
p_visual_check_pass := true,
p_packed_by := 'Anton',
p_notes := NULL -- Optional notes
);
System Auto-Calculates: - Expected weight (from v1.2 BOM) - Weight variance (kg and %) - Pack time (seconds) - Pass/fail status
Quality Check Results:
✅ PASS: Weight within ±5%, pack time <10 mins, visual check passed
⌠FAIL: Any check fails → investigate before dispatch
View Quality Check:
2.5 Dispatch (4:00-6:00 PM)¶
Final Checks: - [ ] All orders packed and quality checked - [ ] All quality checks PASS (no failures) - [ ] Batch_id recorded to order mapping - [ ] Logger mappings recorded (if applicable) - [ ] Dispatch time logged (must reach courier within 2h of pack completion)
DPD Collection: - Collection window: 4:00-6:00 PM - All boxes staged for pickup - Collection receipt confirmed
Via SOP-0Y:
- Update export_state = 'acked' in database
- Record acked_at timestamp
- Generate customer notifications
Part 3: Geographic Delivery Controls¶
3.1 Allowed Delivery Areas (Phase A)¶
ALLOWED: London Only
EC - Central London (EC)
WC - Central London (WC)
E - East London
N - North London
NW - North West London
SE - South East London
SW - South West London
W - West London
Transit Time: 24h next-day delivery (48h thermal protection = 100% buffer)
3.2 Blocked Areas¶
Permanently Blocked (>72h transit or impossible for frozen):
IV - Scottish Highlands (Inverness)
KW - Scottish Highlands (Caithness)
PA - Scottish Highlands (Argyll)
PH - Scottish Highlands (Perth)
AB - Scottish Highlands (Aberdeen)
BT - Northern Ireland
HS - Outer Hebrides
ZE - Shetland Islands
KA27/KA28 - Isle of Arran/Cumbrae
Customer Message: "We're unable to deliver frozen food to [area] while maintaining our quality standards. We'll notify you when this changes."
Phase A/B Blocked (Not Yet Enabled): - All of UK outside London - Home Counties (enabled in Phase B Month 7+)
Customer Message: "We're not delivering to your area yet. Join our waitlist to be notified when we expand to your postcode."
3.3 Checkout Validation¶
API Endpoint:
Example Results:
// London (allowed)
{
"allowed": true,
"policy": "STANDARD",
"transit_hours": 24,
"region_name": "South West London",
"phase": "A",
"message": null
}
// Manchester (blocked - not in Phase A/B area)
{
"allowed": false,
"policy": "BLOCK",
"transit_hours": null,
"region_name": "Outside current delivery area",
"message": "We're not delivering to your area yet. Join our waitlist to be notified when we expand to your postcode."
}
// Highlands (permanently blocked)
{
"allowed": false,
"policy": "BLOCK",
"transit_hours": 96,
"region_name": "Scottish Highlands - Inverness",
"message": "We're unable to deliver frozen food to Highland postcodes while maintaining our quality standards."
}
Shopify Integration:
- Call validation API on postcode entry
- Display message if blocked
- Prevent checkout completion if allowed: false
3.4 Phase B Expansion (Month 7+)¶
Enable Home Counties Gradually:
-- Example: Enable Surrey first (Month 7)
UPDATE raw_ops.allowed_delivery_areas
SET is_active = true,
enabled_from_date = CURRENT_DATE
WHERE phase = 'B'
AND postcode_prefix IN ('GU', 'KT', 'RH', 'SM');
-- Month 8: Add Hertfordshire
UPDATE raw_ops.allowed_delivery_areas
SET is_active = true,
enabled_from_date = CURRENT_DATE
WHERE phase = 'B'
AND postcode_prefix IN ('AL', 'WD', 'HP', 'SG');
Validation: Test with new postcodes before enabling
Part 4: Temperature Logger Protocol¶
4.1 When Logger Required¶
Mandatory (Phase A): - ALL 16kg boxes (high value, longer pack time) - ALL HOT season orders (≥30°C forecast) - 10% random sampling (systematic: every 10th order) - Any customer escalation or complaint history - New postcode areas (first delivery to zone)
Target: Minimum 10% of all deliveries
4.2 Logger Placement¶
Standard Procedure:
1. Position between center two bricks of product stack
2. Surround with product on all sides (not touching liner)
3. Activate immediately before sealing box
4. Record logger_id → order_id → batch_id mapping
5. Include prepaid return envelope with delivery note
Logger ID Format: TL-XXXX (e.g., TL-0234)
4.3 Pass/Fail Thresholds (v1.2 Spec)¶
Upon Customer Receipt:
| Outcome | Core Temp at Receipt | Visual Check | Action |
|---|---|---|---|
| IDEAL PASS | ≤-12°C | Ice crystals visible, fully frozen solid | Log success |
| ACCEPTABLE PASS | -5°C to -12°C | Ice crystals present, firm throughout | Log success with note |
| FAIL | >-5°C | Pliable, soft spots, or fully thawed | Immediate refund + root cause analysis |
4.4 Logger Data Ingestion¶
When Logger Recovered:
-- Parse logger CSV/JSON and insert
SELECT raw_ops.insert_logger_data(
p_order_id := '[order_id]',
p_logger_id := 'TL-0234',
p_readings := '[
{"timestamp":"2025-11-13T10:00:00Z","temp_c":-15.2,"humidity_pct":65},
{"timestamp":"2025-11-13T11:00:00Z","temp_c":-14.8,"humidity_pct":67},
{"timestamp":"2025-11-13T12:00:00Z","temp_c":-13.5,"humidity_pct":70},
...
]'::jsonb,
p_trip_start_at := '2025-11-13 10:00:00+00',
p_trip_end_at := '2025-11-14 09:30:00+00'
);
System Auto-Calculates: - Min/max/avg temperature - Temperature at delivery (last reading) - Outcome classification (IDEAL_PASS/ACCEPTABLE_PASS/FAIL) - Cold chain integrity status - Breach detection and details
View Logger Results:
SELECT
logger_id,
order_id,
outcome,
temp_at_delivery_c,
min_temp_c,
max_temp_c,
trip_duration_hours,
cold_chain_intact
FROM raw_ops.temperature_logger_data
ORDER BY data_uploaded_at DESC;
4.5 Failure Response Protocol¶
Within 4 Hours of Failure Notification:
- Customer Action:
- Apologize immediately
- Full refund OR free replacement (customer choice)
-
No questions asked
-
Retrieve Logger Data (if available)
-
Document Conditions:
- Weather actual vs forecast
- Pack time recorded
- Courier tracking events
- Customer receipt timestamp
-
Weight verification data
-
Categorize Root Cause:
| Root Cause | Action |
|---|---|
| Weather spike | API underestimated → Add +0.5kg PCM buffer |
| Pack error | Incorrect PCM count → Retrain + add weight verification |
| Courier delay | Missed SLA → Escalate with DPD account manager |
| Product temp | Freezer not cold enough → Recalibrate or replace |
| Unknown | Insufficient data → Add logger to next 20 orders in same zone |
- Adjustment Protocol:
- 2+ failures same week, same cause: Increase PCM spec by 0.5kg immediately
- 5+ failures same month: PAUSE new orders, run stress test, update recipes
- Failure rate >5% sustained: Trigger Month 3 CPD Stop-Rule review
Part 5: 3PL Transition Requirements (Phase B Entry)¶
5.1 Operational Handover (Month 6-7)¶
Documentation Deliverables: - [ ] This SOP-PACK-01 document (operational procedures) - [ ] Packing recipes with photos (each season, each box size) - [ ] Weather API integration documentation - [ ] QC checklist templates (laminated for pack station) - [ ] Temperature logger handling protocol - [ ] Failure mode response playbook - [ ] Supplier contact list with MOQs and lead times - [ ] Cost tracking methodology (BOM by season/box)
Physical Infrastructure: - [ ] Freezer capacity: -25°C or colder (with backup) - [ ] Segregated PCM storage (dedicated freezer) - [ ] Calibrated scales (±0.1kg accuracy, certified) - [ ] Temperature probes (digital, calibrated) - [ ] Pack station setup (photos + layout diagram) - [ ] Materials storage (organized by season/box size) - [ ] Quality control station (separate from pack area)
5.2 3PL Data Requirements¶
Per Shipment (via API/CSV):
order_id,packaging_type,coolant_units_used,dispatch_temp_recorded,pack_time_seconds,actual_weight_kg,weather_forecast_temp,logger_id,pack_station_operator
uuid,Wool_12kg_STANDARD,9,-24.5,485,17.2,18.3,TL-0234,Operator-A
Required Fields:
- packaging_type: "Wool_8kg_COOL" / "Wool_12kg_STANDARD" / etc
- coolant_units_used: Integer count of 0.5kg PCM packs
- dispatch_temp_recorded: Product core temp at dispatch (°C)
- pack_time_seconds: Time from freezer removal to box seal
- actual_weight_kg: Final package weight
- weather_forecast_temp: Max temp used for recipe selection
- logger_id: If temperature logger inserted (or NULL)
- pack_station_operator: Operator ID for quality tracking
5.3 3PL Operational SLAs¶
| Metric | Target | Alert Threshold | Penalty |
|---|---|---|---|
| FEFO Rotation | 100% compliance | Any violation | £50/incident |
| Pack Time | <10 mins (12kg) | >12 mins sustained | Review + retraining |
| Weight Variance | <5% outside tolerance | >10% failure rate | £25/failure |
| Frozen Success | ≥95% | <90% in any week | £5/failed delivery |
| Dispatch SLA | Within 2hrs of pack | >4hrs | Courier cost + £20 |
| Daily Reporting | By 6pm same day | Missed report | £100/day |
| Exception Alerts | <2hrs | >4hrs response | £50/incident |
5.4 Expected 3PL Cost Impact¶
Phase B CPD Structure:
BOM (materials): £8.83-11.51 (season dependent, 12kg)
3PL Pick/Pack Fee: £2.50-3.50 (vs imputed £2.25)
Cold Storage: £0.50-1.00 per box-month
WMS Integration: £0.20-0.30 per transaction
──────────────────────────────────────────────────────
Total Normalized CPD: £22-27 (vs Phase A £21-23)
Net Phase B Impact: +£0.50-1.50 per box initially
Optimization Target: Return to £19-21 by Month 12 through: - 3PL volume discounts - Negotiated courier rates (£10.30 target) - Material bulk pricing - Process efficiency gains
Part 6: Performance Monitoring¶
6.1 Daily KPIs¶
Pack Day Metrics:
-- Daily pack summary
SELECT
DATE(packed_at) as pack_date,
COUNT(*) as total_packs,
AVG(pack_time_seconds) as avg_pack_time_sec,
COUNT(*) FILTER (WHERE overall_pass = true) as qc_pass_count,
COUNT(*) FILTER (WHERE overall_pass = false) as qc_fail_count,
ROUND(AVG(weight_variance_pct), 2) as avg_weight_variance_pct
FROM raw_ops.v_pack_quality_with_checks
WHERE DATE(packed_at) = CURRENT_DATE
GROUP BY DATE(packed_at);
Target Metrics: - Pack time: <9 mins average (12kg) - QC pass rate: ≥95% - Weight variance: <2% average
6.2 Weekly KPIs¶
PCM Usage by Season:
SELECT
box_size,
risk_level,
COUNT(*) as order_count,
AVG(pcm_packs_count) as avg_pcm_packs,
AVG(ambient_forecast_max) as avg_forecast_temp
FROM raw_ops.packing_instructions
WHERE created_at >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY box_size, risk_level
ORDER BY box_size, risk_level;
Logger Success Rate:
SELECT
outcome,
COUNT(*) as count,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 1) as percentage
FROM raw_ops.temperature_logger_data
WHERE trip_end_at >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY outcome;
Target: ≥95% IDEAL_PASS + ACCEPTABLE_PASS combined
6.3 Monthly KPIs¶
Cost Per Delivery (CPD) Tracking:
-- Blended CPD by season mix
SELECT
DATE_TRUNC('month', created_at) as month,
box_size,
risk_level,
COUNT(*) as order_count,
AVG(pcm_mass_kg) as avg_pcm_kg,
AVG(pcm_mass_kg * 1.26) as avg_pcm_cost_gbp -- £1.26/kg
FROM raw_ops.packing_instructions
GROUP BY DATE_TRUNC('month', created_at), box_size, risk_level
ORDER BY month DESC, box_size;
Target CPD (12kg): - Phase A Month 1-2: £20-21 cash - Phase A Month 4-6: £19-20 cash (with courier negotiation) - Phase B: £22-24 cash initially, optimize to £19-21 by Month 12
Part 7: Troubleshooting & Exception Handling¶
7.1 Weather API Failure¶
Symptoms: Edge Function returns error, no packing instructions created
Fallback Procedure: 1. Check OpenWeatherMap API status 2. If API down, use manual Met Office forecast 3. Conservative assumption: Use STANDARD (20-29°C) band for safety 4. Document manual override in notes field
Prevention: - Monitor API quota (1000 calls/day) - Set up Make.com alert if API fails
7.2 Heatwave Protocol (≥28°C for 3+ Days)¶
Trigger: Met Office forecast shows 3+ consecutive days ≥28°C
Actions: 1. Switch ALL orders to HOT spec (≥30°C) regardless of actual forecast 2. Pause new orders if heatwave continues >5 days 3. Email customers: "Delivery paused during heatwave for frozen integrity" 4. Resume when forecast <25°C for 2+ days
Customer Communication:
Subject: Temporary Delivery Pause - Heatwave Protection
We've paused deliveries this week due to extreme temperatures.
Your frozen food will be dispatched next [Tuesday/Thursday] when
conditions return to safe levels.
This pause ensures your food arrives frozen solid, maintaining
our quality standards.
Your delivery date has been automatically updated.
7.3 16kg Hot Weather Orders¶
Risk Assessment: 16kg box + ≥30°C = HIGH RISK
Options for Customer: 1. Split into 2× 8kg boxes (recommended) - Dispatch 48h apart - Each box uses 8kg HOT spec (7 PCM packs) - Lower risk, better frozen integrity - Customer message: "Split delivery for optimal frozen quality"
- Wait for cooler weather (<30°C)
- Hold order until forecast drops
-
Customer notified of delay
-
Proceed with extra protection
- Use 15 PCM packs (maximum)
- Mandatory logger
- Customer notification of elevated risk
- Refund guarantee if thaws
7.4 Pack Time Exceeds Target¶
If Pack Time >12 Minutes:
Immediate Actions: 1. Product has been at room temp too long 2. Check product core temp with probe 3. If >-20°C, return to freezer for 30 mins minimum 4. Re-pack with fresh PCM packs 5. Document incident
Root Cause Analysis: - Interruptions during pack? (eliminate distractions) - Pack station disorganized? (improve staging) - Unfamiliar with order? (review pack queue before starting) - Need additional training?
Prevention: - Stage all materials before removing product from freezer - No interruptions policy during pack sequence - Pack similar box sizes together (muscle memory)
7.5 Weight Variance >±5%¶
Under-Weight (>5% Low):
Critical - Do Not Dispatch: 1. Reopen box immediately 2. Verify PCM pack count against instruction 3. If PCM missing, add correct amount 4. If product missing, verify order items vs packed items 5. Re-seal and re-weigh 6. Document discrepancy
Over-Weight (>5% High):
Review But May Dispatch: 1. Excess void fill? (optimize kraft paper usage) 2. Extra PCM packs? (verify against instruction) 3. Wet PCM packs? (condensation = bad freeze, replace) 4. If >10% over, reopen and optimize
Part 8: Seasonal Adaptations¶
8.1 Phase A Seasonal Profile (March-June Launch)¶
| Month | Typical Max Temp | Expected Recipe | % of Volume | Cash CPD (12kg) |
|---|---|---|---|---|
| March | 10-14°C | COOL | 100% | £19.13-20.69 |
| April | 13-17°C | COOL 90% / STANDARD 10% | Mixed | £19.30-20.85 |
| May | 16-20°C | COOL 60% / STANDARD 40% | Mixed | £19.60-21.15 |
| June | 19-23°C | STANDARD 70% / HOT 5% | Mixed | £20.15-21.70 |
Strategy: - Launch in March (100% COOL = lowest CPD) - Build operational confidence before STANDARD season - Validate HOT protocol in June (small volume, controlled) - Seed raise timing: End of May (proven across COOL/STANDARD)
8.2 Future National Seasonal Profile (Phase C)¶
| Months | Typical Max Temp | Recommended Spec | % of Annual Volume |
|---|---|---|---|
| Dec-Feb | 5-12°C | COOL | 25% |
| Mar-May | 10-18°C | COOL | 30% |
| Jun-Aug | 18-25°C | STANDARD | 25% |
| Sep-Nov | 12-18°C | COOL | 20% |
Heatwave Exceptions: ~5% of year (3+ days ≥28°C)
Part 9: Version History & Change Log¶
v2.0 (2025-11-13) - Automated System¶
Major Changes: - ✅ Real-time weather API integration (OpenWeatherMap) - ✅ Automated PCM calculation (no manual input) - ✅ Pack-day batch processing (Tuesday/Thursday workflow) - ✅ Geographic delivery controls (whitelist + blacklist) - ✅ Quality control automation (weight variance, pack time, pass/fail) - ✅ Temperature logger feedback loop - ✅ Batch traceability for recalls - ✅ 3PL handoff requirements - ✅ v1.2 packaging spec compliance
Breaking Changes from v1.0: - Replaced manual weather input with automated API - Changed from "export triggers instruction" to "pack day triggers instruction" - Added geographic blocking (Phase A London only) - Updated PCM values to match v1.2 spec exactly
v1.0 (2024-11-12) - Manual System¶
- Initial manual packing procedures
- Static PCM recipes
- No automation
- Manual weather checks
Part 10: Quick Start Checklist¶
First Pack Day (Pre-Launch Validation)¶
Week Before: - [ ] Run OpenWeatherMap API test (verify 1000 call quota) - [ ] Bookmark pack-day-portal.html - [ ] Print QC checklists (laminate for pack station) - [ ] Calibrate scales and temperature probes - [ ] Test weight variance calculations with dummy boxes - [ ] Verify freezer temperatures (-25°C minimum) - [ ] Condition PCM packs (48h at -25°C) - [ ] Stage materials (boxes, liners, void fill, tape)
Pack Day Morning: - [ ] Verify product at -25°C (24h+ hold) - [ ] PCM packs frozen solid (squeeze test) - [ ] Open pack-day-portal.html - [ ] Click "Calculate PCM for Today's Packs" - [ ] Review pack queue (print if needed) - [ ] Stage materials for first order
Per Order: - [ ] Start timer - [ ] Verify batch cert PASS - [ ] Follow packing sequence (base → product → top PCM → void fill) - [ ] Insert logger if required - [ ] Seal and label - [ ] Stop timer - [ ] Weigh - [ ] Record quality check - [ ] Verify PASS before moving to next order
End of Pack Day: - [ ] All quality checks PASS - [ ] All weights within ±5% - [ ] All pack times <10 mins (or <12 for 16kg) - [ ] Logger mappings recorded - [ ] DPD collection confirmed - [ ] Update dispatch status (SOP-0Y)
Appendix A: Database Schema Reference¶
Key Tables¶
packing_instructions - Stores PCM requirements per order - Linked to batch_id for traceability - Created by Edge Function on pack day
pack_quality_checks - Records actual vs expected metrics - Auto-calculates pass/fail - Links to packing_instructions
temperature_logger_data - Stores post-delivery temperature readings - Auto-classifies outcome (IDEAL_PASS/ACCEPTABLE_PASS/FAIL) - Enables PCM optimization
high_risk_postcodes - Postcodes requiring >72h transit (permanently blocked) - Used for checkout validation
allowed_delivery_areas - Whitelist of deliverable postcodes (Phase A/B/C) - Enables gradual geographic expansion
Key Functions¶
calculate_pcm_requirements(box_size, temp, transit_hours) - Returns PCM mass, pack count, risk level, logger requirement - Implements v1.2 spec decision matrix
validate_postcode_for_delivery(postcode) - Returns {allowed, policy, transit_hours, message} - Used at checkout to block bad postcodes
record_pack_quality_check(...) - Inserts quality check with auto-calculations - Uses v1.2 BOM weights
insert_logger_data(...) - Parses logger readings JSON - Auto-classifies outcome per v1.2 thresholds
Key Views¶
v_pack_queue - Shows orders ready to pack with instructions - Sorted by risk level (HIGH first)
v_pack_queue_with_batch - Pack queue with batch traceability - Shows batch_code and expiry_date
v_pack_quality_with_checks - Quality checks with pass/fail calculations
Appendix B: Emergency Contacts¶
Supplier Escalation: - Woolcool (insulation): [contact info] - Hydropac (PCM): [contact info] - Box supplier: [contact info]
Courier Escalation: - DPD account manager: [contact info] - DPD customer service: [phone]
Technical Support: - Supabase status: https://status.supabase.com - OpenWeatherMap status: https://status.openweathermap.org
Document Approval¶
Prepared by: Protocol Raw Operations Team
Reviewed by: Pending
Approved by: Pending
Effective Date: 2026-03-01 (Phase A Launch)
Next Review: End of Month 3 (after 150-200 deliveries)
Summary: What You Now Have¶
✅ Automated intelligent packing system - Weather API + PCM calculation
✅ Pack-day workflow - Tuesday/Thursday batch processing
✅ Quality control - Automated pass/fail with v1.2 BOM weights
✅ Geographic controls - London Phase A, blocked Highlands/NI/Islands
✅ Temperature feedback loop - Logger data ingestion and optimization
✅ Batch traceability - Full recall capability
✅ 3PL handoff ready - Complete documentation and SLAs
✅ v1.2 spec compliant - Exact PCM values from packaging spec
Your system is production-ready for Phase A launch. 🚀
End of SOP-PACK-01 v2.0 FINAL