localgreenchain/docs/architecture/data-flow.md
Claude 4111c3acf1
Add complete documentation suite for LocalGreenChain
- 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
2025-11-22 18:48:42 +00:00

369 lines
12 KiB
Markdown

# Data Flow Architecture
Understanding how data flows through the LocalGreenChain system.
## System Overview
```
┌─────────────────────────────────────────────────────────────────────┐
│ LOCALGREENCHAIN DATA FLOW │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ INPUTS PROCESSING OUTPUTS │
│ ────── ────────── ─────── │
│ │
│ ┌─────────┐ ┌─────────────┐ ┌──────────┐ │
│ │Consumer │──preferences─│ Demand │──signals───→│ Planting │ │
│ │Prefs │ │ Forecaster │ │Recommends│ │
│ └─────────┘ └─────────────┘ └──────────┘ │
│ │ │
│ ┌─────────┐ ┌──────▼──────┐ ┌──────────┐ │
│ │Transport│──events─────→│ Transport │──journeys──→│ QR │ │
│ │Events │ │ Chain │ │ Codes │ │
│ └─────────┘ └─────────────┘ └──────────┘ │
│ │ │
│ ┌─────────┐ ┌──────▼──────┐ ┌──────────┐ │
│ │Vertical │──readings───→│ VF │──analytics─→│Dashboard │ │
│ │Farm IoT │ │ Controller │ │ │ │
│ └─────────┘ └─────────────┘ └──────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ Plant │ │
│ │ Blockchain │ │
│ └─────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ JSON/DB │ │
│ │ Storage │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
```
## Data Flow Patterns
### 1. Consumer Preference Flow
```
Consumer → Web UI → API → DemandForecaster → Storage
│ │
│ ▼
│ Aggregation
│ │
│ ▼
└────────────────── Demand Signal
Planting Recommendations
Grower Dashboard
```
### 2. Transport Event Flow
```
Grower/Transporter
API Request
├──→ Validation
├──→ Distance Calculation (Haversine)
├──→ Carbon Calculation
├──→ TransportChain.recordEvent()
│ │
│ ├──→ Create Block
│ ├──→ Mine Block (PoW)
│ ├──→ Add to Chain
│ └──→ Index Event
└──→ Response with Block Hash
```
### 3. Vertical Farm Data Flow
```
IoT Sensors
├──→ Temperature
├──→ Humidity
├──→ CO2
├──→ Light
├──→ EC/pH
API Endpoint (/api/vertical-farm/batch/{id}/environment)
VerticalFarmController.recordEnvironment()
├──→ Compare to Targets
│ │
│ ▼
│ Generate Alerts (if out of range)
├──→ Update Batch Health Score
└──→ Store in Environment Log
Analytics Generation
```
## Data Transformations
### Preference → Demand Signal
```typescript
// Input: Individual preferences
const preferences: ConsumerPreference[] = [
{ consumerId: "A", preferredItems: [{ produceType: "tomato", weeklyQuantity: 2 }] },
{ consumerId: "B", preferredItems: [{ produceType: "tomato", weeklyQuantity: 1 }] },
{ consumerId: "C", preferredItems: [{ produceType: "tomato", weeklyQuantity: 3 }] }
];
// Transformation: Aggregate by region
// Output: Demand Signal
const signal: DemandSignal = {
region: { name: "Brooklyn", radiusKm: 25 },
demandItems: [
{
produceType: "tomato",
weeklyDemandKg: 6, // Sum of individual demands
consumerCount: 3,
aggregatePriority: 8.5 // Weighted average
}
]
};
```
### Transport Events → Plant Journey
```typescript
// Input: Individual events
const events: TransportEvent[] = [
{ eventType: "seed_acquisition", plantId: "P1", distanceKm: 50 },
{ eventType: "planting", plantId: "P1", distanceKm: 0 },
{ eventType: "growing_transport", plantId: "P1", distanceKm: 5 },
{ eventType: "harvest", plantId: "P1", distanceKm: 0 },
{ eventType: "distribution", plantId: "P1", distanceKm: 20 }
];
// Transformation: Aggregate for plant
// Output: Plant Journey
const journey: PlantJourney = {
plantId: "P1",
events: events,
totalFoodMiles: 75, // Sum of distances
totalCarbonKg: 3.5, // Sum of carbon
currentStage: "post_harvest"
};
```
## Storage Architecture
### File-Based Storage (Default)
```
data/
├── plantchain.json # Main plant blockchain
│ └── { difficulty, chain: Block[] }
├── transport.json # Transport chain
│ └── { difficulty, chain: TransportBlock[] }
├── demand.json # Demand data
│ └── {
│ preferences: Map<id, Preference>,
│ signals: Map<id, Signal>,
│ supply: Map<id, Supply>,
│ matches: Map<id, Match>
│ }
└── vertical-farms.json # VF data
└── {
farms: Map<id, Farm>,
recipes: Map<id, Recipe>,
batches: Map<id, Batch>
}
```
### Database Storage (Production)
```sql
-- PostgreSQL schema (conceptual)
CREATE TABLE blocks (
index INTEGER PRIMARY KEY,
timestamp TIMESTAMPTZ,
data JSONB,
previous_hash VARCHAR(64),
hash VARCHAR(64),
nonce INTEGER
);
CREATE TABLE plants (
id VARCHAR(36) PRIMARY KEY,
common_name VARCHAR(255),
scientific_name VARCHAR(255),
location GEOGRAPHY(POINT),
owner_id VARCHAR(36),
generation INTEGER,
parent_id VARCHAR(36),
block_index INTEGER REFERENCES blocks(index)
);
CREATE TABLE transport_events (
id VARCHAR(36) PRIMARY KEY,
event_type VARCHAR(50),
plant_ids VARCHAR(36)[],
from_location GEOGRAPHY(POINT),
to_location GEOGRAPHY(POINT),
distance_km DECIMAL,
carbon_kg DECIMAL,
block_index INTEGER
);
```
## Caching Strategy
### Cache Layers
```
Request
┌─────────────────┐
│ API Response │ TTL: 60s (dynamic data)
│ Cache │ TTL: 3600s (static data)
└────────┬────────┘
│ miss
┌─────────────────┐
│ Query Cache │ Pre-computed queries
│ (Redis) │ Hot data in memory
└────────┬────────┘
│ miss
┌─────────────────┐
│ Data Store │ JSON files or Database
│ │
└─────────────────┘
```
### Cached Data
| Data Type | Cache TTL | Reason |
|-----------|-----------|--------|
| Plant details | 1 hour | Rarely changes |
| Transport journey | 5 minutes | Updates on events |
| Demand signals | 1 hour | Recalculated periodically |
| Farm analytics | 15 minutes | Computed from batches |
| Recipes | 24 hours | Static data |
## Event-Driven Updates
### Event Types
```typescript
type SystemEvent =
| { type: "plant.registered"; plantId: string }
| { type: "transport.recorded"; blockHash: string }
| { type: "batch.started"; batchId: string }
| { type: "alert.triggered"; zoneId: string; alert: EnvironmentAlert }
| { type: "harvest.completed"; batchId: string }
| { type: "supply.matched"; matchId: string };
```
### Event Flow
```
Event Source → Event Bus → Event Handlers
├──→ Cache Invalidation
├──→ Webhook Dispatch
├──→ Real-time UI Update
└──→ Analytics Update
```
## API Data Flow
### Request Lifecycle
```
Client Request
┌─────────────┐
│ Router │ Match endpoint
└──────┬──────┘
┌─────────────┐
│ Middleware │ Auth, validation, logging
└──────┬──────┘
┌─────────────┐
│ Handler │ Business logic
└──────┬──────┘
├──→ Service Layer (Forecaster, Controller, Chain)
├──→ Data Layer (Storage, Cache)
┌─────────────┐
│ Response │ Format JSON, headers
└──────┬──────┘
Client Response
```
## Real-Time Data
### WebSocket Connections
```
Client ←──WebSocket──→ Server
├── Environment readings
├── Alert notifications
├── Batch progress updates
└── Demand signal changes
```
### Polling Fallback
```typescript
// If WebSocket unavailable
const POLL_INTERVALS = {
environment: 30_000, // 30 seconds
batchProgress: 60_000, // 1 minute
demandSignals: 300_000, // 5 minutes
analytics: 900_000 // 15 minutes
};
```
## Data Integrity
### Validation Points
1. **API Input** - Schema validation (JSON Schema/Zod)
2. **Business Logic** - Domain rules enforcement
3. **Blockchain** - Hash verification
4. **Storage** - Type checking
### Consistency Guarantees
| Operation | Guarantee |
|-----------|-----------|
| Block creation | Atomic (single file write) |
| Batch operations | Transaction-like (rollback on error) |
| Cross-chain refs | Eventually consistent |
| Cache updates | Best effort (can stale) |