@deepintel-ltd/farmpro-contracts 1.5.8 → 1.5.9

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 (53) 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.js +70 -73
  12. package/dist/routes/field-observations.routes.js +41 -44
  13. package/dist/routes/fields.routes.js +44 -47
  14. package/dist/routes/finance.routes.js +121 -124
  15. package/dist/routes/harvest.routes.js +46 -49
  16. package/dist/routes/health.routes.js +6 -9
  17. package/dist/routes/index.js +51 -54
  18. package/dist/routes/input-usage.routes.js +14 -17
  19. package/dist/routes/inventory.routes.js +57 -60
  20. package/dist/routes/seasonal-plans.routes.js +14 -17
  21. package/dist/routes/soil-tests.routes.js +45 -48
  22. package/dist/routes/suppliers.routes.js +70 -73
  23. package/dist/routes/tasks.routes.js +65 -68
  24. package/dist/routes/team.routes.js +57 -60
  25. package/dist/routes/users.routes.js +13 -16
  26. package/dist/routes/weather.routes.js +10 -13
  27. package/dist/schemas/admin.schemas.js +43 -46
  28. package/dist/schemas/agent-workflows.schemas.js +34 -37
  29. package/dist/schemas/agents.schemas.js +46 -49
  30. package/dist/schemas/analytics.schemas.js +51 -54
  31. package/dist/schemas/auth.schemas.js +96 -99
  32. package/dist/schemas/categories.schemas.js +27 -30
  33. package/dist/schemas/common.schemas.js +89 -95
  34. package/dist/schemas/documents.schemas.js +59 -62
  35. package/dist/schemas/equipment.schemas.js +86 -89
  36. package/dist/schemas/farms.schemas.js +40 -43
  37. package/dist/schemas/field-monitoring.schemas.js +207 -210
  38. package/dist/schemas/field-observations.schemas.js +93 -96
  39. package/dist/schemas/fields.schemas.js +82 -85
  40. package/dist/schemas/finance.schemas.js +134 -137
  41. package/dist/schemas/harvest.schemas.js +46 -49
  42. package/dist/schemas/health.schemas.js +14 -17
  43. package/dist/schemas/input-usage.schemas.js +21 -24
  44. package/dist/schemas/inventory.schemas.js +58 -61
  45. package/dist/schemas/recommendations.schemas.js +22 -25
  46. package/dist/schemas/seasonal-plans.schemas.js +21 -24
  47. package/dist/schemas/soil-tests.schemas.js +70 -73
  48. package/dist/schemas/suppliers.schemas.js +90 -93
  49. package/dist/schemas/tasks.schemas.js +93 -96
  50. package/dist/schemas/team.schemas.js +35 -38
  51. package/dist/schemas/users.schemas.js +19 -22
  52. package/dist/schemas/weather.schemas.js +32 -35
  53. package/package.json +9 -1
@@ -1,52 +1,49 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.financeSummaryResponseSchema = exports.financeSummaryResourceSchema = exports.revenueListResponseSchema = exports.revenueDetailResponseSchema = exports.revenueResponseSchema = exports.expenseListResponseSchema = exports.expenseDetailResponseSchema = exports.expenseResponseSchema = exports.budgetListResponseSchema = exports.budgetResponseSchema = exports.revenueDetailResourceSchema = exports.expenseDetailResourceSchema = exports.revenueResourceSchema = exports.expenseResourceSchema = exports.budgetResourceSchema = exports.updateRevenueSchema = exports.createRevenueSchema = exports.updateExpenseSchema = exports.createExpenseSchema = exports.updateBudgetSchema = exports.createBudgetSchema = exports.updateRevenueAttributesSchema = exports.createRevenueAttributesSchema = exports.revenueAttributesSchema = exports.updateExpenseAttributesSchema = exports.createExpenseAttributesSchema = exports.expenseAttributesSchema = exports.updateBudgetAttributesSchema = exports.createBudgetAttributesSchema = exports.budgetAttributesSchema = exports.expenseAllocationTypeSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { timestampsSchema, createJsonApiResourceSchema, jsonApiSingleResponseSchema, jsonApiCollectionResponseSchema } from './common.schemas';
6
3
  /**
7
4
  * Finance schemas - JSON:API compliant
8
5
  */
