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
306 lines
6.5 KiB
TypeScript
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>;
|
|
}
|