localgreenchain/lib/analytics/types.ts
Claude 816c3b3f2e
Implement Agent 7: Advanced Analytics Dashboard
Add comprehensive analytics system with:
- Analytics data layer (aggregator, metrics, trends, cache)
- 6 API endpoints (overview, plants, transport, farms, sustainability, export)
- 6 chart components (LineChart, BarChart, PieChart, AreaChart, Gauge, Heatmap)
- 5 dashboard widgets (KPICard, TrendIndicator, DataTable, DateRangePicker, FilterPanel)
- 5 dashboard pages (overview, plants, transport, farms, sustainability)
- Export functionality (CSV, JSON)

Dependencies added: recharts, d3, date-fns

Also includes minor fixes:
- Fix EnvironmentalForm spread type error
- Fix AgentOrchestrator Map iteration issues
- Fix next.config.js image domains undefined error
- Add downlevelIteration to tsconfig
2025-11-23 04:02:07 +00:00

306 lines
6.5 KiB
TypeScript

/**
* Analytics Types for LocalGreenChain
* Defines all types for the Advanced Analytics Dashboard
*/
// Time range options for analytics queries
export type TimeRange = '7d' | '30d' | '90d' | '365d' | 'all';
export interface DateRange {
start: Date;
end: Date;
}
// Generic data point for time series
export interface TimeSeriesDataPoint {
timestamp: string;
value: number;
label?: string;
}
// Analytics overview metrics
export interface AnalyticsOverview {
totalPlants: number;
plantsRegisteredToday: number;
plantsRegisteredThisWeek: number;
plantsRegisteredThisMonth: number;
totalTransportEvents: number;
totalCarbonKg: number;
totalFoodMiles: number;
activeUsers: number;
growthRate: number;
trendsData: TrendData[];
}
// Trend direction indicator
export type TrendDirection = 'up' | 'down' | 'stable';
export interface TrendData {
metric: string;
currentValue: number;
previousValue: number;
change: number;
changePercent: number;
direction: TrendDirection;
period: string;
}
// Plant analytics
export interface PlantAnalytics {
totalPlants: number;
plantsBySpecies: SpeciesDistribution[];
plantsByGeneration: GenerationDistribution[];
registrationsTrend: TimeSeriesDataPoint[];
averageLineageDepth: number;
topGrowers: GrowerStats[];
recentRegistrations: PlantRegistration[];
}
export interface SpeciesDistribution {
species: string;
count: number;
percentage: number;
trend: TrendDirection;
}
export interface GenerationDistribution {
generation: number;
count: number;
percentage: number;
}
export interface GrowerStats {
userId: string;
name: string;
totalPlants: number;
totalSpecies: number;
averageGeneration: number;
}
export interface PlantRegistration {
id: string;
name: string;
species: string;
registeredAt: string;
generation: number;
}
// Transport analytics
export interface TransportAnalytics {
totalEvents: number;
totalDistanceKm: number;
totalCarbonKg: number;
carbonSavedKg: number;
eventsByType: TransportEventDistribution[];
eventsByMethod: TransportMethodDistribution[];
dailyStats: DailyTransportStats[];
averageDistancePerEvent: number;
mostEfficientRoutes: EfficientRoute[];
carbonTrend: TimeSeriesDataPoint[];
}
export interface TransportEventDistribution {
eventType: string;
count: number;
percentage: number;
carbonKg: number;
}
export interface TransportMethodDistribution {
method: string;
count: number;
percentage: number;
distanceKm: number;
carbonKg: number;
efficiency: number;
}
export interface DailyTransportStats {
date: string;
eventCount: number;
distanceKm: number;
carbonKg: number;
}
export interface EfficientRoute {
from: string;
to: string;
method: string;
distanceKm: number;
carbonKg: number;
frequency: number;
}
// Vertical farm analytics
export interface FarmAnalytics {
totalFarms: number;
totalZones: number;
activeBatches: number;
completedBatches: number;
averageYieldKg: number;
resourceUsage: ResourceUsageStats;
performanceByZone: ZonePerformance[];
batchCompletionTrend: TimeSeriesDataPoint[];
yieldPredictions: YieldPrediction[];
topPerformingCrops: CropPerformance[];
}
export interface ResourceUsageStats {
waterLiters: number;
energyKwh: number;
nutrientsKg: number;
waterEfficiency: number;
energyEfficiency: number;
}
export interface ZonePerformance {
zoneId: string;
zoneName: string;
currentCrop: string;
healthScore: number;
yieldKg: number;
efficiency: number;
}
export interface YieldPrediction {
cropType: string;
predictedYieldKg: number;
confidence: number;
harvestDate: string;
}
export interface CropPerformance {
cropType: string;
averageYieldKg: number;
growthDays: number;
successRate: number;
batches: number;
}
// Sustainability analytics
export interface SustainabilityAnalytics {
overallScore: number;
carbonFootprint: CarbonMetrics;
foodMiles: FoodMilesMetrics;
waterUsage: WaterMetrics;
localProduction: LocalProductionMetrics;
goals: SustainabilityGoal[];
trends: SustainabilityTrend[];
}
export interface CarbonMetrics {
totalEmittedKg: number;
totalSavedKg: number;
netImpactKg: number;
reductionPercentage: number;
equivalentTrees: number;
monthlyTrend: TimeSeriesDataPoint[];
}
export interface FoodMilesMetrics {
totalMiles: number;
averageMilesPerPlant: number;
savedMiles: number;
localPercentage: number;
monthlyTrend: TimeSeriesDataPoint[];
}
export interface WaterMetrics {
totalUsedLiters: number;
savedLiters: number;
efficiencyScore: number;
perKgProduce: number;
}
export interface LocalProductionMetrics {
localCount: number;
totalCount: number;
percentage: number;
trend: TrendDirection;
}
export interface SustainabilityGoal {
id: string;
name: string;
target: number;
current: number;
unit: string;
progress: number;
deadline: string;
status: 'on_track' | 'at_risk' | 'behind';
}
export interface SustainabilityTrend {
metric: string;
values: TimeSeriesDataPoint[];
}
// Export options
export interface ExportOptions {
format: 'csv' | 'pdf' | 'json';
dateRange: DateRange;
sections: string[];
includeCharts: boolean;
}
export interface ExportResult {
filename: string;
mimeType: string;
data: string;
generatedAt: string;
}
// Dashboard configuration
export interface DashboardConfig {
refreshInterval: number;
defaultTimeRange: TimeRange;
visibleWidgets: string[];
layout: 'grid' | 'list';
}
// KPI Card configuration
export interface KPICardData {
id: string;
title: string;
value: number | string;
unit?: string;
change?: number;
changePercent?: number;
trend: TrendDirection;
color: 'green' | 'blue' | 'purple' | 'orange' | 'red' | 'teal';
icon?: string;
}
// Chart configuration
export interface ChartConfig {
title: string;
type: 'line' | 'bar' | 'pie' | 'area' | 'heatmap' | 'gauge';
data: any[];
xKey?: string;
yKey?: string;
colors?: string[];
showLegend?: boolean;
showGrid?: boolean;
height?: number;
}
// Filter state for analytics
export interface AnalyticsFilters {
timeRange: TimeRange;
dateRange?: DateRange;
species?: string[];
regions?: string[];
transportMethods?: string[];
farmIds?: string[];
}
// Aggregation types
export type AggregationType = 'sum' | 'avg' | 'min' | 'max' | 'count';
export type GroupByPeriod = 'hour' | 'day' | 'week' | 'month' | 'year';
export interface AggregationConfig {
metric: string;
aggregation: AggregationType;
groupBy?: GroupByPeriod;
filters?: Record<string, any>;
}