@deepintel-ltd/farmpro-contracts 1.7.14 → 1.7.20

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 (126) hide show
  1. package/dist/index.d.ts +18 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +17 -0
  4. package/dist/routes/agent-workflows.routes.d.ts +88 -88
  5. package/dist/routes/agents.routes.d.ts +3266 -6
  6. package/dist/routes/agents.routes.d.ts.map +1 -1
  7. package/dist/routes/agents.routes.js +130 -1
  8. package/dist/routes/analytics.routes.d.ts +20 -20
  9. package/dist/routes/cooperative.routes.d.ts +1327 -0
  10. package/dist/routes/cooperative.routes.d.ts.map +1 -0
  11. package/dist/routes/cooperative.routes.js +47 -0
  12. package/dist/routes/documents.routes.d.ts +855 -58
  13. package/dist/routes/documents.routes.d.ts.map +1 -1
  14. package/dist/routes/documents.routes.js +43 -1
  15. package/dist/routes/equipment.routes.d.ts +38 -38
  16. package/dist/routes/extension.routes.d.ts +2431 -0
  17. package/dist/routes/extension.routes.d.ts.map +1 -0
  18. package/dist/routes/extension.routes.js +75 -0
  19. package/dist/routes/farm-status.routes.d.ts +315 -0
  20. package/dist/routes/farm-status.routes.d.ts.map +1 -0
  21. package/dist/routes/farm-status.routes.js +26 -0
  22. package/dist/routes/farms.routes.d.ts +775 -0
  23. package/dist/routes/farms.routes.d.ts.map +1 -1
  24. package/dist/routes/farms.routes.js +15 -1
  25. package/dist/routes/fertigation.routes.d.ts +148 -148
  26. package/dist/routes/field-monitoring.routes.d.ts +557 -52
  27. package/dist/routes/field-monitoring.routes.d.ts.map +1 -1
  28. package/dist/routes/field-monitoring.routes.js +23 -1
  29. package/dist/routes/field-observations.routes.d.ts +56 -56
  30. package/dist/routes/fields.routes.d.ts +156 -155
  31. package/dist/routes/fields.routes.d.ts.map +1 -1
  32. package/dist/routes/finance.routes.d.ts +3493 -0
  33. package/dist/routes/finance.routes.d.ts.map +1 -1
  34. package/dist/routes/finance.routes.js +158 -1
  35. package/dist/routes/geofences.routes.d.ts.map +1 -1
  36. package/dist/routes/index.d.ts +18 -0
  37. package/dist/routes/index.d.ts.map +1 -1
  38. package/dist/routes/index.js +12 -0
  39. package/dist/routes/irrigation.routes.d.ts +6 -6
  40. package/dist/routes/live-monitor.routes.d.ts +513 -0
  41. package/dist/routes/live-monitor.routes.d.ts.map +1 -0
  42. package/dist/routes/live-monitor.routes.js +81 -0
  43. package/dist/routes/livestock-map.routes.d.ts +4 -4
  44. package/dist/routes/measurements.routes.d.ts +13 -4
  45. package/dist/routes/measurements.routes.d.ts.map +1 -1
  46. package/dist/routes/monitoring-visualization.routes.d.ts +40 -33
  47. package/dist/routes/monitoring-visualization.routes.d.ts.map +1 -1
  48. package/dist/routes/monitoring-visualization.routes.js +7 -4
  49. package/dist/routes/notifications.routes.d.ts +1350 -0
  50. package/dist/routes/notifications.routes.d.ts.map +1 -0
  51. package/dist/routes/notifications.routes.js +66 -0
  52. package/dist/routes/pest-disease-risk.routes.d.ts +20 -20
  53. package/dist/routes/prescription-maps.routes.d.ts +567 -20
  54. package/dist/routes/prescription-maps.routes.d.ts.map +1 -1
  55. package/dist/routes/prescription-maps.routes.js +18 -1
  56. package/dist/routes/soil-tests.routes.d.ts +30 -30
  57. package/dist/routes/subscriptions.routes.d.ts +14 -14
  58. package/dist/routes/team-payments.routes.d.ts +9571 -0
  59. package/dist/routes/team-payments.routes.d.ts.map +1 -0
  60. package/dist/routes/team-payments.routes.js +262 -0
  61. package/dist/routes/weather.routes.d.ts +545 -52
  62. package/dist/routes/weather.routes.d.ts.map +1 -1
  63. package/dist/routes/weather.routes.js +13 -1
  64. package/dist/routes/yield-prediction.routes.d.ts +30 -30
  65. package/dist/schemas/agent-workflows.schemas.d.ts +92 -92
  66. package/dist/schemas/agents.schemas.d.ts +1121 -0
  67. package/dist/schemas/agents.schemas.d.ts.map +1 -1
  68. package/dist/schemas/agents.schemas.js +181 -0
  69. package/dist/schemas/analytics.schemas.d.ts +56 -56
  70. package/dist/schemas/cooperative.schemas.d.ts +560 -0
  71. package/dist/schemas/cooperative.schemas.d.ts.map +1 -0
  72. package/dist/schemas/cooperative.schemas.js +71 -0
  73. package/dist/schemas/documents.schemas.d.ts +248 -48
  74. package/dist/schemas/documents.schemas.d.ts.map +1 -1
  75. package/dist/schemas/documents.schemas.js +38 -0
  76. package/dist/schemas/equipment.schemas.d.ts +30 -30
  77. package/dist/schemas/extension.schemas.d.ts +1204 -0
  78. package/dist/schemas/extension.schemas.d.ts.map +1 -0
  79. package/dist/schemas/extension.schemas.js +68 -0
  80. package/dist/schemas/farm-status.schemas.d.ts +451 -0
  81. package/dist/schemas/farm-status.schemas.d.ts.map +1 -0
  82. package/dist/schemas/farm-status.schemas.js +44 -0
  83. package/dist/schemas/farms.schemas.d.ts +591 -0
  84. package/dist/schemas/farms.schemas.d.ts.map +1 -1
  85. package/dist/schemas/farms.schemas.js +44 -0
  86. package/dist/schemas/fertigation.schemas.d.ts +50 -50
  87. package/dist/schemas/field-monitoring.schemas.d.ts +318 -42
  88. package/dist/schemas/field-monitoring.schemas.d.ts.map +1 -1
  89. package/dist/schemas/field-monitoring.schemas.js +9 -0
  90. package/dist/schemas/field-observations.schemas.d.ts +45 -44
  91. package/dist/schemas/field-observations.schemas.d.ts.map +1 -1
  92. package/dist/schemas/fields.schemas.d.ts +188 -186
  93. package/dist/schemas/fields.schemas.d.ts.map +1 -1
  94. package/dist/schemas/fields.schemas.js +10 -2
  95. package/dist/schemas/finance.schemas.d.ts +1057 -0
  96. package/dist/schemas/finance.schemas.d.ts.map +1 -1
  97. package/dist/schemas/finance.schemas.js +170 -0
  98. package/dist/schemas/irrigation.schemas.d.ts +8 -8
  99. package/dist/schemas/live-monitor.schemas.d.ts +596 -0
  100. package/dist/schemas/live-monitor.schemas.d.ts.map +1 -0
  101. package/dist/schemas/live-monitor.schemas.js +107 -0
  102. package/dist/schemas/livestock-map.schemas.d.ts +10 -10
  103. package/dist/schemas/measurements.schemas.d.ts +21 -8
  104. package/dist/schemas/measurements.schemas.d.ts.map +1 -1
  105. package/dist/schemas/measurements.schemas.js +13 -6
  106. package/dist/schemas/monitoring-visualization.schemas.d.ts +47 -40
  107. package/dist/schemas/monitoring-visualization.schemas.d.ts.map +1 -1
  108. package/dist/schemas/monitoring-visualization.schemas.js +24 -16
  109. package/dist/schemas/notifications.schemas.d.ts +464 -0
  110. package/dist/schemas/notifications.schemas.d.ts.map +1 -0
  111. package/dist/schemas/notifications.schemas.js +40 -0
  112. package/dist/schemas/pest-disease-risk.schemas.d.ts +18 -18
  113. package/dist/schemas/prescription-maps.schemas.d.ts +41 -18
  114. package/dist/schemas/prescription-maps.schemas.d.ts.map +1 -1
  115. package/dist/schemas/prescription-maps.schemas.js +8 -0
  116. package/dist/schemas/recommendations.schemas.d.ts +2 -2
  117. package/dist/schemas/soil-tests.schemas.d.ts +28 -28
  118. package/dist/schemas/subscriptions.schemas.d.ts +22 -22
  119. package/dist/schemas/team-payments.schemas.d.ts +2604 -0
  120. package/dist/schemas/team-payments.schemas.d.ts.map +1 -0
  121. package/dist/schemas/team-payments.schemas.js +151 -0
  122. package/dist/schemas/weather.schemas.d.ts +789 -112
  123. package/dist/schemas/weather.schemas.d.ts.map +1 -1
  124. package/dist/schemas/weather.schemas.js +37 -0
  125. package/dist/schemas/yield-prediction.schemas.d.ts +12 -12
  126. package/package.json +1 -1
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import { cameraSchema, sensorSchema, } from './monitoring-visualization.schemas';
3
+ // ============================================================================
4
+ // Live Monitor — Farm-level aggregation schemas
5
+ // ============================================================================
6
+ export const liveMonitorErrorSchema = z.object({
7
+ message: z.string(),
8
+ code: z.string(),
9
+ });
10
+ export const liveMonitorSummarySchema = z.object({
11
+ farmId: z.string().uuid(),
12
+ farmName: z.string(),
13
+ camerasOnline: z.number().int().min(0),
14
+ camerasOffline: z.number().int().min(0),
15
+ camerasTotal: z.number().int().min(0),
16
+ sensorsActive: z.number().int().min(0),
17
+ sensorsInactive: z.number().int().min(0),
18
+ sensorsTotal: z.number().int().min(0),
19
+ activeAlerts: z.number().int().min(0),
20
+ unreadAlerts: z.number().int().min(0),
21
+ fieldsWithMonitoring: z.number().int().min(0),
22
+ lastUpdatedAt: z.string().datetime(),
23
+ });
24
+ export const liveMonitorCameraSchema = cameraSchema.extend({
25
+ fieldId: z.string().uuid(),
26
+ fieldName: z.string(),
27
+ });
28
+ export const liveMonitorCamerasResponseSchema = z.object({
29
+ farmId: z.string().uuid(),
30
+ cameras: z.array(liveMonitorCameraSchema),
31
+ totalCameras: z.number().int().min(0),
32
+ });
33
+ export const liveMonitorSensorSchema = sensorSchema.extend({
34
+ fieldId: z.string().uuid(),
35
+ fieldName: z.string(),
36
+ });
37
+ export const liveMonitorSensorsResponseSchema = z.object({
38
+ farmId: z.string().uuid(),
39
+ sensors: z.array(liveMonitorSensorSchema),
40
+ totalSensors: z.number().int().min(0),
41
+ });
42
+ export const liveMonitorEventTypeSchema = z.enum([
43
+ 'alert',
44
+ 'camera_motion',
45
+ 'camera_snapshot',
46
+ 'camera_status',
47
+ 'sensor_threshold',
48
+ 'weather',
49
+ 'ndvi_change',
50
+ ]);
51
+ export const liveMonitorEventSeveritySchema = z.enum([
52
+ 'info',
53
+ 'low',
54
+ 'medium',
55
+ 'high',
56
+ 'critical',
57
+ ]);
58
+ export const liveMonitorEventSchema = z.object({
59
+ id: z.string(),
60
+ type: liveMonitorEventTypeSchema,
61
+ severity: liveMonitorEventSeveritySchema.optional(),
62
+ title: z.string(),
63
+ message: z.string(),
64
+ timestamp: z.string().datetime(),
65
+ fieldId: z.string().uuid().optional(),
66
+ fieldName: z.string().optional(),
67
+ cameraId: z.string().uuid().optional(),
68
+ sensorId: z.string().uuid().optional(),
69
+ icon: z.string().optional(),
70
+ });
71
+ export const liveMonitorEventsQuerySchema = z.object({
72
+ limit: z
73
+ .string()
74
+ .transform(Number)
75
+ .pipe(z.number().int().min(1).max(100))
76
+ .default('20'),
77
+ since: z.string().datetime().optional(),
78
+ });
79
+ export const liveMonitorEventsResponseSchema = z.object({
80
+ farmId: z.string().uuid(),
81
+ events: z.array(liveMonitorEventSchema),
82
+ totalEvents: z.number().int().min(0),
83
+ });
84
+ export const cameraStreamTokenResponseSchema = z.object({
85
+ cameraId: z.string().uuid(),
86
+ farmId: z.string().uuid(),
87
+ token: z.string(),
88
+ expiresAt: z.string().datetime(),
89
+ streamUrl: z.string().url().nullable(),
90
+ quality: z.enum(['low', 'medium', 'high']).default('medium'),
91
+ });
92
+ export const captureSnapshotQuerySchema = z.object({
93
+ dataSaver: z
94
+ .string()
95
+ .optional()
96
+ .transform((val) => val === 'true' || val === '1'),
97
+ });
98
+ export const captureSnapshotResponseSchema = z.object({
99
+ snapshotId: z.string().uuid(),
100
+ cameraId: z.string().uuid(),
101
+ farmId: z.string().uuid(),
102
+ imageUrl: z.string().url(),
103
+ capturedAt: z.string().datetime(),
104
+ triggerType: z.enum(['manual', 'scheduled', 'motion']),
105
+ dataSaver: z.boolean(),
106
+ resolution: z.string().nullable(),
107
+ });
@@ -49,13 +49,13 @@ export declare const movementTrailPointSchema: z.ZodObject<{
49
49
  lng: z.ZodNumber;
50
50
  timestamp: z.ZodString;
51
51
  }, "strip", z.ZodTypeAny, {
52
- timestamp: string;
53
52
  lat: number;
54
53
  lng: number;
55
- }, {
56
54
  timestamp: string;
55
+ }, {
57
56
  lat: number;
58
57
  lng: number;
58
+ timestamp: string;
59
59
  }>;
