This comprehensive update implements: Transport Tracking System: - Complete seed-to-seed lifecycle tracking with 9 event types - TransportChain blockchain for immutable transport records - Carbon footprint calculation per transport method - Food miles tracking with Haversine distance calculation - QR code generation for full traceability Demand Forecasting System: - Consumer preference registration and aggregation - Regional demand signal generation - Supply gap identification and market matching - Grower planting recommendations with risk assessment - Seasonal planning integration Vertical Farming Module: - Multi-zone facility management - Environmental control systems (HVAC, CO2, humidity, lighting) - Growing recipes with stage-based environment targets - Crop batch tracking with health scoring - Farm analytics generation Documentation: - Complete docs/ folder structure for Turborepo - Seed-to-seed transport concept documentation - Demand forecasting and seasonal planning guides - System architecture and user blockchain design - Transport API reference - Vertical farming integration guide Agent Report: - AGENT_REPORT.md with 5 parallel agent tasks for continued development - API routes implementation task - UI components task - Vertical farming pages task - Testing suite task - Documentation completion task
356 lines
12 KiB
Markdown
356 lines
12 KiB
Markdown
# Demand Forecasting & Seasonal Planning
|
|
|
|
LocalGreenChain's demand forecasting system enables truly demand-driven agriculture by connecting consumer preferences with grower capabilities, optimizing for seasonal availability and minimal environmental impact.
|
|
|
|
## Core Philosophy
|
|
|
|
### Traditional Agriculture Problem
|
|
|
|
```
|
|
Grower decides → Plants → Harvests → Finds buyers → Surplus/shortage
|
|
↓ ↓ ↓ ↓ ↓
|
|
Guesses Fixed plan Hope sells Waste if not Lost income
|
|
```
|
|
|
|
### LocalGreenChain Solution
|
|
|
|
```
|
|
Consumer signals → Aggregated demand → Grower recommendation → Matched harvest
|
|
↓ ↓ ↓ ↓
|
|
Preferences Regional needs Optimal planting Pre-sold produce
|
|
```
|
|
|
|
## Demand Signal Flow
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
│ DEMAND SIGNAL GENERATION │
|
|
├─────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ CONSUMER PREFERENCES │
|
|
│ ┌─────────────────┐ │
|
|
│ │ Consumer A │──┐ │
|
|
│ │ - Tomatoes: 2kg │ │ │
|
|
│ │ - Lettuce: 1kg │ │ │
|
|
│ │ - Organic only │ │ │
|
|
│ └─────────────────┘ │ │
|
|
│ ┌─────────────────┐ │ ┌─────────────────────┐ │
|
|
│ │ Consumer B │──┼─────→│ DEMAND AGGREGATOR │ │
|
|
│ │ - Tomatoes: 1kg │ │ │ │ │
|
|
│ │ - Basil: 200g │ │ │ Region: Downtown │ │
|
|
│ │ - Local pref │ │ │ Radius: 25km │ │
|
|
│ └─────────────────┘ │ │ Season: Summer │ │
|
|
│ ┌─────────────────┐ │ │ │ │
|
|
│ │ Consumer C... │──┘ │ Total Consumers: │ │
|
|
│ │ │ │ 150 │ │
|
|
│ └─────────────────┘ └──────────┬──────────┘ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ DEMAND SIGNAL │ │
|
|
│ │ │ │
|
|
│ │ Tomatoes: 180kg/wk │ │
|
|
│ │ Lettuce: 95kg/wk │ │
|
|
│ │ Basil: 15kg/wk │ │
|
|
│ │ │ │
|
|
│ │ Gap: 120kg tomatoes │ │
|
|
│ │ Status: SHORTAGE │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Consumer Preferences
|
|
|
|
### Preference Structure
|
|
|
|
```typescript
|
|
interface ConsumerPreference {
|
|
// Who
|
|
consumerId: string;
|
|
location: { latitude, longitude, maxDeliveryRadiusKm };
|
|
|
|
// What they want
|
|
preferredCategories: ['leafy_greens', 'herbs', 'nightshades'];
|
|
preferredItems: [
|
|
{ produceType: 'tomato', priority: 'must_have', weeklyQuantity: 2 },
|
|
{ produceType: 'lettuce', priority: 'preferred', weeklyQuantity: 1 },
|
|
{ produceType: 'basil', priority: 'nice_to_have' }
|
|
];
|
|
|
|
// How they want it
|
|
certificationPreferences: ['organic', 'local'];
|
|
deliveryPreferences: {
|
|
method: ['home_delivery', 'farmers_market'],
|
|
frequency: 'weekly'
|
|
};
|
|
|
|
// Constraints
|
|
householdSize: 4;
|
|
weeklyBudget: 75;
|
|
}
|
|
```
|
|
|
|
### Priority Levels
|
|
|
|
| Priority | Weight | Meaning |
|
|
|----------|--------|---------|
|
|
| must_have | 10 | Essential - will seek elsewhere if not available |
|
|
| preferred | 7 | Strong preference - important for satisfaction |
|
|
| nice_to_have | 4 | Would enjoy - not essential |
|
|
| occasional | 2 | Sometimes interested - opportunistic |
|
|
|
|
## Demand Signals
|
|
|
|
### Regional Aggregation
|
|
|
|
Demand signals aggregate preferences within a geographic region:
|
|
|
|
```typescript
|
|
interface DemandSignal {
|
|
region: { centerLat, centerLon, radiusKm, name };
|
|
seasonalPeriod: 'summer';
|
|
|
|
demandItems: [
|
|
{
|
|
produceType: 'tomato',
|
|
weeklyDemandKg: 180,
|
|
consumerCount: 95,
|
|
aggregatePriority: 8.5,
|
|
urgency: 'this_week',
|
|
inSeason: true,
|
|
matchedSupply: 60,
|
|
gapKg: 120 // Opportunity for growers!
|
|
}
|
|
];
|
|
|
|
supplyStatus: 'shortage'; // surplus | balanced | shortage | critical
|
|
}
|
|
```
|
|
|
|
### Supply Matching
|
|
|
|
The system continuously matches demand with available supply:
|
|
|
|
```
|
|
Demand: 180 kg/week tomatoes
|
|
|
|
Current Supply:
|
|
- Grower A: 30 kg committed
|
|
- Grower B: 20 kg committed
|
|
- Vertical Farm X: 10 kg committed
|
|
Total: 60 kg
|
|
|
|
Gap: 120 kg/week
|
|
|
|
→ Generate planting recommendations for growers
|
|
→ Vertical farms can respond within 6-8 weeks
|
|
→ Traditional growers plan for next season
|
|
```
|
|
|
|
## Planting Recommendations
|
|
|
|
### Recommendation Engine
|
|
|
|
```typescript
|
|
// Generate recommendations for a grower
|
|
const recommendations = forecaster.generatePlantingRecommendations(
|
|
growerId,
|
|
growerLat,
|
|
growerLon,
|
|
deliveryRadiusKm: 50,
|
|
availableSpaceSqm: 1000,
|
|
season: 'summer'
|
|
);
|
|
|
|
// Returns prioritized recommendations
|
|
[
|
|
{
|
|
produceType: 'tomato',
|
|
recommendedQuantity: 200, // sqm
|
|
expectedYieldKg: 1600,
|
|
projectedDemandKg: 480, // monthly gap
|
|
projectedPricePerKg: 4.50,
|
|
projectedRevenue: 7200,
|
|
riskFactors: [...],
|
|
explanation: "Based on 3 demand signals showing 120kg weekly gap..."
|
|
},
|
|
{
|
|
produceType: 'lettuce',
|
|
recommendedQuantity: 100,
|
|
...
|
|
}
|
|
]
|
|
```
|
|
|
|
### Risk Assessment
|
|
|
|
Each recommendation includes risk factors:
|
|
|
|
| Risk Type | Description | Mitigation |
|
|
|-----------|-------------|------------|
|
|
| weather | Outdoor crop vulnerable to conditions | Consider greenhouse |
|
|
| oversupply | Other growers may fill gap | Start smaller, scale up |
|
|
| market | Demand may shift | Diversify crops |
|
|
| pest | Known pest pressure in region | Preventive measures |
|
|
|
|
## Seasonal Planning
|
|
|
|
### Seasonal Crop Calendar
|
|
|
|
```
|
|
SPRING (Mar-May)
|
|
├── Lettuce ★★★★★
|
|
├── Spinach ★★★★★
|
|
├── Peas ★★★★☆
|
|
├── Radishes ★★★★☆
|
|
└── Carrots ★★★☆☆
|
|
|
|
SUMMER (Jun-Aug)
|
|
├── Tomatoes ★★★★★
|
|
├── Peppers ★★★★★
|
|
├── Cucumbers ★★★★☆
|
|
├── Basil ★★★★★
|
|
└── Beans ★★★★☆
|
|
|
|
FALL (Sep-Nov)
|
|
├── Kale ★★★★★
|
|
├── Broccoli ★★★★☆
|
|
├── Brussels Sprouts ★★★★☆
|
|
├── Squash ★★★★☆
|
|
└── Lettuce ★★★★★
|
|
|
|
WINTER (Dec-Feb)
|
|
├── Microgreens ★★★★★ (indoor)
|
|
├── Sprouts ★★★★★ (indoor)
|
|
├── Kale ★★★★☆
|
|
└── Spinach ★★★☆☆
|
|
|
|
★ = Demand strength in season
|
|
```
|
|
|
|
### Year-Round Planning with Vertical Farms
|
|
|
|
Vertical farms can produce year-round, filling seasonal gaps:
|
|
|
|
```
|
|
Traditional Supply: ████████████░░░░░░░░░░████████████
|
|
Vertical Farm: ████████████████████████████████████
|
|
Combined: ████████████████████████████████████
|
|
|
|
Legend: █ = Supply available, ░ = Gap
|
|
```
|
|
|
|
## Forecasting Models
|
|
|
|
### Simple Moving Average
|
|
|
|
```typescript
|
|
// Basic forecast from historical data
|
|
const forecast = history.reduce((a, b) => a + b, 0) / history.length;
|
|
```
|
|
|
|
### Seasonal Adjustment
|
|
|
|
```typescript
|
|
// Apply seasonal multiplier
|
|
const seasonalFactor = isInSeason(produceType, currentSeason) ? 1.2 : 0.6;
|
|
const adjustedForecast = baseForecast * seasonalFactor;
|
|
```
|
|
|
|
### Trend Analysis
|
|
|
|
```typescript
|
|
// Detect growing/declining interest
|
|
const trend = (latestDemand - earliestDemand) / dataPoints;
|
|
const futureDemand = currentDemand + (trend * weeksAhead);
|
|
```
|
|
|
|
## Integration Points
|
|
|
|
### With Transport System
|
|
|
|
```typescript
|
|
// Transport events update demand fulfillment
|
|
transportChain.recordEvent({
|
|
eventType: 'distribution',
|
|
batchIds: ['harvest-123'],
|
|
destinationType: 'consumer',
|
|
// Updates matched supply in demand signals
|
|
});
|
|
```
|
|
|
|
### With Vertical Farms
|
|
|
|
```typescript
|
|
// Vertical farms can respond quickly to demand signals
|
|
const gaps = demandSignal.demandItems.filter(i => i.gapKg > 0 && i.urgency === 'this_week');
|
|
|
|
for (const gap of gaps) {
|
|
if (canGrowInVerticalFarm(gap.produceType)) {
|
|
// Start batch immediately
|
|
verticalFarmController.startCropBatch(...);
|
|
}
|
|
}
|
|
```
|
|
|
|
### With Blockchain
|
|
|
|
```typescript
|
|
// All demand signals and commitments recorded on chain
|
|
plantChain.recordDemandSignal(signal);
|
|
plantChain.recordSupplyCommitment(commitment);
|
|
plantChain.recordMarketMatch(match);
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### For Consumers
|
|
|
|
1. **Set Preferences Early**: The more lead time, the better matching
|
|
2. **Be Flexible**: Mark some items as "nice to have"
|
|
3. **Accept Seasonal Variety**: In-season produce is better and cheaper
|
|
4. **Provide Feedback**: Help improve recommendations
|
|
|
|
### For Growers
|
|
|
|
1. **Register Capacity**: Let the system know what you can grow
|
|
2. **Follow Recommendations**: Data-driven planting reduces risk
|
|
3. **Commit Early**: Pre-committed supply gets priority matching
|
|
4. **Diversify**: Grow multiple crops to balance risk
|
|
|
|
### For the System
|
|
|
|
1. **Aggregate Regionally**: Local matching reduces transport
|
|
2. **Prioritize Seasonal**: In-season crops have better yields
|
|
3. **Balance Supply**: Prevent oversupply situations
|
|
4. **Learn Continuously**: Improve forecasts from actual outcomes
|
|
|
|
## Environmental Impact
|
|
|
|
### Demand-Driven Benefits
|
|
|
|
| Metric | Traditional | Demand-Driven | Savings |
|
|
|--------|-------------|---------------|---------|
|
|
| Food Waste | 30-40% | 5-10% | 75% reduction |
|
|
| Transport Miles | 1,500 avg | < 50 local | 97% reduction |
|
|
| Unsold Produce | 20% | < 5% | 75% reduction |
|
|
| Energy (storage) | High | Minimal | 80% reduction |
|
|
|
|
### Carbon Calculation
|
|
|
|
```
|
|
Traditional Tomato (California to NYC):
|
|
Growing: 0.5 kg CO2/kg
|
|
Transport: 2.0 kg CO2/kg
|
|
Storage: 0.3 kg CO2/kg
|
|
Total: 2.8 kg CO2/kg
|
|
|
|
LocalGreenChain Tomato (local vertical farm):
|
|
Growing: 0.3 kg CO2/kg
|
|
Transport: 0.02 kg CO2/kg
|
|
Storage: 0.0 kg CO2/kg
|
|
Total: 0.32 kg CO2/kg
|
|
|
|
Savings: 89% carbon reduction
|
|
```
|