@deepintel-ltd/farmpro-contracts 1.23.1 → 1.24.0

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 (43) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/routes/commodity-deals.routes.d.ts +1339 -0
  5. package/dist/routes/commodity-deals.routes.d.ts.map +1 -1
  6. package/dist/routes/commodity-deals.routes.js +49 -1
  7. package/dist/routes/finance.routes.d.ts +68 -68
  8. package/dist/routes/index.d.ts +2 -0
  9. package/dist/routes/index.d.ts.map +1 -1
  10. package/dist/routes/index.js +2 -0
  11. package/dist/routes/inventory.routes.d.ts +584 -0
  12. package/dist/routes/inventory.routes.d.ts.map +1 -1
  13. package/dist/routes/inventory.routes.js +26 -1
  14. package/dist/routes/live-monitor.routes.d.ts +15 -10
  15. package/dist/routes/live-monitor.routes.d.ts.map +1 -1
  16. package/dist/routes/monitoring-visualization.routes.d.ts +3 -0
  17. package/dist/routes/monitoring-visualization.routes.d.ts.map +1 -1
  18. package/dist/routes/poultry.routes.d.ts +3318 -0
  19. package/dist/routes/poultry.routes.d.ts.map +1 -0
  20. package/dist/routes/poultry.routes.js +195 -0
  21. package/dist/routes/team-payments.routes.d.ts +42 -42
  22. package/dist/routes/trade-cash-events.routes.d.ts +20 -20
  23. package/dist/routes/waybills.routes.d.ts +14 -0
  24. package/dist/routes/waybills.routes.d.ts.map +1 -1
  25. package/dist/schemas/commodity-deals.schemas.d.ts +484 -0
  26. package/dist/schemas/commodity-deals.schemas.d.ts.map +1 -1
  27. package/dist/schemas/commodity-deals.schemas.js +34 -0
  28. package/dist/schemas/finance.schemas.d.ts +78 -78
  29. package/dist/schemas/inventory.schemas.d.ts +122 -0
  30. package/dist/schemas/inventory.schemas.d.ts.map +1 -1
  31. package/dist/schemas/inventory.schemas.js +35 -0
  32. package/dist/schemas/live-monitor.schemas.d.ts +24 -16
  33. package/dist/schemas/live-monitor.schemas.d.ts.map +1 -1
  34. package/dist/schemas/live-monitor.schemas.js +3 -2
  35. package/dist/schemas/monitoring-visualization.schemas.d.ts +64 -0
  36. package/dist/schemas/monitoring-visualization.schemas.d.ts.map +1 -1
  37. package/dist/schemas/monitoring-visualization.schemas.js +25 -1
  38. package/dist/schemas/team-payments.schemas.d.ts +30 -30
  39. package/dist/schemas/trade-cash-events.schemas.d.ts +24 -24
  40. package/dist/schemas/waybills.schemas.d.ts +16 -0
  41. package/dist/schemas/waybills.schemas.d.ts.map +1 -1
  42. package/dist/schemas/waybills.schemas.js +1 -0
  43. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poultry.routes.d.ts","sourceRoot":"","sources":["../../src/routes/poultry.routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,8BAA8B,gCAA8B,CAAC;AAE1E,eAAO,MAAM,8BAA8B,2CAAyC,CAAC;AAErF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;EAQpC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMvC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOtC,CAAC;AAEH,eAAO,MAAM,0BAA0B,6CAA2C,CAAC;AAEnF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB/B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;EAOtC,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;EAK3C,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBvC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AACjD,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC,MAAM,CAAC,CAAC;AACV,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,195 @@
