- Add guides: quick-start, installation, configuration, grower, consumer, transport, vertical-farm - Add API references: REST, demand, vertical-farming - Add concepts: blockchain, seasonal-planning, carbon-footprint - Add architecture: data-flow, transport-tracking - Add vertical-farming: environmental-control, automation, integration - Add examples: seed-to-harvest, demand-driven-planting, vertical-farm-setup Completes Agent_5 documentation tasks from AGENT_REPORT.md
471 lines
8.3 KiB
Markdown
471 lines
8.3 KiB
Markdown
# Demand API Reference
|
|
|
|
Complete API reference for the LocalGreenChain Demand Forecasting system.
|
|
|
|
## Overview
|
|
|
|
The Demand API enables demand-driven agriculture by:
|
|
- Capturing consumer preferences
|
|
- Aggregating regional demand signals
|
|
- Generating planting recommendations
|
|
- Matching supply with demand
|
|
|
|
---
|
|
|
|
## Consumer Preferences
|
|
|
|
### Register Preferences
|
|
|
|
```http
|
|
POST /api/demand/preferences
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"consumerId": "consumer-123",
|
|
|
|
"location": {
|
|
"latitude": 40.7128,
|
|
"longitude": -74.0060,
|
|
"maxDeliveryRadiusKm": 25,
|
|
"city": "Brooklyn",
|
|
"region": "New York"
|
|
},
|
|
|
|
"dietaryType": ["vegetarian"],
|
|
"allergies": ["peanuts"],
|
|
"dislikes": ["cilantro"],
|
|
|
|
"preferredCategories": [
|
|
"leafy_greens",
|
|
"herbs",
|
|
"nightshades"
|
|
],
|
|
|
|
"preferredItems": [
|
|
{
|
|
"produceType": "tomato",
|
|
"category": "nightshades",
|
|
"priority": "must_have",
|
|
"weeklyQuantity": 2,
|
|
"unit": "kg",
|
|
"seasonalOnly": true
|
|
},
|
|
{
|
|
"produceType": "basil",
|
|
"category": "herbs",
|
|
"priority": "preferred",
|
|
"weeklyQuantity": 0.1
|
|
}
|
|
],
|
|
|
|
"certificationPreferences": ["organic", "local"],
|
|
"freshnessImportance": 5,
|
|
"priceImportance": 3,
|
|
"sustainabilityImportance": 5,
|
|
|
|
"deliveryPreferences": {
|
|
"method": ["home_delivery", "farmers_market"],
|
|
"frequency": "weekly",
|
|
"preferredDays": ["saturday"]
|
|
},
|
|
|
|
"householdSize": 4,
|
|
"weeklyBudget": 75,
|
|
"currency": "USD"
|
|
}
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"consumerId": "consumer-123",
|
|
"createdAt": "2024-06-01T10:00:00Z",
|
|
"updatedAt": "2024-06-01T10:00:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Preferences
|
|
|
|
```http
|
|
GET /api/demand/preferences/{consumerId}
|
|
```
|
|
|
|
### Update Preferences
|
|
|
|
```http
|
|
PUT /api/demand/preferences/{consumerId}
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"preferredItems": [...]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Demand Signals
|
|
|
|
### Generate Demand Signal
|
|
|
|
Aggregate demand for a region:
|
|
|
|
```http
|
|
POST /api/demand/signal
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"centerLat": 40.7128,
|
|
"centerLon": -74.0060,
|
|
"radiusKm": 25,
|
|
"regionName": "Brooklyn",
|
|
"season": "summer"
|
|
}
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"id": "demand-abc123",
|
|
"timestamp": "2024-06-01T10:00:00Z",
|
|
|
|
"region": {
|
|
"centerLat": 40.7128,
|
|
"centerLon": -74.0060,
|
|
"radiusKm": 25,
|
|
"name": "Brooklyn"
|
|
},
|
|
|
|
"periodStart": "2024-06-01T00:00:00Z",
|
|
"periodEnd": "2024-06-08T00:00:00Z",
|
|
"seasonalPeriod": "summer",
|
|
|
|
"demandItems": [
|
|
{
|
|
"produceType": "tomato",
|
|
"category": "nightshades",
|
|
"weeklyDemandKg": 180,
|
|
"monthlyDemandKg": 720,
|
|
"consumerCount": 95,
|
|
"aggregatePriority": 8,
|
|
"urgency": "this_week",
|
|
"preferredCertifications": ["organic"],
|
|
"averageWillingPrice": 4.50,
|
|
"priceUnit": "per_kg",
|
|
"inSeason": true,
|
|
"matchedSupply": 60,
|
|
"matchedGrowers": 5,
|
|
"gapKg": 120
|
|
}
|
|
],
|
|
|
|
"totalConsumers": 150,
|
|
"totalWeeklyDemandKg": 450,
|
|
"confidenceLevel": 85,
|
|
"currentSupplyKg": 180,
|
|
"supplyGapKg": 270,
|
|
"supplyStatus": "shortage"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Demand Signal
|
|
|
|
```http
|
|
GET /api/demand/signal/{signalId}
|
|
```
|
|
|
|
### Query Demand Signals
|
|
|
|
```http
|
|
GET /api/demand/signal?lat=40.7128&lon=-74.0060&radius=50&season=summer
|
|
```
|
|
|
|
---
|
|
|
|
## Planting Recommendations
|
|
|
|
### Get Recommendations
|
|
|
|
```http
|
|
GET /api/demand/recommendations
|
|
?growerId=grower-123
|
|
&lat=40.7128
|
|
&lon=-74.0060
|
|
&deliveryRadiusKm=50
|
|
&availableSpaceSqm=500
|
|
&season=summer
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"recommendations": [
|
|
{
|
|
"id": "rec-abc123",
|
|
"timestamp": "2024-06-01T10:00:00Z",
|
|
"growerId": "grower-123",
|
|
|
|
"produceType": "tomato",
|
|
"variety": null,
|
|
"category": "nightshades",
|
|
|
|
"recommendedQuantity": 200,
|
|
"quantityUnit": "sqm",
|
|
"expectedYieldKg": 1600,
|
|
"yieldConfidence": 75,
|
|
|
|
"plantByDate": "2024-06-05T00:00:00Z",
|
|
"expectedHarvestStart": "2024-08-15T00:00:00Z",
|
|
"expectedHarvestEnd": "2024-09-05T00:00:00Z",
|
|
"growingDays": 80,
|
|
|
|
"projectedDemandKg": 480,
|
|
"projectedPricePerKg": 4.50,
|
|
"projectedRevenue": 7200,
|
|
"marketConfidence": 85,
|
|
|
|
"riskFactors": [
|
|
{
|
|
"type": "weather",
|
|
"severity": "medium",
|
|
"description": "Single season crop with weather sensitivity",
|
|
"mitigationSuggestion": "Consider greenhouse growing"
|
|
}
|
|
],
|
|
"overallRisk": "medium",
|
|
|
|
"demandSignalIds": ["demand-abc123"],
|
|
"explanation": "Based on 1 demand signal showing 120kg weekly gap..."
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Demand Forecasts
|
|
|
|
### Get Forecast
|
|
|
|
```http
|
|
GET /api/demand/forecast
|
|
?region=Brooklyn
|
|
&weeks=12
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"id": "forecast-abc123",
|
|
"generatedAt": "2024-06-01T10:00:00Z",
|
|
"region": "Brooklyn",
|
|
|
|
"forecastPeriod": {
|
|
"start": "2024-06-01T00:00:00Z",
|
|
"end": "2024-08-24T00:00:00Z"
|
|
},
|
|
|
|
"forecasts": [
|
|
{
|
|
"produceType": "tomato",
|
|
"category": "nightshades",
|
|
"predictedDemandKg": 2400,
|
|
"confidenceInterval": {
|
|
"low": 1680,
|
|
"high": 3120
|
|
},
|
|
"confidence": 75,
|
|
"trend": "increasing",
|
|
"trendStrength": 65,
|
|
"seasonalFactor": 1.2,
|
|
"predictedPricePerKg": 4.50,
|
|
"factors": [
|
|
{
|
|
"name": "Seasonal adjustment",
|
|
"type": "seasonal",
|
|
"impact": 20,
|
|
"description": "In season - higher demand expected"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
|
|
"modelVersion": "1.0.0",
|
|
"dataPointsUsed": 45,
|
|
"lastTrainingDate": "2024-06-01T00:00:00Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Supply Commitments
|
|
|
|
### Register Supply
|
|
|
|
```http
|
|
POST /api/demand/supply
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"growerId": "grower-123",
|
|
"produceType": "tomato",
|
|
"variety": "Cherokee Purple",
|
|
|
|
"committedQuantityKg": 400,
|
|
"availableFrom": "2024-08-01T00:00:00Z",
|
|
"availableUntil": "2024-09-30T00:00:00Z",
|
|
|
|
"pricePerKg": 4.50,
|
|
"currency": "USD",
|
|
"minimumOrderKg": 2,
|
|
"bulkDiscountThreshold": 10,
|
|
"bulkDiscountPercent": 10,
|
|
|
|
"certifications": ["organic"],
|
|
"freshnessGuaranteeHours": 24,
|
|
|
|
"deliveryRadiusKm": 50,
|
|
"deliveryMethods": ["grower_delivery", "farmers_market"]
|
|
}
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"id": "supply-abc123",
|
|
"status": "available",
|
|
"remainingKg": 400
|
|
}
|
|
}
|
|
```
|
|
|
|
### Get Supply Commitment
|
|
|
|
```http
|
|
GET /api/demand/supply/{supplyId}
|
|
```
|
|
|
|
### Update Supply
|
|
|
|
```http
|
|
PUT /api/demand/supply/{supplyId}
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"remainingKg": 350,
|
|
"status": "partially_committed"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Market Matching
|
|
|
|
### Create Match
|
|
|
|
```http
|
|
POST /api/demand/match
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"demandSignalId": "demand-abc123",
|
|
"supplyCommitmentId": "supply-abc123",
|
|
"consumerId": "consumer-123",
|
|
"growerId": "grower-123",
|
|
|
|
"produceType": "tomato",
|
|
"matchedQuantityKg": 2,
|
|
|
|
"agreedPricePerKg": 4.50,
|
|
"totalPrice": 9.00,
|
|
"currency": "USD",
|
|
|
|
"deliveryDate": "2024-08-03T00:00:00Z",
|
|
"deliveryMethod": "home_delivery",
|
|
"deliveryLocation": {
|
|
"latitude": 40.7128,
|
|
"longitude": -74.0060,
|
|
"address": "123 Main St, Brooklyn, NY"
|
|
}
|
|
}
|
|
```
|
|
|
|
Response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"id": "match-abc123",
|
|
"status": "pending"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Update Match Status
|
|
|
|
```http
|
|
PUT /api/demand/match/{matchId}
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"status": "confirmed"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Enums
|
|
|
|
### Priority Levels
|
|
|
|
```typescript
|
|
type Priority = 'must_have' | 'preferred' | 'nice_to_have' | 'occasional';
|
|
```
|
|
|
|
### Produce Categories
|
|
|
|
```typescript
|
|
type ProduceCategory =
|
|
| 'leafy_greens' | 'root_vegetables' | 'nightshades'
|
|
| 'brassicas' | 'alliums' | 'legumes' | 'squash'
|
|
| 'herbs' | 'microgreens' | 'sprouts' | 'mushrooms'
|
|
| 'fruits' | 'berries' | 'citrus' | 'tree_fruits'
|
|
| 'melons' | 'edible_flowers';
|
|
```
|
|
|
|
### Urgency Levels
|
|
|
|
```typescript
|
|
type Urgency = 'immediate' | 'this_week' | 'this_month' | 'next_season';
|
|
```
|
|
|
|
### Supply Status
|
|
|
|
```typescript
|
|
type SupplyStatus = 'surplus' | 'balanced' | 'shortage' | 'critical';
|
|
```
|
|
|
|
### Match Status
|
|
|
|
```typescript
|
|
type MatchStatus = 'pending' | 'confirmed' | 'in_transit' | 'delivered' | 'completed' | 'cancelled';
|
|
```
|