9
6
  // Expense allocation type
10
- exports.expenseAllocationTypeSchema = zod_1.z.enum(['field', 'crop', 'general']);
7
+ export const expenseAllocationTypeSchema = z.enum(['field', 'crop', 'general']);
11
8
  // Budget attributes schema (for JSON:API attributes object)
12
- exports.budgetAttributesSchema = zod_1.z.object({
13
- category: zod_1.z.string(),
14
- planned: zod_1.z.number().nonnegative(),
15
- actual: zod_1.z.number().nonnegative().optional(), // Calculated from expenses
16
- remaining: zod_1.z.number().optional(), // planned - actual
17
- }).merge(common_schemas_1.timestampsSchema);
9
+ export const budgetAttributesSchema = z.object({
10
+ category: z.string(),
11
+ planned: z.number().nonnegative(),
12
+ actual: z.number().nonnegative().optional(), // Calculated from expenses
13
+ remaining: z.number().optional(), // planned - actual
14
+ }).merge(timestampsSchema);
18
15
  // Budget attributes for creation (input)
19
- exports.createBudgetAttributesSchema = zod_1.z.object({
20
- category: zod_1.z.string().min(1).max(100),
21
- planned: zod_1.z.number().nonnegative(),
16
+ export const createBudgetAttributesSchema = z.object({
17
+ category: z.string().min(1).max(100),
18
+ planned: z.number().nonnegative(),
22
19
  });
23
20
  // Budget attributes for update (input)
24
- exports.updateBudgetAttributesSchema = zod_1.z.object({
25
- category: zod_1.z.string().min(1).max(100).optional(),
26
- planned: zod_1.z.number().nonnegative().optional(),
21
+ export const updateBudgetAttributesSchema = z.object({
22
+ category: z.string().min(1).max(100).optional(),
23
+ planned: z.number().nonnegative().optional(),
27
24
  });
28
25
  // Expense attributes schema (for JSON:API attributes object)
29
- exports.expenseAttributesSchema = zod_1.z.object({
30
- date: zod_1.z.string().datetime(),
31
- category: zod_1.z.string(),
32
- description: zod_1.z.string(),
33
- amount: zod_1.z.number().positive(),
34
- allocationType: exports.expenseAllocationTypeSchema,
35
- fieldId: zod_1.z.string().uuid().nullable(),
36
- fieldName: zod_1.z.string().nullable().optional(),
37
- cropId: zod_1.z.string().nullable(),
38
- cropName: zod_1.z.string().nullable().optional(),
39
- }).merge(common_schemas_1.timestampsSchema);
26
+ export const expenseAttributesSchema = z.object({
27
+ date: z.string().datetime(),
28
+ category: z.string(),
29
+ description: z.string(),
30
+ amount: z.number().positive(),
31
+ allocationType: expenseAllocationTypeSchema,
32
+ fieldId: z.string().uuid().nullable(),
33
+ fieldName: z.string().nullable().optional(),
34
+ cropId: z.string().nullable(),
35
+ cropName: z.string().nullable().optional(),
36
+ }).merge(timestampsSchema);
40
37
  // Expense attributes for creation (input)
41
- exports.createExpenseAttributesSchema = zod_1.z.object({
42
- date: zod_1.z.string().datetime(),
43
- category: zod_1.z.string().min(1),
44
- description: zod_1.z.string().min(1).max(500),
45
- amount: zod_1.z.number().positive(),
38
+ export const createExpenseAttributesSchema = z.object({
39
+ date: z.string().datetime(),
40
+ category: z.string().min(1),
41
+ description: z.string().min(1).max(500),
42
+ amount: z.number().positive(),
46
43
  // Cost allocation
47
- allocationType: exports.expenseAllocationTypeSchema.default('general'),
48
- fieldId: zod_1.z.string().uuid().optional(),
49
- cropId: zod_1.z.string().optional(),
44
+ allocationType: expenseAllocationTypeSchema.default('general'),
45
+ fieldId: z.string().uuid().optional(),
46
+ cropId: z.string().optional(),
50
47
  }).refine((data) => {
51
48
  // If allocationType is 'field', fieldId must be provided
52
49
  if (data.allocationType === 'field' && !data.fieldId) {
@@ -61,135 +58,135 @@ exports.createExpenseAttributesSchema = zod_1.z.object({
61
58
  message: 'Field or crop must be selected for field/crop allocation',
62
59
  });
63
60
  // Expense attributes for update (input)
64
- exports.updateExpenseAttributesSchema = zod_1.z.object({
65
- date: zod_1.z.string().datetime().optional(),
66
- category: zod_1.z.string().min(1).optional(),
67
- description: zod_1.z.string().min(1).max(500).optional(),
68
- amount: zod_1.z.number().positive().optional(),
69
- allocationType: exports.expenseAllocationTypeSchema.optional(),
70
- fieldId: zod_1.z.string().uuid().nullable().optional(),
71
- cropId: zod_1.z.string().nullable().optional(),
61
+ export const updateExpenseAttributesSchema = z.object({
62
+ date: z.string().datetime().optional(),
63
+ category: z.string().min(1).optional(),
64
+ description: z.string().min(1).max(500).optional(),
65
+ amount: z.number().positive().optional(),
66
+ allocationType: expenseAllocationTypeSchema.optional(),
67
+ fieldId: z.string().uuid().nullable().optional(),
68
+ cropId: z.string().nullable().optional(),
72
69
  });
73
70
  // Revenue attributes schema (for JSON:API attributes object)
74
- exports.revenueAttributesSchema = zod_1.z.object({
75
- date: zod_1.z.string().datetime(),
76
- crop: zod_1.z.string(),
77
- quantity: zod_1.z.number().positive(),
78
- unit: zod_1.z.string(),
79
- pricePerUnit: zod_1.z.number().positive(),
80
- totalAmount: zod_1.z.number().positive(),
81
- buyer: zod_1.z.string().nullable(),
82
- fieldId: zod_1.z.string().uuid().nullable(),
83
- fieldName: zod_1.z.string().nullable().optional(),
84
- harvestId: zod_1.z.string().uuid().nullable(),
85
- }).merge(common_schemas_1.timestampsSchema);
71
+ export const revenueAttributesSchema = z.object({
72
+ date: z.string().datetime(),
73
+ crop: z.string(),
74
+ quantity: z.number().positive(),
75
+ unit: z.string(),
76
+ pricePerUnit: z.number().positive(),
77
+ totalAmount: z.number().positive(),
78
+ buyer: z.string().nullable(),
79
+ fieldId: z.string().uuid().nullable(),
80
+ fieldName: z.string().nullable().optional(),
81
+ harvestId: z.string().uuid().nullable(),
82
+ }).merge(timestampsSchema);
86
83
  // Revenue attributes for creation (input)
87
- exports.createRevenueAttributesSchema = zod_1.z.object({
88
- date: zod_1.z.string().datetime(),
89
- crop: zod_1.z.string().min(1),
90
- quantity: zod_1.z.number().positive(),
91
- unit: zod_1.z.string().min(1), // e.g., "tons", "100kg", "bags"
92
- pricePerUnit: zod_1.z.number().positive(),
93
- totalAmount: zod_1.z.number().positive().optional(), // Calculated: quantity * pricePerUnit
94
- buyer: zod_1.z.string().optional(),
95
- fieldId: zod_1.z.string().uuid().optional(),
96
- harvestId: zod_1.z.string().uuid().optional(), // Link to harvest entry
84
+ export const createRevenueAttributesSchema = z.object({
85
+ date: z.string().datetime(),
86
+ crop: z.string().min(1),
87
+ quantity: z.number().positive(),
88
+ unit: z.string().min(1), // e.g., "tons", "100kg", "bags"
89
+ pricePerUnit: z.number().positive(),
90
+ totalAmount: z.number().positive().optional(), // Calculated: quantity * pricePerUnit
91
+ buyer: z.string().optional(),
92
+ fieldId: z.string().uuid().optional(),
93
+ harvestId: z.string().uuid().optional(), // Link to harvest entry
97
94
  });
98
95
  // Revenue attributes for update (input)
99
- exports.updateRevenueAttributesSchema = zod_1.z.object({
100
- date: zod_1.z.string().datetime().optional(),
101
- crop: zod_1.z.string().min(1).optional(),
102
- quantity: zod_1.z.number().positive().optional(),
103
- unit: zod_1.z.string().min(1).optional(),
104
- pricePerUnit: zod_1.z.number().positive().optional(),
105
- totalAmount: zod_1.z.number().positive().optional(),
106
- buyer: zod_1.z.string().nullable().optional(),
107
- fieldId: zod_1.z.string().uuid().nullable().optional(),
108
- harvestId: zod_1.z.string().uuid().nullable().optional(),
96
+ export const updateRevenueAttributesSchema = z.object({
97
+ date: z.string().datetime().optional(),
98
+ crop: z.string().min(1).optional(),
99
+ quantity: z.number().positive().optional(),
100
+ unit: z.string().min(1).optional(),
101
+ pricePerUnit: z.number().positive().optional(),
102
+ totalAmount: z.number().positive().optional(),
103
+ buyer: z.string().nullable().optional(),
104
+ fieldId: z.string().uuid().nullable().optional(),
105
+ harvestId: z.string().uuid().nullable().optional(),
109
106
  });
110
107
  // Create input schemas (JSON:API format)
111
- exports.createBudgetSchema = zod_1.z.object({
112
- type: zod_1.z.literal('budgets'),
113
- attributes: exports.createBudgetAttributesSchema,
108
+ export const createBudgetSchema = z.object({
109
+ type: z.literal('budgets'),
110
+ attributes: createBudgetAttributesSchema,
114
111
  });
115
- exports.updateBudgetSchema = zod_1.z.object({
116
- type: zod_1.z.literal('budgets'),
117
- id: zod_1.z.string().uuid(),
118
- attributes: exports.updateBudgetAttributesSchema,
112
+ export const updateBudgetSchema = z.object({
113
+ type: z.literal('budgets'),
114
+ id: z.string().uuid(),
115
+ attributes: updateBudgetAttributesSchema,
119
116
  });
120
- exports.createExpenseSchema = zod_1.z.object({
121
- type: zod_1.z.literal('expenses'),
122
- attributes: exports.createExpenseAttributesSchema,
117
+ export const createExpenseSchema = z.object({
118
+ type: z.literal('expenses'),
119
+ attributes: createExpenseAttributesSchema,
123
120
  });
124
- exports.updateExpenseSchema = zod_1.z.object({
125
- type: zod_1.z.literal('expenses'),
126
- id: zod_1.z.string().uuid(),
127
- attributes: exports.updateExpenseAttributesSchema,
121
+ export const updateExpenseSchema = z.object({
122
+ type: z.literal('expenses'),
123
+ id: z.string().uuid(),
124
+ attributes: updateExpenseAttributesSchema,
128
125
  });
129
- exports.createRevenueSchema = zod_1.z.object({
130
- type: zod_1.z.literal('revenues'),
131
- attributes: exports.createRevenueAttributesSchema,
126
+ export const createRevenueSchema = z.object({
127
+ type: z.literal('revenues'),
128
+ attributes: createRevenueAttributesSchema,
132
129
  });
133
- exports.updateRevenueSchema = zod_1.z.object({
134
- type: zod_1.z.literal('revenues'),
135
- id: zod_1.z.string().uuid(),
136
- attributes: exports.updateRevenueAttributesSchema,
130
+ export const updateRevenueSchema = z.object({
131
+ type: z.literal('revenues'),
132
+ id: z.string().uuid(),
133
+ attributes: updateRevenueAttributesSchema,
137
134
  });
138
135
  // Resource schemas (JSON:API resource objects)
139
- exports.budgetResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('budgets', exports.budgetAttributesSchema);
140
- exports.expenseResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('expenses', exports.expenseAttributesSchema);
141
- exports.revenueResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('revenues', exports.revenueAttributesSchema);
136
+ export const budgetResourceSchema = createJsonApiResourceSchema('budgets', budgetAttributesSchema);
137
+ export const expenseResourceSchema = createJsonApiResourceSchema('expenses', expenseAttributesSchema);
138
+ export const revenueResourceSchema = createJsonApiResourceSchema('revenues', revenueAttributesSchema);
142
139
  // Detail resource schemas with relationships
143
- exports.expenseDetailResourceSchema = exports.expenseResourceSchema.extend({
144
- relationships: zod_1.z.object({
145
- field: zod_1.z.object({
146
- links: zod_1.z.object({
147
- related: zod_1.z.string(),
140
+ export const expenseDetailResourceSchema = expenseResourceSchema.extend({
141
+ relationships: z.object({
142
+ field: z.object({
143
+ links: z.object({
144
+ related: z.string(),
148
145
  }),
149
146
  }).optional(),
150
147
  }).optional(),
151
148
  });
152
- exports.revenueDetailResourceSchema = exports.revenueResourceSchema.extend({
153
- relationships: zod_1.z.object({
154
- field: zod_1.z.object({
155
- links: zod_1.z.object({
156
- related: zod_1.z.string(),
149
+ export const revenueDetailResourceSchema = revenueResourceSchema.extend({
150
+ relationships: z.object({
151
+ field: z.object({
152
+ links: z.object({
153
+ related: z.string(),
157
154
  }),
158
155
  }).optional(),
159
- harvest: zod_1.z.object({
160
- links: zod_1.z.object({
161
- related: zod_1.z.string(),
156
+ harvest: z.object({
157
+ links: z.object({
158
+ related: z.string(),
162
159
  }),
163
160
  }).optional(),
164
161
  }).optional(),
165
162
  });
166
163
  // Response schemas (JSON:API format)
167
- exports.budgetResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.budgetResourceSchema);
168
- exports.budgetListResponseSchema = (0, common_schemas_1.jsonApiCollectionResponseSchema)(exports.budgetResourceSchema);
169
- exports.expenseResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.expenseResourceSchema);
170
- exports.expenseDetailResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.expenseDetailResourceSchema);
171
- exports.expenseListResponseSchema = (0, common_schemas_1.jsonApiCollectionResponseSchema)(exports.expenseResourceSchema);
172
- exports.revenueResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.revenueResourceSchema);
173
- exports.revenueDetailResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.revenueDetailResourceSchema);
174
- exports.revenueListResponseSchema = (0, common_schemas_1.jsonApiCollectionResponseSchema)(exports.revenueResourceSchema);
164
+ export const budgetResponseSchema = jsonApiSingleResponseSchema(budgetResourceSchema);
165
+ export const budgetListResponseSchema = jsonApiCollectionResponseSchema(budgetResourceSchema);
166
+ export const expenseResponseSchema = jsonApiSingleResponseSchema(expenseResourceSchema);
167
+ export const expenseDetailResponseSchema = jsonApiSingleResponseSchema(expenseDetailResourceSchema);
168
+ export const expenseListResponseSchema = jsonApiCollectionResponseSchema(expenseResourceSchema);
169
+ export const revenueResponseSchema = jsonApiSingleResponseSchema(revenueResourceSchema);
170
+ export const revenueDetailResponseSchema = jsonApiSingleResponseSchema(revenueDetailResourceSchema);
171
+ export const revenueListResponseSchema = jsonApiCollectionResponseSchema(revenueResourceSchema);
175
172
  // Finance summary response (JSON:API format)
176
- exports.financeSummaryResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('finance-summaries', zod_1.z.object({
177
- totalPlanned: zod_1.z.number().nonnegative(),
178
- totalActual: zod_1.z.number().nonnegative(),
179
- totalRevenue: zod_1.z.number().nonnegative(),
180
- remainingBudget: zod_1.z.number(),
181
- netProfit: zod_1.z.number(),
182
- profitMargin: zod_1.z.number(), // Percentage
173
+ export const financeSummaryResourceSchema = createJsonApiResourceSchema('finance-summaries', z.object({
174
+ totalPlanned: z.number().nonnegative(),
175
+ totalActual: z.number().nonnegative(),
176
+ totalRevenue: z.number().nonnegative(),
177
+ remainingBudget: z.number(),
178
+ netProfit: z.number(),
179
+ profitMargin: z.number(), // Percentage
183
180
  }));
184
- exports.financeSummaryResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.financeSummaryResourceSchema.extend({
185
- relationships: zod_1.z.object({
186
- budgets: zod_1.z.object({
187
- data: zod_1.z.array(zod_1.z.object({
188
- type: zod_1.z.literal('budgets'),
189
- id: zod_1.z.string(),
181
+ export const financeSummaryResponseSchema = jsonApiSingleResponseSchema(financeSummaryResourceSchema.extend({
182
+ relationships: z.object({
183
+ budgets: z.object({
184
+ data: z.array(z.object({
185
+ type: z.literal('budgets'),
186
+ id: z.string(),
190
187
  })),
191
- links: zod_1.z.object({
192
- related: zod_1.z.string(),
188
+ links: z.object({
189
+ related: z.string(),
193
190
  }),
194
191
  }),
195
192
  }).optional(),
@@ -1,71 +1,68 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.harvestListResponseSchema = exports.harvestDetailResponseSchema = exports.harvestResponseSchema = exports.harvestDetailResourceSchema = exports.harvestResourceSchema = exports.updateHarvestSchema = exports.createHarvestSchema = exports.updateHarvestAttributesSchema = exports.createHarvestAttributesSchema = exports.harvestAttributesSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { timestampsSchema, createJsonApiResourceSchema, jsonApiSingleResponseSchema, jsonApiCollectionResponseSchema } from './common.schemas';
6
3
  /**
7
4
  * Harvest schemas - JSON:API compliant
8
5
  */
9
6
  // Harvest attributes schema (for JSON:API attributes object)
10
- exports.harvestAttributesSchema = zod_1.z.object({
11
- fieldId: zod_1.z.string().uuid(),
12
- fieldName: zod_1.z.string().optional(),
13
- date: zod_1.z.string().datetime(),
14
- crop: zod_1.z.string(),
15
- quantity: zod_1.z.number().positive(),
16
- unit: zod_1.z.string(),
17
- qualityGrade: zod_1.z.string().nullable(),
18
- yieldPerHectare: zod_1.z.number().nullable().optional(), // Calculated from field area
19
- linkedRevenueId: zod_1.z.string().uuid().nullable().optional(), // Link to revenue entry
20
- }).merge(common_schemas_1.timestampsSchema);
7
+ export const harvestAttributesSchema = z.object({
8
+ fieldId: z.string().uuid(),
9
+ fieldName: z.string().optional(),
10
+ date: z.string().datetime(),
11
+ crop: z.string(),
12
+ quantity: z.number().positive(),
13
+ unit: z.string(),
14
+ qualityGrade: z.string().nullable(),
15
+ yieldPerHectare: z.number().nullable().optional(), // Calculated from field area
16
+ linkedRevenueId: z.string().uuid().nullable().optional(), // Link to revenue entry
17
+ }).merge(timestampsSchema);
21
18
  // Harvest attributes for creation (input)
22
- exports.createHarvestAttributesSchema = zod_1.z.object({
23
- fieldId: zod_1.z.string().uuid(),
24
- date: zod_1.z.string().datetime(),
25
- crop: zod_1.z.string().min(1),
26
- quantity: zod_1.z.number().positive(),
27
- unit: zod_1.z.string().min(1), // 'tons', 'kg', '100kg', 'bags'
28
- qualityGrade: zod_1.z.string().optional(), // Optional quality rating
19
+ export const createHarvestAttributesSchema = z.object({
20
+ fieldId: z.string().uuid(),
21
+ date: z.string().datetime(),
22
+ crop: z.string().min(1),
23
+ quantity: z.number().positive(),
24
+ unit: z.string().min(1), // 'tons', 'kg', '100kg', 'bags'
25
+ qualityGrade: z.string().optional(), // Optional quality rating
29
26
  // Yield per hectare is calculated from field area
30
27
  });
31
28
  // Harvest attributes for update (input)
32
- exports.updateHarvestAttributesSchema = zod_1.z.object({
33
- fieldId: zod_1.z.string().uuid().optional(),
34
- date: zod_1.z.string().datetime().optional(),
35
- crop: zod_1.z.string().min(1).optional(),
36
- quantity: zod_1.z.number().positive().optional(),
37
- unit: zod_1.z.string().min(1).optional(),
38
- qualityGrade: zod_1.z.string().nullable().optional(),
29
+ export const updateHarvestAttributesSchema = z.object({
30
+ fieldId: z.string().uuid().optional(),
31
+ date: z.string().datetime().optional(),
32
+ crop: z.string().min(1).optional(),
33
+ quantity: z.number().positive().optional(),
34
+ unit: z.string().min(1).optional(),
35
+ qualityGrade: z.string().nullable().optional(),
39
36
  });
40
37
  // Create harvest input (JSON:API format)
41
- exports.createHarvestSchema = zod_1.z.object({
42
- type: zod_1.z.literal('harvests'),
43
- attributes: exports.createHarvestAttributesSchema,
38
+ export const createHarvestSchema = z.object({
39
+ type: z.literal('harvests'),
40
+ attributes: createHarvestAttributesSchema,
44
41
  });
45
42
  // Update harvest input (JSON:API format)
46
- exports.updateHarvestSchema = zod_1.z.object({
47
- type: zod_1.z.literal('harvests'),
48
- id: zod_1.z.string().uuid(),
49
- attributes: exports.updateHarvestAttributesSchema,
43
+ export const updateHarvestSchema = z.object({
44
+ type: z.literal('harvests'),
45
+ id: z.string().uuid(),
46
+ attributes: updateHarvestAttributesSchema,
50
47
  });
51
48
  // Harvest resource (JSON:API resource object)
52
- exports.harvestResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('harvests', exports.harvestAttributesSchema);
49
+ export const harvestResourceSchema = createJsonApiResourceSchema('harvests', harvestAttributesSchema);
53
50
  // Harvest detail resource with relationships
54
- exports.harvestDetailResourceSchema = exports.harvestResourceSchema.extend({
55
- relationships: zod_1.z.object({
56
- field: zod_1.z.object({
57
- links: zod_1.z.object({
58
- related: zod_1.z.string(),
51
+ export const harvestDetailResourceSchema = harvestResourceSchema.extend({
52
+ relationships: z.object({
53
+ field: z.object({
54
+ links: z.object({
55
+ related: z.string(),
59
56
  }),
60
57
  }).optional(),
61
- revenue: zod_1.z.object({
62
- links: zod_1.z.object({
63
- related: zod_1.z.string(),
58
+ revenue: z.object({
59
+ links: z.object({
60
+ related: z.string(),
64
61
  }),
65
62
  }).optional(),
66
63
  }).optional(),
67
64
  });
68
65
  // Harvest responses (JSON:API format)
69
- exports.harvestResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.harvestResourceSchema);
70
- exports.harvestDetailResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.harvestDetailResourceSchema);
71
- exports.harvestListResponseSchema = (0, common_schemas_1.jsonApiCollectionResponseSchema)(exports.harvestResourceSchema);
66
+ export const harvestResponseSchema = jsonApiSingleResponseSchema(harvestResourceSchema);
67
+ export const harvestDetailResponseSchema = jsonApiSingleResponseSchema(harvestDetailResourceSchema);
68
+ export const harvestListResponseSchema = jsonApiCollectionResponseSchema(harvestResourceSchema);
@@ -1,26 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.healthCheckResponseSchema = exports.serviceHealthSchema = void 0;
4
- const zod_1 = require("zod");
1
+ import { z } from 'zod';
5
2
  /**
6
3
  * Health status for individual services
7
4
  */
8
- exports.serviceHealthSchema = zod_1.z.object({
9
- status: zod_1.z.enum(['healthy', 'unhealthy', 'degraded']),
10
- message: zod_1.z.string().optional(),
11
- responseTime: zod_1.z.number().optional(), // in milliseconds
5
+ export const serviceHealthSchema = z.object({
6
+ status: z.enum(['healthy', 'unhealthy', 'degraded']),
7
+ message: z.string().optional(),
8
+ responseTime: z.number().optional(), // in milliseconds
12
9
  });
13
10
  /**
14
11
  * Overall health check response
15
12
  */
16
- exports.healthCheckResponseSchema = zod_1.z.object({
17
- status: zod_1.z.enum(['healthy', 'unhealthy', 'degraded']),
18
- timestamp: zod_1.z.string().datetime(),
19
- uptime: zod_1.z.number(), // in seconds
20
- services: zod_1.z.object({
21
- database: exports.serviceHealthSchema,
22
- redis: exports.serviceHealthSchema,
23
- storage: exports.serviceHealthSchema.optional(),
24
- timescale: exports.serviceHealthSchema.optional(),
13
+ export const healthCheckResponseSchema = z.object({
14
+ status: z.enum(['healthy', 'unhealthy', 'degraded']),
15
+ timestamp: z.string().datetime(),
16
+ uptime: z.number(), // in seconds
17
+ services: z.object({
18
+ database: serviceHealthSchema,
19
+ redis: serviceHealthSchema,
20
+ storage: serviceHealthSchema.optional(),
21
+ timescale: serviceHealthSchema.optional(),
25
22
  }),
26
23
  });
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInputUsageQuerySchema = exports.inputUsageResponseSchema = exports.inputUsageResourceSchema = exports.inputUsageAttributesSchema = exports.inputUsageItemSchema = void 0;
4
- const zod_1 = require("zod");
5
- const common_schemas_1 = require("./common.schemas");
1
+ import { z } from 'zod';
2
+ import { timestampsSchema, createJsonApiResourceSchema, jsonApiSingleResponseSchema, } from './common.schemas';
6
3
  /**
7
4
  * Input Usage schemas - JSON:API compliant
8
5
  *
@@ -10,28 +7,28 @@ const common_schemas_1 = require("./common.schemas");
10
7
  * Data is calculated from tasks that reference inventory items
11
8
  */
12
9
  // Input usage item schema
13
- exports.inputUsageItemSchema = zod_1.z.object({
14
- id: zod_1.z.string(), // inventoryItemId
15
- name: zod_1.z.string(), // inventory item name
16
- planned: zod_1.z.number(),
17
- actual: zod_1.z.number(),
18
- unit: zod_1.z.string(), // from inventory item
10
+ export const inputUsageItemSchema = z.object({
11
+ id: z.string(), // inventoryItemId
12
+ name: z.string(), // inventory item name
13
+ planned: z.number(),
14
+ actual: z.number(),
15
+ unit: z.string(), // from inventory item
19
16
  });
20
17
  // Input usage attributes schema
21
- exports.inputUsageAttributesSchema = zod_1.z.object({
22
- farmId: zod_1.z.string().uuid(),
23
- season: zod_1.z.string().optional(), // e.g., "2024-2025"
24
- startDate: zod_1.z.string().datetime().optional(),
25
- endDate: zod_1.z.string().datetime().optional(),
26
- items: zod_1.z.array(exports.inputUsageItemSchema), // Usage items grouped by inventory item
27
- }).merge(common_schemas_1.timestampsSchema);
18
+ export const inputUsageAttributesSchema = z.object({
19
+ farmId: z.string().uuid(),
20
+ season: z.string().optional(), // e.g., "2024-2025"
21
+ startDate: z.string().datetime().optional(),
22
+ endDate: z.string().datetime().optional(),
23
+ items: z.array(inputUsageItemSchema), // Usage items grouped by inventory item
24
+ }).merge(timestampsSchema);
28
25
  // Input usage resource schema
29
- exports.inputUsageResourceSchema = (0, common_schemas_1.createJsonApiResourceSchema)('input-usage', exports.inputUsageAttributesSchema);
26
+ export const inputUsageResourceSchema = createJsonApiResourceSchema('input-usage', inputUsageAttributesSchema);
30
27
  // Input usage response schema
31
- exports.inputUsageResponseSchema = (0, common_schemas_1.jsonApiSingleResponseSchema)(exports.inputUsageResourceSchema);
28
+ export const inputUsageResponseSchema = jsonApiSingleResponseSchema(inputUsageResourceSchema);
32
29
  // Query parameters for getting input usage
33
- exports.getInputUsageQuerySchema = zod_1.z.object({
34
- season: zod_1.z.string().optional(), // e.g., "2024-2025"
35
- 'filter[startDate]': zod_1.z.string().datetime().optional(),
36
- 'filter[endDate]': zod_1.z.string().datetime().optional(),
30
+ export const getInputUsageQuerySchema = z.object({
31
+ season: z.string().optional(), // e.g., "2024-2025"
32
+ 'filter[startDate]': z.string().datetime().optional(),
33
+ 'filter[endDate]': z.string().datetime().optional(),
37
34
  });