@deepintel-ltd/farmpro-contracts 1.5.8 → 1.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/index.js +50 -92
  2. package/dist/routes/admin.routes.js +13 -16
  3. package/dist/routes/agent-workflows.routes.js +81 -84
  4. package/dist/routes/agents.routes.js +29 -32
  5. package/dist/routes/analytics.routes.js +11 -14
  6. package/dist/routes/auth.routes.js +55 -58
  7. package/dist/routes/categories.routes.js +23 -26
  8. package/dist/routes/documents.routes.js +67 -70
  9. package/dist/routes/equipment.routes.js +55 -58
  10. package/dist/routes/farms.routes.js +32 -35
  11. package/dist/routes/field-monitoring.routes.d.ts +8 -1
  12. package/dist/routes/field-monitoring.routes.d.ts.map +1 -1
  13. package/dist/routes/field-monitoring.routes.js +77 -74
  14. package/dist/routes/field-observations.routes.js +41 -44
  15. package/dist/routes/fields.routes.js +44 -47
  16. package/dist/routes/finance.routes.js +121 -124
  17. package/dist/routes/harvest.routes.js +46 -49
  18. package/dist/routes/health.routes.js +6 -9
  19. package/dist/routes/index.js +51 -54
  20. package/dist/routes/input-usage.routes.js +14 -17
  21. package/dist/routes/inventory.routes.js +57 -60
  22. package/dist/routes/seasonal-plans.routes.js +14 -17
  23. package/dist/routes/soil-tests.routes.js +45 -48
  24. package/dist/routes/suppliers.routes.js +70 -73
  25. package/dist/routes/tasks.routes.js +65 -68
  26. package/dist/routes/team.routes.d.ts +306 -0
  27. package/dist/routes/team.routes.d.ts.map +1 -1
  28. package/dist/routes/team.routes.js +79 -60
  29. package/dist/routes/users.routes.js +13 -16
  30. package/dist/routes/weather.routes.js +10 -13
  31. package/dist/schemas/admin.schemas.js +43 -46
  32. package/dist/schemas/agent-workflows.schemas.js +34 -37
  33. package/dist/schemas/agents.schemas.js +46 -49
  34. package/dist/schemas/analytics.schemas.js +51 -54
  35. package/dist/schemas/auth.schemas.js +96 -99
  36. package/dist/schemas/categories.schemas.js +27 -30
  37. package/dist/schemas/common.schemas.js +89 -95
  38. package/dist/schemas/documents.schemas.js +59 -62
  39. package/dist/schemas/equipment.schemas.js +86 -89
  40. package/dist/schemas/farms.schemas.js +40 -43
  41. package/dist/schemas/field-monitoring.schemas.js +207 -210
  42. package/dist/schemas/field-observations.schemas.js +93 -96
  43. package/dist/schemas/fields.schemas.js +82 -85
  44. package/dist/schemas/finance.schemas.js +134 -137
  45. package/dist/schemas/harvest.schemas.js +46 -49
  46. package/dist/schemas/health.schemas.js +14 -17
  47. package/dist/schemas/input-usage.schemas.js +21 -24
  48. package/dist/schemas/inventory.schemas.js +58 -61
  49. package/dist/schemas/recommendations.schemas.js +22 -25
  50. package/dist/schemas/seasonal-plans.schemas.js +21 -24
  51. package/dist/schemas/soil-tests.schemas.js +70 -73
  52. package/dist/schemas/suppliers.schemas.js +90 -93
  53. package/dist/schemas/tasks.schemas.js +93 -96
  54. package/dist/schemas/team.schemas.js +35 -38
  55. package/dist/schemas/users.schemas.js +19 -22
  56. package/dist/schemas/weather.schemas.js +32 -35
  57. package/package.json +9 -1
@@ -1,63 +1,60 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.autonomousMonitoringStatsResponseSchema = exports.autonomousMonitoringStatsResourceSchema = exports.autonomousMonitoringStatsAttributesSchema = exports.learnedPatternSchema = exports.effectivenessSchema = exports.crossSourceMatchSchema = exports.sourceStatsSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { createJsonApiResourceSchema, jsonApiSingleResponseSchema, } from './common.schemas';
6
3
  /**
7
4
  * Admin schemas for autonomous monitoring analytics
8
5
  */