60
60
  export declare const livestockMovementTrailSchema: z.ZodObject<{
61
61
  livestockId: z.ZodString;
@@ -64,13 +64,13 @@ export declare const livestockMovementTrailSchema: z.ZodObject<{
64
64
  lng: z.ZodNumber;
65
65
  timestamp: z.ZodString;
66
66
  }, "strip", z.ZodTypeAny, {
67
- timestamp: string;
68
67
  lat: number;
69
68
  lng: number;
70
- }, {
71
69
  timestamp: string;
70
+ }, {
72
71
  lat: number;
73
72
  lng: number;
73
+ timestamp: string;
74
74
  }>, "many">;
75
75
  dateRange: z.ZodObject<{
76
76
  start: z.ZodString;
@@ -89,9 +89,9 @@ export declare const livestockMovementTrailSchema: z.ZodObject<{
89
89
  };
90
90
  livestockId: string;
91
91
  points: {
92
- timestamp: string;
93
92
  lat: number;
94
93
  lng: number;
94
+ timestamp: string;
95
95
  }[];
96
96
  }, {
97
97
  dateRange: {
@@ -100,9 +100,9 @@ export declare const livestockMovementTrailSchema: z.ZodObject<{
100
100
  };
101
101
  livestockId: string;
102
102
  points: {
103
- timestamp: string;
104
103
  lat: number;
105
104
  lng: number;
105
+ timestamp: string;
106
106
  }[];
107
107
  }>;
108
108
  export declare const heatmapPointSchema: z.ZodObject<{
@@ -229,13 +229,13 @@ export declare const movementTrailListResponseSchema: z.ZodArray<z.ZodObject<{
229
229
  lng: z.ZodNumber;
230
230
  timestamp: z.ZodString;
231
231
  }, "strip", z.ZodTypeAny, {
232
- timestamp: string;
233
232
  lat: number;
234
233
  lng: number;
235
- }, {
236
234
  timestamp: string;
235
+ }, {
237
236
  lat: number;
238
237
  lng: number;
238
+ timestamp: string;
239
239
  }>, "many">;
240
240
  dateRange: z.ZodObject<{
241
241
  start: z.ZodString;
@@ -254,9 +254,9 @@ export declare const movementTrailListResponseSchema: z.ZodArray<z.ZodObject<{
254
254
  };
255
255
  livestockId: string;
256
256
  points: {
257
- timestamp: string;
258
257
  lat: number;
259
258
  lng: number;
259
+ timestamp: string;
260
260
  }[];
261
261
  }, {
262
262
  dateRange: {
@@ -265,9 +265,9 @@ export declare const movementTrailListResponseSchema: z.ZodArray<z.ZodObject<{
265
265
  };
266
266
  livestockId: string;
267
267
  points: {
268
- timestamp: string;
269
268
  lat: number;
270
269
  lng: number;
270
+ timestamp: string;
271
271
  }[];
272
272
  }>, "many">;
273
273
  export declare const heatmapResponseSchema: z.ZodArray<z.ZodObject<{
@@ -1,8 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
- * Measurement type enum matching Prisma MeasurementType
3
+ * Measurement type enum matching Prisma MeasurementType.
4
+ * API accepts both uppercase and lowercase (plan uses lowercase).
4
5
  */
5
6
  export declare const measurementTypeSchema: z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS"]>;
7
+ export declare const measurementTypeInputSchema: z.ZodEffects<z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS", "distance", "area", "perimeter", "radius"]>, "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS", "area" | "distance" | "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | "perimeter" | "radius">;
6
8
  /**
7
9
  * Segment schema for multi-point measurements
8
10
  */
@@ -21,7 +23,8 @@ export declare const measurementSegmentSchema: z.ZodObject<{
21
23
  */
22
24
  export declare const coordinatePointSchema: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
23
25
  /**
24
- * Measurement response schema
26
+ * Measurement response schema.
27
+ * Includes optional "formatted" (e.g. "980 meters") for map plan alignment.
25
28
  */
26
29
  export declare const measurementSchema: z.ZodObject<{
27
30
  id: z.ZodString;
@@ -32,6 +35,7 @@ export declare const measurementSchema: z.ZodObject<{
32
35
  points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
33
36
  result: z.ZodNumber;
34
37
  unit: z.ZodString;
38
+ formatted: z.ZodOptional<z.ZodString>;
35
39
  segments: z.ZodNullable<z.ZodArray<z.ZodObject<{
36
40
  distance: z.ZodNumber;
37
41
  bearing: z.ZodOptional<z.ZodNumber>;
@@ -61,6 +65,7 @@ export declare const measurementSchema: z.ZodObject<{
61
65
  distance: number;
62
66
  bearing?: number | undefined;
63
67
  }[] | null;
68
+ formatted?: string | undefined;
64
69
  }, {
65
70
  type: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS";
66
71
  id: string;
@@ -77,12 +82,14 @@ export declare const measurementSchema: z.ZodObject<{
77
82
  distance: number;
78
83
  bearing?: number | undefined;
79
84
  }[] | null;
85
+ formatted?: string | undefined;
80
86
  }>;
81
87
  /**
82
- * Create measurement request body schema
88
+ * Create measurement request body schema.
89
+ * Type accepts lowercase (distance, area, etc.) or uppercase; normalized to uppercase.
83
90
  */
84
91
  export declare const createMeasurementBodySchema: z.ZodObject<{
85
- type: z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS"]>;
92
+ type: z.ZodEffects<z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS", "distance", "area", "perimeter", "radius"]>, "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS", "area" | "distance" | "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | "perimeter" | "radius">;
86
93
  label: z.ZodOptional<z.ZodString>;
87
94
  points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
88
95
  result: z.ZodNumber;
@@ -94,21 +101,21 @@ export declare const createMeasurementBodySchema: z.ZodObject<{
94
101
  points: [number, number][];
95
102
  label?: string | undefined;
96
103
  }, {
97
- type: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS";
104
+ type: "area" | "distance" | "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | "perimeter" | "radius";
98
105
  unit: string;
99
106
  result: number;
100
107
  points: [number, number][];
101
108
  label?: string | undefined;
102
109
  }>;
103
110
  /**
104
- * Query schema for filtering measurements by type
111
+ * Query schema for filtering measurements by type (accepts lowercase or uppercase)
105
112
  */
106
113
  export declare const measurementListQuerySchema: z.ZodObject<{
107
- type: z.ZodOptional<z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS"]>>;
114
+ type: z.ZodOptional<z.ZodEffects<z.ZodEnum<["DISTANCE", "AREA", "PERIMETER", "RADIUS", "distance", "area", "perimeter", "radius"]>, "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS", "area" | "distance" | "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | "perimeter" | "radius">>;
108
115
  }, "strip", z.ZodTypeAny, {
109
116
  type?: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | undefined;
110
117
  }, {
111
- type?: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | undefined;
118
+ type?: "area" | "distance" | "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS" | "perimeter" | "radius" | undefined;
112
119
  }>;
113
120
  /**
114
121
  * List response schema
@@ -122,6 +129,7 @@ export declare const measurementListResponseSchema: z.ZodArray<z.ZodObject<{
122
129
  points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
123
130
  result: z.ZodNumber;
124
131
  unit: z.ZodString;
132
+ formatted: z.ZodOptional<z.ZodString>;
125
133
  segments: z.ZodNullable<z.ZodArray<z.ZodObject<{
126
134
  distance: z.ZodNumber;
127
135
  bearing: z.ZodOptional<z.ZodNumber>;
@@ -151,6 +159,7 @@ export declare const measurementListResponseSchema: z.ZodArray<z.ZodObject<{
151
159
  distance: number;
152
160
  bearing?: number | undefined;
153
161
  }[] | null;
162
+ formatted?: string | undefined;
154
163
  }, {
155
164
  type: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS";
156
165
  id: string;
@@ -167,6 +176,7 @@ export declare const measurementListResponseSchema: z.ZodArray<z.ZodObject<{
167
176
  distance: number;
168
177
  bearing?: number | undefined;
169
178
  }[] | null;
179
+ formatted?: string | undefined;
170
180
  }>, "many">;
171
181
  /**
172
182
  * Single measurement response schema
@@ -180,6 +190,7 @@ export declare const measurementSingleResponseSchema: z.ZodObject<{
180
190
  points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, "many">;
181
191
  result: z.ZodNumber;
182
192
  unit: z.ZodString;
193
+ formatted: z.ZodOptional<z.ZodString>;
183
194
  segments: z.ZodNullable<z.ZodArray<z.ZodObject<{
184
195
  distance: z.ZodNumber;
185
196
  bearing: z.ZodOptional<z.ZodNumber>;
@@ -209,6 +220,7 @@ export declare const measurementSingleResponseSchema: z.ZodObject<{
209
220
  distance: number;
210
221
  bearing?: number | undefined;
211
222
  }[] | null;
223
+ formatted?: string | undefined;
212
224
  }, {
213
225
  type: "DISTANCE" | "AREA" | "PERIMETER" | "RADIUS";
214
226
  id: string;
@@ -225,6 +237,7 @@ export declare const measurementSingleResponseSchema: z.ZodObject<{
225
237
  distance: number;
226
238
  bearing?: number | undefined;
227
239
  }[] | null;
240
+ formatted?: string | undefined;
228
241
  }>;
229
242
  export type MeasurementType = z.infer<typeof measurementTypeSchema>;
230
243
  export type MeasurementSegment = z.infer<typeof measurementSegmentSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"measurements.schemas.d.ts","sourceRoot":"","sources":["../../src/schemas/measurements.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,qBAAqB,wDAAsD,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,8CAAoC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;EAMtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAA6B,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoB,CAAC;AAGjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"measurements.schemas.d.ts","sourceRoot":"","sources":["../../src/schemas/measurements.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wDAAsD,CAAC;AACzF,eAAO,MAAM,0BAA0B,4PAE6C,CAAC;AAErF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,8CAAoC,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;EAMtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAA6B,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoB,CAAC;AAGjE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -1,8 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
- * Measurement type enum matching Prisma MeasurementType
3
+ * Measurement type enum matching Prisma MeasurementType.
4
+ * API accepts both uppercase and lowercase (plan uses lowercase).
4
5
  */
5
6
  export const measurementTypeSchema = z.enum(['DISTANCE', 'AREA', 'PERIMETER', 'RADIUS']);
7
+ export const measurementTypeInputSchema = z
8
+ .enum(['DISTANCE', 'AREA', 'PERIMETER', 'RADIUS', 'distance', 'area', 'perimeter', 'radius'])
9
+ .transform((s) => s.toUpperCase());
6
10
  /**
7
11
  * Segment schema for multi-point measurements
8
12
  */
@@ -15,7 +19,8 @@ export const measurementSegmentSchema = z.object({
15
19
  */
16
20
  export const coordinatePointSchema = z.tuple([z.number(), z.number()]);
17
21
  /**
18
- * Measurement response schema
22
+ * Measurement response schema.
23
+ * Includes optional "formatted" (e.g. "980 meters") for map plan alignment.
19
24
  */
20
25
  export const measurementSchema = z.object({
21
26
  id: z.string().uuid(),
@@ -26,26 +31,28 @@ export const measurementSchema = z.object({
26
31
  points: z.array(coordinatePointSchema),
27
32
  result: z.number(),
28
33
  unit: z.string(),
34
+ formatted: z.string().optional(), // e.g. "980 meters" for display
29
35
  segments: z.array(measurementSegmentSchema).nullable(),
30
36
  createdBy: z.string().uuid().nullable(),
31
37
  createdAt: z.string().datetime(),
32
38
  updatedAt: z.string().datetime(),
33
39
  });
34
40
  /**
35
- * Create measurement request body schema
41
+ * Create measurement request body schema.
42
+ * Type accepts lowercase (distance, area, etc.) or uppercase; normalized to uppercase.
36
43
  */
37
44
  export const createMeasurementBodySchema = z.object({
38
- type: measurementTypeSchema,
45
+ type: measurementTypeInputSchema,
39
46
  label: z.string().max(200).optional(),
40
47
  points: z.array(coordinatePointSchema).min(1, 'At least one point is required'),
41
48
  result: z.number(),
42
49
  unit: z.string().max(20),
43
50
  });
44
51
  /**
45
- * Query schema for filtering measurements by type
52
+ * Query schema for filtering measurements by type (accepts lowercase or uppercase)
46
53
  */
47
54
  export const measurementListQuerySchema = z.object({
48
- type: measurementTypeSchema.optional(),
55
+ type: measurementTypeInputSchema.optional(),
49
56
  });
50
57
  /**
51
58
  * List response schema