1
+ import { initContract } from '@ts-rest/core';
2
+ import { z } from 'zod';
3
+ import { jsonApiErrorResponseSchema } from '../schemas/common.schemas';
4
+ const c = initContract();
5
+ export const poultryCommodityCategorySchema = z.enum(['output', 'input']);
6
+ export const poultryMarketPriceSourceSchema = z.enum(['farm', 'platform', 'public']);
7
+ export const poultryMarketLatestSchema = z.object({
8
+ pricePerUnit: z.number(),
9
+ unit: z.string(),
10
+ currency: z.string(),
11
+ observedAt: z.string().datetime(),
12
+ marketLabel: z.string().nullable(),
13
+ source: poultryMarketPriceSourceSchema,
14
+ farmCount: z.number().int().nonnegative().optional(),
15
+ });
16
+ export const poultryMarketCommoditySchema = z.object({
17
+ key: z.string(),
18
+ label: z.string(),
19
+ unit: z.string(),
20
+ category: poultryCommodityCategorySchema,
21
+ latest: poultryMarketLatestSchema.nullable(),
22
+ });
23
+ export const poultryFeedBridgeSchema = z.object({
24
+ maizePerKg: z.number().nullable(),
25
+ soyaPerKg: z.number().nullable(),
26
+ estimatedMashNgnPerTon: z.number().nullable(),
27
+ note: z.string(),
28
+ });
29
+ export const poultryMarketSnapshotSchema = z.object({
30
+ data: z.object({
31
+ commodities: z.array(poultryMarketCommoditySchema),
32
+ feedBridge: poultryFeedBridgeSchema,
33
+ sellRestockBrief: z.string(),
34
+ city: z.string().nullable().optional(),
35
+ }),
36
+ });
37
+ export const produceListingStatusSchema = z.enum(['DRAFT', 'PUBLISHED', 'CLOSED']);
38
+ export const produceListingSchema = z.object({
39
+ id: z.string().uuid(),
40
+ farmId: z.string().uuid(),
41
+ productType: z.string(),
42
+ grade: z.string().nullable(),
43
+ quantity: z.number(),
44
+ unit: z.string(),
45
+ unitPrice: z.number(),
46
+ currency: z.string(),
47
+ availableFrom: z.string().datetime().nullable(),
48
+ availableTo: z.string().datetime().nullable(),
49
+ status: produceListingStatusSchema,
50
+ groupId: z.string().uuid().nullable(),
51
+ slug: z.string(),
52
+ notes: z.string().nullable(),
53
+ inquiryCount: z.number().int().nonnegative(),
54
+ createdAt: z.string().datetime(),
55
+ updatedAt: z.string().datetime(),
56
+ publicPath: z.string().optional(),
57
+ });
58
+ export const produceListingWriteSchema = z.object({
59
+ productType: z.string().min(1).max(80),
60
+ grade: z.string().max(40).optional().nullable(),
61
+ quantity: z.number().positive(),
62
+ unit: z.string().min(1).max(20),
63
+ unitPrice: z.number().nonnegative(),
64
+ currency: z.string().length(3).optional(),
65
+ availableFrom: z.string().datetime().optional().nullable(),
66
+ availableTo: z.string().datetime().optional().nullable(),
67
+ groupId: z.string().uuid().optional().nullable(),
68
+ notes: z.string().max(2000).optional().nullable(),
69
+ status: produceListingStatusSchema.optional(),
70
+ });
71
+ export const produceListingUpdateSchema = produceListingWriteSchema.partial();
72
+ export const poultryClimateReadingSchema = z.object({
73
+ value: z.number(),
74
+ unit: z.string(),
75
+ readAt: z.string().datetime(),
76
+ sensorId: z.string().uuid(),
77
+ sensorName: z.string(),
78
+ status: z.enum(['ok', 'warn', 'critical']),
79
+ });
80
+ export const poultryClimateHistoryPointSchema = z.object({
81
+ value: z.number(),
82
+ unit: z.string(),
83
+ readAt: z.string().datetime(),
84
+ sensorId: z.string().uuid(),
85
+ });
86
+ export const poultryClimateSnapshotSchema = z.object({
87
+ data: z.object({
88
+ groupId: z.string().uuid(),
89
+ temperature: poultryClimateReadingSchema.nullable(),
90
+ humidity: poultryClimateReadingSchema.nullable(),
91
+ thresholdStatus: z.enum(['ok', 'warn', 'critical', 'unknown']),
92
+ history: z.object({
93
+ temperature: z.array(poultryClimateHistoryPointSchema),
94
+ humidity: z.array(poultryClimateHistoryPointSchema),
95
+ }),
96
+ sensors: z.array(z.object({
97
+ id: z.string().uuid(),
98
+ name: z.string(),
99
+ type: z.string(),
100
+ status: z.string(),
101
+ lastReading: poultryClimateReadingSchema.nullable(),
102
+ lastSyncAt: z.string().datetime().nullable(),
103
+ })),
104
+ }),
105
+ });
106
+ export const poultryRouter = c.router({
107
+ getMarket: {
108
+ method: 'GET',
109
+ path: '/farms/:farmId/poultry/market',
110
+ pathParams: z.object({
111
+ farmId: z.string().uuid(),
112
+ }),
113
+ query: z.object({
114
+ city: z.string().max(80).optional(),
115
+ }),
116
+ responses: {
117
+ 200: poultryMarketSnapshotSchema,
118
+ 401: jsonApiErrorResponseSchema,
119
+ 404: jsonApiErrorResponseSchema,
120
+ },
121
+ summary: 'Poultry market snapshot',
122
+ description: 'Cascade: farm latest → corroborated peer reports (≥3 farms) → public/platform seed. Includes feed bridge and sell/restock brief.',
123
+ },
124
+ getFlockClimate: {
125
+ method: 'GET',
126
+ path: '/farms/:farmId/poultry/flocks/:groupId/climate',
127
+ pathParams: z.object({
128
+ farmId: z.string().uuid(),
129
+ groupId: z.string().uuid(),
130
+ }),
131
+ responses: {
132
+ 200: poultryClimateSnapshotSchema,
133
+ 401: jsonApiErrorResponseSchema,
134
+ 404: jsonApiErrorResponseSchema,
135
+ },
136
+ summary: 'Poultry flock pen climate',
137
+ description: 'Last temperature/humidity readings and 24h history for sensors bound to the flock (groupId).',
138
+ },
139
+ listListings: {
140
+ method: 'GET',
141
+ path: '/farms/:farmId/poultry/listings',
142
+ pathParams: z.object({ farmId: z.string().uuid() }),
143
+ responses: {
144
+ 200: z.object({ data: z.array(produceListingSchema) }),
145
+ 401: jsonApiErrorResponseSchema,
146
+ 404: jsonApiErrorResponseSchema,
147
+ },
148
+ summary: 'List produce listings for a farm',
149
+ },
150
+ createListing: {
151
+ method: 'POST',
152
+ path: '/farms/:farmId/poultry/listings',
153
+ pathParams: z.object({ farmId: z.string().uuid() }),
154
+ body: produceListingWriteSchema,
155
+ responses: {
156
+ 200: z.object({ data: produceListingSchema }),
157
+ 201: z.object({ data: produceListingSchema }),
158
+ 400: jsonApiErrorResponseSchema,
159
+ 401: jsonApiErrorResponseSchema,
160
+ 404: jsonApiErrorResponseSchema,
161
+ },
162
+ summary: 'Create a produce listing',
163
+ },
164
+ updateListing: {
165
+ method: 'PATCH',
166
+ path: '/farms/:farmId/poultry/listings/:listingId',
167
+ pathParams: z.object({
168
+ farmId: z.string().uuid(),
169
+ listingId: z.string().uuid(),
170
+ }),
171
+ body: produceListingUpdateSchema,
172
+ responses: {
173
+ 200: z.object({ data: produceListingSchema }),
174
+ 400: jsonApiErrorResponseSchema,
175
+ 401: jsonApiErrorResponseSchema,
176
+ 404: jsonApiErrorResponseSchema,
177
+ },
178
+ summary: 'Update a produce listing',
179
+ },
180
+ publishListing: {
181
+ method: 'POST',
182
+ path: '/farms/:farmId/poultry/listings/:listingId/publish',
183
+ pathParams: z.object({
184
+ farmId: z.string().uuid(),
185
+ listingId: z.string().uuid(),
186
+ }),
187
+ body: z.object({}).optional(),
188
+ responses: {
189
+ 200: z.object({ data: produceListingSchema }),
190
+ 401: jsonApiErrorResponseSchema,
191
+ 404: jsonApiErrorResponseSchema,
192
+ },
193
+ summary: 'Publish a produce listing (sets status + ensures slug)',
194
+ },
195
+ });