9
6
  // Source statistics
10
- exports.sourceStatsSchema = zod_1.z.object({
11
- recommendations: zod_1.z.number(),
12
- tasksCreated: zod_1.z.number(),
13
- tasksUpdated: zod_1.z.number(),
14
- skipped: zod_1.z.number(),
15
- avgConfidence: zod_1.z.number(),
16
- tasksCompleted: zod_1.z.number().optional(),
17
- successfulOutcomes: zod_1.z.number().optional(),
18
- successRate: zod_1.z.number().optional(),
7
+ export const sourceStatsSchema = z.object({
8
+ recommendations: z.number(),
9
+ tasksCreated: z.number(),
10
+ tasksUpdated: z.number(),
11
+ skipped: z.number(),
12
+ avgConfidence: z.number(),
13
+ tasksCompleted: z.number().optional(),
14
+ successfulOutcomes: z.number().optional(),
15
+ successRate: z.number().optional(),
19
16
  });
20
17
  // Cross-source match
21
- exports.crossSourceMatchSchema = zod_1.z.object({
22
- issueType: zod_1.z.string(),
23
- sources: zod_1.z.array(zod_1.z.string()),
24
- occurrences: zod_1.z.number(),
25
- tasksCreated: zod_1.z.number(),
26
- deduplicationRate: zod_1.z.number(),
18
+ export const crossSourceMatchSchema = z.object({
19
+ issueType: z.string(),
20
+ sources: z.array(z.string()),
21
+ occurrences: z.number(),
22
+ tasksCreated: z.number(),
23
+ deduplicationRate: z.number(),
27
24
  });
28
25
  // Effectiveness metrics
29
- exports.effectivenessSchema = zod_1.z.object({
30
- tasksCompleted: zod_1.z.number(),
31
- successfulOutcomes: zod_1.z.number(),
32
- successRate: zod_1.z.number(),
33
- avgImprovementScore: zod_1.z.number(),
26
+ export const effectivenessSchema = z.object({
27
+ tasksCompleted: z.number(),
28
+ successfulOutcomes: z.number(),
29
+ successRate: z.number(),
30
+ avgImprovementScore: z.number(),
34
31
  });
35
32
  // Learned pattern
36
- exports.learnedPatternSchema = zod_1.z.object({
37
- issueType: zod_1.z.string(),
38
- bestSource: zod_1.z.string(),
39
- bestSourceScore: zod_1.z.number(),
40
- worstSource: zod_1.z.string(),
41
- worstSourceScore: zod_1.z.number(),
33
+ export const learnedPatternSchema = z.object({
34
+ issueType: z.string(),
35
+ bestSource: z.string(),
36
+ bestSourceScore: z.number(),
37
+ worstSource: z.string(),
38
+ worstSourceScore: z.number(),
42
39
  });
43
40
  // Autonomous monitoring stats attributes
44
- exports.autonomousMonitoringStatsAttributesSchema = zod_1.z.object({
45
- overall: zod_1.z.object({
46
- totalRecommendations: zod_1.z.number(),
47
- tasksCreated: zod_1.z.number(),
48
- tasksUpdated: zod_1.z.number(),
49
- skipped: zod_1.z.number(),
50
- deduplicationRate: zod_1.z.number(),
41
+ export const autonomousMonitoringStatsAttributesSchema = z.object({
42
+ overall: z.object({
43
+ totalRecommendations: z.number(),
44
+ tasksCreated: z.number(),
45
+ tasksUpdated: z.number(),
46
+ skipped: z.number(),
47
+ deduplicationRate: z.number(),
51
48
  }),
52
- bySource: zod_1.z.record(zod_1.z.string(), exports.sourceStatsSchema),
53
- crossSourceMatches: zod_1.z.array(exports.crossSourceMatchSchema),
54
- effectiveness: zod_1.z.record(zod_1.z.string(), exports.effectivenessSchema),
55
- learnedPatterns: zod_1.z.object({
56
- totalPatterns: zod_1.z.number(),
57
- patterns: zod_1.z.array(exports.learnedPatternSchema),
49
+ bySource: z.record(z.string(), sourceStatsSchema),
50
+ crossSourceMatches: z.array(crossSourceMatchSchema),
51
+ effectiveness: z.record(z.string(), effectivenessSchema),
52
+ learnedPatterns: z.object({
53
+ totalPatterns: z.number(),
54
+ patterns: z.array(learnedPatternSchema),
58
55
  }),
59
56
  });
60
57
  // Resource schema
61
- exports.autonomousMonitoringStatsResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('autonomous-monitoring-stats', exports.autonomousMonitoringStatsAttributesSchema);
58
+ export const autonomousMonitoringStatsResourceSchema = createJsonApiResourceSchema('autonomous-monitoring-stats', autonomousMonitoringStatsAttributesSchema);
62
59
  // Response schema
63
- exports.autonomousMonitoringStatsResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.autonomousMonitoringStatsResourceSchema);
60
+ export const autonomousMonitoringStatsResponseSchema = jsonApiSingleResponseSchema(autonomousMonitoringStatsResourceSchema);
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.agentWorkflowListResponseSchema = exports.agentWorkflowResponseSchema = exports.agentWorkflowResourceSchema = exports.agentWorkflowAttributesSchema = exports.agentResultsSchema = exports.agentRecommendationResultSchema = exports.recommendationOutcomeSchema = exports.workflowOutcomeSchema = exports.agentWorkflowStatusSchema = void 0;
4
- const zod_1 = require("zod");
5
- const recommendations_schemas_1 = require("./recommendations.schemas");
6
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { recommendationSchema } from './recommendations.schemas';
3
+ import { createJsonApiResourceSchema, jsonApiSingleResponseSchema, jsonApiCollectionResponseSchema, timestampsSchema, } from './common.schemas';
7
4
  /**
8
5
  * Agent Workflow Schemas
9
6
  *
@@ -12,59 +9,59 @@ const common_schemas_1 = require("./common.schemas");
12
9
  * process of turning a recommendation into a task.
13
10
  */
14
11
  // The overall status of an agent workflow
15
- exports.agentWorkflowStatusSchema = zod_1.z.enum([
12
+ export const agentWorkflowStatusSchema = z.enum([
16
13
  'in_progress',
17
14
  'completed',
18
15
  'failed',
19
16
  ]);
20
17
  // The final outcome of a recommendation-to-task workflow
21
- exports.workflowOutcomeSchema = zod_1.z.enum([
18
+ export const workflowOutcomeSchema = z.enum([
22
19
  'task_created',
23
20
  'task_updated',
24
21
  'no_action_needed',
25
22
  'error',
26
23
  ]);
27
24
  // The outcome for a single recommendation within a workflow
28
- exports.recommendationOutcomeSchema = zod_1.z.enum([
25
+ export const recommendationOutcomeSchema = z.enum([
29
26
  'created',
30
27
  'updated',
31
28
  'skipped',
32
29
  'error',
33
30
  ]);
34
31
  // Result for a single recommendation processed by the agent
35
- exports.agentRecommendationResultSchema = zod_1.z.object({
36
- recommendation: recommendations_schemas_1.recommendationSchema,
37
- outcome: exports.recommendationOutcomeSchema,
38
- taskId: zod_1.z.string().uuid().optional(),
39
- reason: zod_1.z.string(),
32
+ export const agentRecommendationResultSchema = z.object({
33
+ recommendation: recommendationSchema,
34
+ outcome: recommendationOutcomeSchema,
35
+ taskId: z.string().uuid().optional(),
36
+ reason: z.string(),
40
37
  });
41
38
  // The `agentResults` object that will be stored as JSON in the database
42
- exports.agentResultsSchema = zod_1.z.object({
43
- summary: zod_1.z.object({
44
- sourceType: zod_1.z.string(),
45
- tasksCreated: zod_1.z.number().int(),
46
- tasksUpdated: zod_1.z.number().int(),
47
- skipped: zod_1.z.number().int(),
39
+ export const agentResultsSchema = z.object({
40
+ summary: z.object({
41
+ sourceType: z.string(),
42
+ tasksCreated: z.number().int(),
43
+ tasksUpdated: z.number().int(),
44
+ skipped: z.number().int(),
48
45
  }),
49
- results: zod_1.z.array(exports.agentRecommendationResultSchema),
46
+ results: z.array(agentRecommendationResultSchema),
50
47
  // Optionally include other agent reviews for full traceability
51
- taskReview: zod_1.z.any().optional(),
48
+ taskReview: z.any().optional(),
52
49
  });
53
50
  // The main attributes for an AgentWorkflow record
54
- exports.agentWorkflowAttributesSchema = zod_1.z.object({
55
- workflowType: zod_1.z.literal('recommendation_to_task'),
56
- triggerEvent: zod_1.z.string(), // e.g., 'observation.analysis.completed'
57
- triggerId: zod_1.z.string(), // ID of the observation, alert, etc.
58
- fieldId: zod_1.z.string().uuid(),
59
- farmId: zod_1.z.string().uuid(),
60
- status: exports.agentWorkflowStatusSchema,
61
- outcome: exports.workflowOutcomeSchema.nullable(),
62
- agentResults: exports.agentResultsSchema.nullable(),
63
- errorMessage: zod_1.z.string().nullable(),
64
- completedAt: zod_1.z.date().nullable(),
65
- }).merge(common_schemas_1.timestampsSchema);
51
+ export const agentWorkflowAttributesSchema = z.object({
52
+ workflowType: z.literal('recommendation_to_task'),
53
+ triggerEvent: z.string(), // e.g., 'observation.analysis.completed'
54
+ triggerId: z.string(), // ID of the observation, alert, etc.
55
+ fieldId: z.string().uuid(),
56
+ farmId: z.string().uuid(),
57
+ status: agentWorkflowStatusSchema,
58
+ outcome: workflowOutcomeSchema.nullable(),
59
+ agentResults: agentResultsSchema.nullable(),
60
+ errorMessage: z.string().nullable(),
61
+ completedAt: z.date().nullable(),
62
+ }).merge(timestampsSchema);
66
63
  // JSON:API resource schemas
67
- exports.agentWorkflowResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('agent-workflows', exports.agentWorkflowAttributesSchema);
64
+ export const agentWorkflowResourceSchema = createJsonApiResourceSchema('agent-workflows', agentWorkflowAttributesSchema);
68
65
  // Response schemas
69
- exports.agentWorkflowResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.agentWorkflowResourceSchema);
70
- exports.agentWorkflowListResponseSchema = (0, common_schemas_1.jsonApiCollectionResponseSchema)(exports.agentWorkflowResourceSchema);
66
+ export const agentWorkflowResponseSchema = jsonApiSingleResponseSchema(agentWorkflowResourceSchema);
67
+ export const agentWorkflowListResponseSchema = jsonApiCollectionResponseSchema(agentWorkflowResourceSchema);
@@ -1,77 +1,74 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.conversationListResponseSchema = exports.conversationListResourceSchema = exports.conversationListAttributesSchema = exports.conversationListItemSchema = exports.conversationHistoryResponseSchema = exports.conversationHistoryResourceSchema = exports.conversationHistoryAttributesSchema = exports.conversationHistoryMessageSchema = exports.agentChatResponseSchema = exports.agentChatResponseResourceSchema = exports.agentChatResponseAttributesSchema = exports.chatRequestSchema = exports.chatRequestAttributesSchema = exports.toolCallResultSchema = exports.conversationMessageSchema = exports.messageRoleSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { createJsonApiResourceSchema, jsonApiSingleResponseSchema, } from './common.schemas';
6
3
  /**
7
4
  * Agents schemas - JSON:API compliant
8
5
  */
9
6
  // Conversation message role enum
10
- exports.messageRoleSchema = zod_1.z.enum(['user', 'assistant']);
7
+ export const messageRoleSchema = z.enum(['user', 'assistant']);
11
8
  // Conversation message schema
12
- exports.conversationMessageSchema = zod_1.z.object({
13
- role: exports.messageRoleSchema,
14
- content: zod_1.z.string().min(1),
9
+ export const conversationMessageSchema = z.object({
10
+ role: messageRoleSchema,
11
+ content: z.string().min(1),
15
12
  });
16
13
  // Tool call result schema
17
- exports.toolCallResultSchema = zod_1.z.object({
18
- tool: zod_1.z.string(),
19
- result: zod_1.z.unknown(), // Tool results can be any shape
14
+ export const toolCallResultSchema = z.object({
15
+ tool: z.string(),
16
+ result: z.unknown(), // Tool results can be any shape
20
17
  });
21
18
  // Chat request attributes schema
22
- exports.chatRequestAttributesSchema = zod_1.z.object({
23
- message: zod_1.z.string().min(1).max(5000),
24
- farmId: zod_1.z.string().uuid().optional(),
25
- conversationId: zod_1.z.string().uuid().optional(), // Continue existing conversation
26
- conversationHistory: zod_1.z.array(exports.conversationMessageSchema).optional(),
19
+ export const chatRequestAttributesSchema = z.object({
20
+ message: z.string().min(1).max(5000),
21
+ farmId: z.string().uuid().optional(),
22
+ conversationId: z.string().uuid().optional(), // Continue existing conversation
23
+ conversationHistory: z.array(conversationMessageSchema).optional(),
27
24
  });
28
25
  // Chat request input (JSON:API format)
29
- exports.chatRequestSchema = zod_1.z.object({
30
- type: zod_1.z.literal('agent-chat-requests'),
31
- attributes: exports.chatRequestAttributesSchema,
26
+ export const chatRequestSchema = z.object({
27
+ type: z.literal('agent-chat-requests'),
28
+ attributes: chatRequestAttributesSchema,
32
29
  });
33
30
  // Agent chat response attributes schema
34
- exports.agentChatResponseAttributesSchema = zod_1.z.object({
35
- response: zod_1.z.string(),
36
- toolCalls: zod_1.z.array(exports.toolCallResultSchema).optional(),
37
- conversationId: zod_1.z.string().uuid(), // Return conversation ID for continuing
31
+ export const agentChatResponseAttributesSchema = z.object({
32
+ response: z.string(),
33
+ toolCalls: z.array(toolCallResultSchema).optional(),
34
+ conversationId: z.string().uuid(), // Return conversation ID for continuing
38
35
  });
39
36
  // Agent chat response resource (JSON:API resource object)
40
- exports.agentChatResponseResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('agent-chat-responses', exports.agentChatResponseAttributesSchema);
37
+ export const agentChatResponseResourceSchema = createJsonApiResourceSchema('agent-chat-responses', agentChatResponseAttributesSchema);
41
38
  // Agent chat response (JSON:API single response)
42
- exports.agentChatResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.agentChatResponseResourceSchema);
39
+ export const agentChatResponseSchema = jsonApiSingleResponseSchema(agentChatResponseResourceSchema);
43
40
  // Conversation history message schema (with timestamp)
44
- exports.conversationHistoryMessageSchema = zod_1.z.object({
45
- role: exports.messageRoleSchema,
46
- content: zod_1.z.string(),
47
- createdAt: zod_1.z.string().datetime().optional(),
41
+ export const conversationHistoryMessageSchema = z.object({
42
+ role: messageRoleSchema,
43
+ content: z.string(),
44
+ createdAt: z.string().datetime().optional(),
48
45
  });
49
46
  // Conversation history response attributes
50
- exports.conversationHistoryAttributesSchema = zod_1.z.object({
51
- messages: zod_1.z.array(exports.conversationHistoryMessageSchema),
52
- conversationId: zod_1.z.string().uuid(),
47
+ export const conversationHistoryAttributesSchema = z.object({
48
+ messages: z.array(conversationHistoryMessageSchema),
49
+ conversationId: z.string().uuid(),
53
50
  });
54
51
  // Conversation history resource
55
- exports.conversationHistoryResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('conversation-histories', exports.conversationHistoryAttributesSchema);
52
+ export const conversationHistoryResourceSchema = createJsonApiResourceSchema('conversation-histories', conversationHistoryAttributesSchema);
56
53
  // Conversation history response
57
- exports.conversationHistoryResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.conversationHistoryResourceSchema);
54
+ export const conversationHistoryResponseSchema = jsonApiSingleResponseSchema(conversationHistoryResourceSchema);
58
55
  // Conversation list item schema
59
- exports.conversationListItemSchema = zod_1.z.object({
60
- id: zod_1.z.string().uuid(),
61
- title: zod_1.z.string().nullable(),
62
- summary: zod_1.z.string().nullable(),
63
- farmId: zod_1.z.string().uuid().nullable(),
64
- messageCount: zod_1.z.number().int().min(0),
65
- lastMessageAt: zod_1.z.string().datetime().nullable(),
66
- createdAt: zod_1.z.string().datetime(),
67
- updatedAt: zod_1.z.string().datetime(),
56
+ export const conversationListItemSchema = z.object({
57
+ id: z.string().uuid(),
58
+ title: z.string().nullable(),
59
+ summary: z.string().nullable(),
60
+ farmId: z.string().uuid().nullable(),
61
+ messageCount: z.number().int().min(0),
62
+ lastMessageAt: z.string().datetime().nullable(),
63
+ createdAt: z.string().datetime(),
64
+ updatedAt: z.string().datetime(),
68
65
  });
69
66
  // Conversation list response attributes
70
- exports.conversationListAttributesSchema = zod_1.z.object({
71
- conversations: zod_1.z.array(exports.conversationListItemSchema),
72
- total: zod_1.z.number().int().min(0),
67
+ export const conversationListAttributesSchema = z.object({
68
+ conversations: z.array(conversationListItemSchema),
69
+ total: z.number().int().min(0),
73
70
  });
74
71
  // Conversation list resource
75
- exports.conversationListResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('conversation-lists', exports.conversationListAttributesSchema);
72
+ export const conversationListResourceSchema = createJsonApiResourceSchema('conversation-lists', conversationListAttributesSchema);
76
73
  // Conversation list response
77
- exports.conversationListResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.conversationListResourceSchema);
74
+ export const conversationListResponseSchema = jsonApiSingleResponseSchema(conversationListResourceSchema);
@@ -1,73 +1,70 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyticsResponseSchema = exports.analyticsResourceSchema = exports.analyticsAttributesSchema = exports.profitabilityAnalysisSchema = exports.fieldPerformanceSchema = exports.marketDataSchema = exports.yieldDataSchema = exports.performanceDataPointSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { createJsonApiResourceSchema, jsonApiSingleResponseSchema } from './common.schemas';
6
3
  /**
7
4
  * Analytics schemas - JSON:API compliant
8
5
  */
9
6
  // Performance data point (for trend charts)
10
- exports.performanceDataPointSchema = zod_1.z.object({
11
- date: zod_1.z.string().datetime(),
12
- ndvi: zod_1.z.number().nullable(),
13
- moisture: zod_1.z.number().nullable(),
14
- rainfall: zod_1.z.number().nullable(),
7
+ export const performanceDataPointSchema = z.object({
8
+ date: z.string().datetime(),
9
+ ndvi: z.number().nullable(),
10
+ moisture: z.number().nullable(),
11
+ rainfall: z.number().nullable(),
15
12
  });
16
13
  // Yield data
17
- exports.yieldDataSchema = zod_1.z.object({
18
- forecast: zod_1.z.number().nonnegative(),
19
- target: zod_1.z.number().nonnegative(),
20
- revenue: zod_1.z.number().nonnegative(),
21
- costs: zod_1.z.number().nonnegative(),
14
+ export const yieldDataSchema = z.object({
15
+ forecast: z.number().nonnegative(),
16
+ target: z.number().nonnegative(),
17
+ revenue: z.number().nonnegative(),
18
+ costs: z.number().nonnegative(),
22
19
  });
23
20
  // Market data
24
- exports.marketDataSchema = zod_1.z.object({
25
- id: zod_1.z.string().uuid(),
26
- crop: zod_1.z.string(),
27
- price: zod_1.z.string(), // e.g., "₦28,500/100kg"
28
- trend: zod_1.z.enum(['up', 'down', 'stable']),
21
+ export const marketDataSchema = z.object({
22
+ id: z.string().uuid(),
23
+ crop: z.string(),
24
+ price: z.string(), // e.g., "₦28,500/100kg"
25
+ trend: z.enum(['up', 'down', 'stable']),
29
26
  });
30
27
  // Field performance
31
- exports.fieldPerformanceSchema = zod_1.z.object({
32
- id: zod_1.z.string().uuid(),
33
- name: zod_1.z.string(),
34
- ndvi: zod_1.z.number(),
35
- trend: zod_1.z.enum(['up', 'down', 'stable']),
36
- moisture: zod_1.z.string(),
37
- issue: zod_1.z.string().nullable(),
28
+ export const fieldPerformanceSchema = z.object({
29
+ id: z.string().uuid(),
30
+ name: z.string(),
31
+ ndvi: z.number(),
32
+ trend: z.enum(['up', 'down', 'stable']),
33
+ moisture: z.string(),
34
+ issue: z.string().nullable(),
38
35
  });
39
36
  // Profitability analysis
40
- exports.profitabilityAnalysisSchema = zod_1.z.object({
41
- totalRevenue: zod_1.z.number().nonnegative(),
42
- totalCosts: zod_1.z.number().nonnegative(),
43
- netProfit: zod_1.z.number(),
44
- profitMargin: zod_1.z.number(), // Percentage
45
- fieldBreakdown: zod_1.z.array(zod_1.z.object({
46
- fieldId: zod_1.z.string().uuid(),
47
- fieldName: zod_1.z.string(),
48
- revenue: zod_1.z.number().nonnegative(),
49
- costs: zod_1.z.number().nonnegative(),
50
- profit: zod_1.z.number(),
51
- margin: zod_1.z.number(),
37
+ export const profitabilityAnalysisSchema = z.object({
38
+ totalRevenue: z.number().nonnegative(),
39
+ totalCosts: z.number().nonnegative(),
40
+ netProfit: z.number(),
41
+ profitMargin: z.number(), // Percentage
42
+ fieldBreakdown: z.array(z.object({
43
+ fieldId: z.string().uuid(),
44
+ fieldName: z.string(),
45
+ revenue: z.number().nonnegative(),
46
+ costs: z.number().nonnegative(),
47
+ profit: z.number(),
48
+ margin: z.number(),
52
49
  })).optional(),
53
- cropBreakdown: zod_1.z.array(zod_1.z.object({
54
- crop: zod_1.z.string(),
55
- revenue: zod_1.z.number().nonnegative(),
56
- costs: zod_1.z.number().nonnegative(),
57
- profit: zod_1.z.number(),
58
- margin: zod_1.z.number(),
50
+ cropBreakdown: z.array(z.object({
51
+ crop: z.string(),
52
+ revenue: z.number().nonnegative(),
53
+ costs: z.number().nonnegative(),
54
+ profit: z.number(),
55
+ margin: z.number(),
59
56
  })).optional(),
60
57
  });
61
58
  // Analytics attributes schema (for JSON:API attributes object)
62
- exports.analyticsAttributesSchema = zod_1.z.object({
63
- farmId: zod_1.z.string().uuid(),
64
- performanceData: zod_1.z.array(exports.performanceDataPointSchema),
65
- yield: exports.yieldDataSchema,
66
- marketData: zod_1.z.array(exports.marketDataSchema),
67
- fieldPerformance: zod_1.z.array(exports.fieldPerformanceSchema),
68
- profitability: exports.profitabilityAnalysisSchema.optional(),
59
+ export const analyticsAttributesSchema = z.object({
60
+ farmId: z.string().uuid(),
61
+ performanceData: z.array(performanceDataPointSchema),
62
+ yield: yieldDataSchema,
63
+ marketData: z.array(marketDataSchema),
64
+ fieldPerformance: z.array(fieldPerformanceSchema),
65
+ profitability: profitabilityAnalysisSchema.optional(),
69
66
  });
70
67
  // Analytics resource (JSON:API resource object)
71
- exports.analyticsResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('analytics', exports.analyticsAttributesSchema);
68
+ export const analyticsResourceSchema = createJsonApiResourceSchema('analytics', analyticsAttributesSchema);
72
69
  // Analytics response (JSON:API format)
73
- exports.analyticsResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.analyticsResourceSchema);
70
+ export const analyticsResponseSchema = jsonApiSingleResponseSchema(analyticsResourceSchema);