Phase 8: Visitor Management - Visitor/VisitorLog/AccessZone models - Check-in/out with badge generation - Zone occupancy tracking - Kiosk and management pages Phase 9: Messaging & Communication - Announcements with priority levels - Acknowledgement tracking - Shift notes for team handoffs - AnnouncementBanner component Phase 10: Compliance & Audit Trail - Immutable AuditLog model - Document versioning and approval workflow - Acknowledgement tracking for SOPs - CSV export for audit logs Phase 11: Accessibility & i18n - WCAG 2.1 AA compliance utilities - react-i18next with EN/ES translations - User preferences context (theme, font size, etc) - High contrast and reduced motion support Phase 12: Hardware Integration - QR code generation for batches/plants/visitors - Printable label system - Visitor badge printing Phase 13: Advanced Features - Environmental monitoring (sensors, readings, alerts) - Financial tracking (transactions, P&L reports) - AI/ML insights (yield predictions, anomaly detection)
70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
import api from './api';
|
|
|
|
export interface AnalyticsOverview {
|
|
totalBatches: number;
|
|
activeBatches: number;
|
|
totalRooms: number;
|
|
tasksCompletedThisWeek: number;
|
|
tasksPending: number;
|
|
touchPointsToday: number;
|
|
totalPlants: number;
|
|
}
|
|
|
|
export interface BatchYield {
|
|
batchId: string;
|
|
batchName: string;
|
|
strain: string;
|
|
plantCount: number;
|
|
totalGrams: number;
|
|
logCount: number;
|
|
gramsPerPlant: number;
|
|
}
|
|
|
|
export interface StrainYield {
|
|
strain: string;
|
|
totalGrams: number;
|
|
totalPlants: number;
|
|
batchCount: number;
|
|
avgGramsPerPlant: number;
|
|
}
|
|
|
|
export interface YieldAnalytics {
|
|
byBatch: BatchYield[];
|
|
byStrain: StrainYield[];
|
|
}
|
|
|
|
export interface TaskSummary {
|
|
completed: number;
|
|
pending: number;
|
|
inProgress: number;
|
|
overdue: number;
|
|
total: number;
|
|
}
|
|
|
|
export interface UserTaskCompletion {
|
|
userId: string;
|
|
userName: string;
|
|
completedCount: number;
|
|
}
|
|
|
|
export interface TaskAnalytics {
|
|
summary: TaskSummary;
|
|
completedByUserThisWeek: UserTaskCompletion[];
|
|
}
|
|
|
|
export const analyticsApi = {
|
|
getOverview: async () => {
|
|
const response = await api.get<AnalyticsOverview>('/analytics/overview');
|
|
return response.data;
|
|
},
|
|
|
|
getYield: async () => {
|
|
const response = await api.get<YieldAnalytics>('/analytics/yield');
|
|
return response.data;
|
|
},
|
|
|
|
getTasks: async () => {
|
|
const response = await api.get<TaskAnalytics>('/analytics/tasks');
|
|
return response.data;
|
|
}
|
|
};
|