aivilife-contracts 5.1.0 → 5.3.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.
@@ -0,0 +1,741 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/order/order.enums.ts
4
+ var OrderDeliveryMethod = /* @__PURE__ */ ((OrderDeliveryMethod2) => {
5
+ OrderDeliveryMethod2["PICKUP"] = "PICKUP";
6
+ return OrderDeliveryMethod2;
7
+ })(OrderDeliveryMethod || {});
8
+ var OrderPaymentMethod = /* @__PURE__ */ ((OrderPaymentMethod2) => {
9
+ OrderPaymentMethod2["CASH"] = "CASH";
10
+ OrderPaymentMethod2["MAIN_WALLET"] = "MAIN_WALLET";
11
+ return OrderPaymentMethod2;
12
+ })(OrderPaymentMethod || {});
13
+ var OrderStatus = /* @__PURE__ */ ((OrderStatus2) => {
14
+ OrderStatus2["PENDING_PAYMENT"] = "PENDING_PAYMENT";
15
+ OrderStatus2["PROCESSING"] = "PROCESSING";
16
+ OrderStatus2["READY_FOR_PICKUP"] = "READY_FOR_PICKUP";
17
+ OrderStatus2["COMPLETED"] = "COMPLETED";
18
+ OrderStatus2["CANCELLED"] = "CANCELLED";
19
+ return OrderStatus2;
20
+ })(OrderStatus || {});
21
+ var OrderPaymentStatus = /* @__PURE__ */ ((OrderPaymentStatus2) => {
22
+ OrderPaymentStatus2["AWAITING_RECEIPT"] = "AWAITING_RECEIPT";
23
+ OrderPaymentStatus2["UNDER_REVIEW"] = "UNDER_REVIEW";
24
+ OrderPaymentStatus2["REJECTED"] = "REJECTED";
25
+ OrderPaymentStatus2["PAID"] = "PAID";
26
+ OrderPaymentStatus2["CANCELLED"] = "CANCELLED";
27
+ return OrderPaymentStatus2;
28
+ })(OrderPaymentStatus || {});
29
+ var OrderReceiptStatus = /* @__PURE__ */ ((OrderReceiptStatus2) => {
30
+ OrderReceiptStatus2["UNDER_REVIEW"] = "UNDER_REVIEW";
31
+ OrderReceiptStatus2["APPROVED"] = "APPROVED";
32
+ OrderReceiptStatus2["REJECTED"] = "REJECTED";
33
+ return OrderReceiptStatus2;
34
+ })(OrderReceiptStatus || {});
35
+ var OrderReceiptDecision = /* @__PURE__ */ ((OrderReceiptDecision2) => {
36
+ OrderReceiptDecision2["APPROVE"] = "APPROVE";
37
+ OrderReceiptDecision2["REJECT"] = "REJECT";
38
+ return OrderReceiptDecision2;
39
+ })(OrderReceiptDecision || {});
40
+ var OrderStockAvailability = /* @__PURE__ */ ((OrderStockAvailability2) => {
41
+ OrderStockAvailability2["AVAILABLE"] = "AVAILABLE";
42
+ OrderStockAvailability2["OUT_OF_STOCK"] = "OUT_OF_STOCK";
43
+ OrderStockAvailability2["INSUFFICIENT_STOCK"] = "INSUFFICIENT_STOCK";
44
+ return OrderStockAvailability2;
45
+ })(OrderStockAvailability || {});
46
+ var OrderReservationStatus = /* @__PURE__ */ ((OrderReservationStatus2) => {
47
+ OrderReservationStatus2["ACTIVE"] = "ACTIVE";
48
+ OrderReservationStatus2["RELEASED"] = "RELEASED";
49
+ return OrderReservationStatus2;
50
+ })(OrderReservationStatus || {});
51
+ var OrderEventType = /* @__PURE__ */ ((OrderEventType2) => {
52
+ OrderEventType2["CREATED"] = "CREATED";
53
+ OrderEventType2["WALLET_DEBITED"] = "WALLET_DEBITED";
54
+ OrderEventType2["RECEIPT_UPLOADED"] = "RECEIPT_UPLOADED";
55
+ OrderEventType2["PAYMENT_APPROVED"] = "PAYMENT_APPROVED";
56
+ OrderEventType2["PAYMENT_REJECTED"] = "PAYMENT_REJECTED";
57
+ OrderEventType2["CANCELLED_TIMEOUT"] = "CANCELLED_TIMEOUT";
58
+ OrderEventType2["WALLET_REFUNDED"] = "WALLET_REFUNDED";
59
+ return OrderEventType2;
60
+ })(OrderEventType || {});
61
+ var OrderNotificationType = /* @__PURE__ */ ((OrderNotificationType2) => {
62
+ OrderNotificationType2["ORDER_CREATED"] = "ORDER_CREATED";
63
+ OrderNotificationType2["RECEIPT_RECEIVED"] = "RECEIPT_RECEIVED";
64
+ OrderNotificationType2["PAYMENT_APPROVED"] = "PAYMENT_APPROVED";
65
+ OrderNotificationType2["PAYMENT_REJECTED"] = "PAYMENT_REJECTED";
66
+ OrderNotificationType2["ORDER_CANCELLED"] = "ORDER_CANCELLED";
67
+ return OrderNotificationType2;
68
+ })(OrderNotificationType || {});
69
+
70
+ // src/catalog/catalog.enums.ts
71
+ var ProductUnit = {
72
+ CAPSULE: "CAPSULE",
73
+ GRAM: "GRAM",
74
+ MILLILITER: "MILLILITER",
75
+ PIECE: "PIECE"
76
+ };
77
+
78
+ // src/cart/cart.enums.ts
79
+ var CartItemAvailability = /* @__PURE__ */ ((CartItemAvailability2) => {
80
+ CartItemAvailability2["AVAILABLE"] = "AVAILABLE";
81
+ CartItemAvailability2["PRODUCT_UNAVAILABLE"] = "PRODUCT_UNAVAILABLE";
82
+ CartItemAvailability2["VARIANT_UNAVAILABLE"] = "VARIANT_UNAVAILABLE";
83
+ return CartItemAvailability2;
84
+ })(CartItemAvailability || {});
85
+
86
+ // src/cart/cart.schemas.ts
87
+ var PublicIdSchema = z.uuid();
88
+ var QuantitySchema = z.number().int().min(1).max(999);
89
+ var DecimalSchema = z.string().regex(/^\d{1,16}(?:\.\d{1,2})?$/);
90
+ z.object({
91
+ variantPublicId: PublicIdSchema,
92
+ quantity: QuantitySchema.default(1)
93
+ });
94
+ z.object({
95
+ quantity: QuantitySchema,
96
+ version: z.number().int().positive()
97
+ });
98
+ z.object({
99
+ itemPublicId: PublicIdSchema
100
+ });
101
+ var CartItemSchema = z.object({
102
+ publicId: PublicIdSchema,
103
+ quantity: QuantitySchema,
104
+ version: z.number().int().positive(),
105
+ availability: z.enum(CartItemAvailability),
106
+ product: z.object({
107
+ publicId: PublicIdSchema,
108
+ slug: z.string(),
109
+ name: z.string(),
110
+ coverContentUrl: z.string().nullable()
111
+ }),
112
+ variant: z.object({
113
+ publicId: PublicIdSchema,
114
+ sku: z.string(),
115
+ quantity: z.string(),
116
+ unit: z.enum(ProductUnit),
117
+ priceUsd: DecimalSchema,
118
+ pv: DecimalSchema
119
+ }),
120
+ lineTotalUsd: DecimalSchema,
121
+ lineTotalPv: DecimalSchema,
122
+ createdAt: z.string().datetime(),
123
+ updatedAt: z.string().datetime()
124
+ });
125
+ var CartSchema = z.object({
126
+ publicId: PublicIdSchema.nullable(),
127
+ items: z.array(CartItemSchema),
128
+ totalQuantity: z.number().int().nonnegative(),
129
+ subtotalUsd: DecimalSchema,
130
+ totalPv: DecimalSchema,
131
+ hasUnavailableItems: z.boolean(),
132
+ updatedAt: z.string().datetime().nullable()
133
+ });
134
+ var PageSchema = z.coerce.number().int().min(1).default(1);
135
+ var LimitSchema = z.coerce.number().int().min(1).max(100).default(20);
136
+ var SortOrderSchema = z.enum(["asc", "desc"]).default("desc");
137
+ z.object({
138
+ page: PageSchema.optional(),
139
+ limit: LimitSchema.optional()
140
+ });
141
+
142
+ // src/common/list-query.schemas.ts
143
+ var DateFromSchema = z.string().datetime().optional();
144
+ var DateToSchema = z.string().datetime().optional();
145
+ var SearchSchema = z.string().trim().min(1).max(255).optional();
146
+ var BaseListQuerySchema = z.object({
147
+ page: PageSchema.optional(),
148
+ limit: LimitSchema.optional(),
149
+ search: SearchSchema,
150
+ dateFrom: DateFromSchema,
151
+ dateTo: DateToSchema,
152
+ sortOrder: SortOrderSchema.optional()
153
+ });
154
+
155
+ // src/warehouse/warehouse.enums.ts
156
+ var WarehouseStatus = {
157
+ DRAFT: "DRAFT",
158
+ ACTIVE: "ACTIVE",
159
+ SUSPENDED: "SUSPENDED",
160
+ ARCHIVED: "ARCHIVED"
161
+ };
162
+ var WarehouseAssignmentType = {
163
+ STAFF: "STAFF"
164
+ };
165
+ var WarehouseRequestType = {
166
+ REPLENISHMENT: "REPLENISHMENT",
167
+ WRITE_OFF: "WRITE_OFF",
168
+ TRANSFER: "TRANSFER"
169
+ };
170
+ var WarehouseRequestStatus = {
171
+ DRAFT: "DRAFT",
172
+ PENDING_REVIEW: "PENDING_REVIEW",
173
+ APPROVED: "APPROVED",
174
+ READY_TO_SHIP: "READY_TO_SHIP",
175
+ IN_TRANSIT: "IN_TRANSIT",
176
+ COMPLETED: "COMPLETED",
177
+ REJECTED: "REJECTED",
178
+ CANCELLED: "CANCELLED",
179
+ DISCREPANCY_REPORTED: "DISCREPANCY_REPORTED",
180
+ FAILED: "FAILED"
181
+ };
182
+ var WarehouseMovementType = {
183
+ REPLENISHMENT: "REPLENISHMENT",
184
+ WRITE_OFF: "WRITE_OFF",
185
+ TRANSFER_OUT: "TRANSFER_OUT",
186
+ TRANSFER_IN: "TRANSFER_IN",
187
+ ORDER_ISSUE: "ORDER_ISSUE"
188
+ };
189
+ var WarehouseWriteOffReason = {
190
+ DEFECT: "DEFECT",
191
+ DAMAGED: "DAMAGED",
192
+ EXPIRED: "EXPIRED",
193
+ LOST: "LOST",
194
+ INVENTORY_SHORTAGE: "INVENTORY_SHORTAGE",
195
+ OTHER: "OTHER"
196
+ };
197
+ var WarehouseWeekday = {
198
+ MONDAY: "MONDAY",
199
+ TUESDAY: "TUESDAY",
200
+ WEDNESDAY: "WEDNESDAY",
201
+ THURSDAY: "THURSDAY",
202
+ FRIDAY: "FRIDAY",
203
+ SATURDAY: "SATURDAY",
204
+ SUNDAY: "SUNDAY"
205
+ };
206
+
207
+ // src/warehouse/warehouse.schemas.ts
208
+ var PublicIdSchema2 = z.uuid();
209
+ var CodeSchema = z.string().trim().toUpperCase().regex(/^[A-Z0-9][A-Z0-9_-]{1,63}$/);
210
+ var DateSchema = z.iso.date();
211
+ var DateTimeSchema = z.iso.datetime();
212
+ var TimeSchema = z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/);
213
+ var NullableTrimmedSchema = (max) => z.string().trim().min(1).max(max).nullable().optional();
214
+ var WarehouseDayScheduleSchema = z.object({
215
+ isOpen: z.boolean(),
216
+ opensAt: TimeSchema.nullable(),
217
+ closesAt: TimeSchema.nullable()
218
+ }).superRefine((value, context) => {
219
+ if (value.isOpen && (!value.opensAt || !value.closesAt)) {
220
+ context.addIssue({
221
+ code: "custom",
222
+ message: "\u0414\u043B\u044F \u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E \u0434\u043D\u044F \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u0432\u0440\u0435\u043C\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F \u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F"
223
+ });
224
+ }
225
+ if (!value.isOpen && (value.opensAt || value.closesAt)) {
226
+ context.addIssue({
227
+ code: "custom",
228
+ message: "\u0414\u043B\u044F \u0432\u044B\u0445\u043E\u0434\u043D\u043E\u0433\u043E \u0434\u043D\u044F \u0432\u0440\u0435\u043C\u044F \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u043C"
229
+ });
230
+ }
231
+ if (value.isOpen && value.opensAt && value.closesAt && value.opensAt >= value.closesAt) {
232
+ context.addIssue({
233
+ code: "custom",
234
+ message: "\u0412\u0440\u0435\u043C\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043F\u043E\u0437\u0436\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F"
235
+ });
236
+ }
237
+ });
238
+ var WarehouseWeeklyScheduleSchema = z.record(
239
+ z.enum(WarehouseWeekday),
240
+ WarehouseDayScheduleSchema
241
+ );
242
+ var WarehouseFieldsSchema = z.object({
243
+ name: z.string().trim().min(2).max(160),
244
+ countryCode: z.string().trim().toUpperCase().length(2),
245
+ country: z.string().trim().min(2).max(120),
246
+ city: z.string().trim().min(1).max(160),
247
+ address: z.string().trim().min(3).max(500),
248
+ phoneNumber: z.string().trim().min(7).max(32),
249
+ mapUrl: z.url().max(2e3).refine((value) => new URL(value).protocol === "https:", {
250
+ message: "\u0421\u0441\u044B\u043B\u043A\u0430 \u043D\u0430 \u043A\u0430\u0440\u0442\u0443 \u0434\u043E\u043B\u0436\u043D\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C HTTPS"
251
+ }),
252
+ timezone: z.string().trim().min(1).max(64),
253
+ schedule: WarehouseWeeklyScheduleSchema,
254
+ isPickupPoint: z.boolean()
255
+ });
256
+ WarehouseFieldsSchema.extend({
257
+ code: CodeSchema,
258
+ isPickupPoint: WarehouseFieldsSchema.shape.isPickupPoint.default(true)
259
+ });
260
+ WarehouseFieldsSchema.partial().extend({ version: z.number().int().positive() }).required({ version: true });
261
+ z.object({
262
+ publicId: PublicIdSchema2
263
+ });
264
+ z.object({
265
+ publicId: PublicIdSchema2,
266
+ assignmentPublicId: PublicIdSchema2
267
+ });
268
+ BaseListQuerySchema.extend({
269
+ status: z.enum(WarehouseStatus).optional(),
270
+ countryCode: z.string().trim().toUpperCase().length(2).optional(),
271
+ city: z.string().trim().min(1).max(160).optional()
272
+ });
273
+ z.object({
274
+ search: z.string().trim().min(2).max(100),
275
+ page: z.coerce.number().int().min(1).default(1),
276
+ limit: z.coerce.number().int().min(1).max(20).default(20)
277
+ });
278
+ z.object({
279
+ userUuid: z.string().trim().min(3).max(32),
280
+ type: z.enum(WarehouseAssignmentType)
281
+ });
282
+ var WarehouseRequestLineInputSchema = z.object({
283
+ variantPublicId: PublicIdSchema2,
284
+ quantity: z.number().int().positive().max(1e9),
285
+ expiresAt: DateSchema.nullable().optional(),
286
+ batchNumber: NullableTrimmedSchema(120),
287
+ comment: NullableTrimmedSchema(1e3)
288
+ });
289
+ z.object({
290
+ type: z.enum(WarehouseRequestType),
291
+ sourceWarehousePublicId: PublicIdSchema2.nullable().optional(),
292
+ destinationWarehousePublicId: PublicIdSchema2.nullable().optional(),
293
+ writeOffReason: z.enum(WarehouseWriteOffReason).nullable().optional(),
294
+ comment: z.string().trim().max(2e3).nullable().optional(),
295
+ lines: z.array(WarehouseRequestLineInputSchema).min(1).max(500)
296
+ }).superRefine((value, context) => {
297
+ const source = value.sourceWarehousePublicId ?? null;
298
+ const destination = value.destinationWarehousePublicId ?? null;
299
+ if (value.type === WarehouseRequestType.REPLENISHMENT) {
300
+ if (!destination || source) {
301
+ context.addIssue({
302
+ code: "custom",
303
+ path: ["destinationWarehousePublicId"],
304
+ message: "\u0414\u043B\u044F \u043F\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043D\u0443\u0436\u0435\u043D \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u043A\u043B\u0430\u0434 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F"
305
+ });
306
+ }
307
+ value.lines.forEach((line, index) => {
308
+ if (!line.expiresAt) {
309
+ context.addIssue({
310
+ code: "custom",
311
+ path: ["lines", index, "expiresAt"],
312
+ message: "\u0421\u0440\u043E\u043A \u0433\u043E\u0434\u043D\u043E\u0441\u0442\u0438 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D"
313
+ });
314
+ }
315
+ });
316
+ }
317
+ if (value.type === WarehouseRequestType.WRITE_OFF) {
318
+ if (!source || destination) {
319
+ context.addIssue({
320
+ code: "custom",
321
+ path: ["sourceWarehousePublicId"],
322
+ message: "\u0414\u043B\u044F \u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043D\u0443\u0436\u0435\u043D \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0441\u043A\u043B\u0430\u0434"
323
+ });
324
+ }
325
+ if (!value.writeOffReason) {
326
+ context.addIssue({
327
+ code: "custom",
328
+ path: ["writeOffReason"],
329
+ message: "\u041F\u0440\u0438\u0447\u0438\u043D\u0430 \u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u0430"
330
+ });
331
+ }
332
+ if (!value.comment?.trim()) {
333
+ context.addIssue({
334
+ code: "custom",
335
+ path: ["comment"],
336
+ message: "\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043A \u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044E \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D"
337
+ });
338
+ }
339
+ }
340
+ if (value.type === WarehouseRequestType.TRANSFER) {
341
+ if (!source || !destination || source === destination) {
342
+ context.addIssue({
343
+ code: "custom",
344
+ path: ["destinationWarehousePublicId"],
345
+ message: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043D\u044B\u0435 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u0441\u043A\u043B\u0430\u0434 \u0438 \u0441\u043A\u043B\u0430\u0434 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F"
346
+ });
347
+ }
348
+ }
349
+ });
350
+ z.object({
351
+ publicId: PublicIdSchema2
352
+ });
353
+ z.object({
354
+ publicId: PublicIdSchema2,
355
+ attachmentPublicId: PublicIdSchema2
356
+ });
357
+ BaseListQuerySchema.extend({
358
+ type: z.enum(WarehouseRequestType).optional(),
359
+ status: z.enum(WarehouseRequestStatus).optional(),
360
+ warehousePublicId: PublicIdSchema2.optional(),
361
+ createdByUserId: z.coerce.number().int().positive().optional()
362
+ });
363
+ z.object({
364
+ comment: z.string().trim().max(2e3).nullable().optional()
365
+ });
366
+ z.object({
367
+ comment: z.string().trim().min(1).max(2e3)
368
+ });
369
+ z.object({
370
+ idempotencyKey: z.uuid(),
371
+ comment: z.string().trim().max(2e3).nullable().optional()
372
+ });
373
+ z.object({
374
+ comment: z.string().trim().min(1).max(2e3)
375
+ });
376
+ BaseListQuerySchema.extend({
377
+ warehousePublicId: PublicIdSchema2.optional(),
378
+ variantPublicId: PublicIdSchema2.optional(),
379
+ expired: z.union([z.boolean(), z.enum(["true", "false"]).transform((v) => v === "true")]).optional(),
380
+ expiresBefore: DateSchema.optional()
381
+ });
382
+ var WarehouseSchema = z.object({
383
+ publicId: PublicIdSchema2,
384
+ code: CodeSchema,
385
+ name: z.string(),
386
+ status: z.enum(WarehouseStatus),
387
+ countryCode: z.string().length(2),
388
+ country: z.string(),
389
+ city: z.string(),
390
+ address: z.string(),
391
+ phoneNumber: z.string(),
392
+ mapUrl: z.string(),
393
+ timezone: z.string(),
394
+ schedule: WarehouseWeeklyScheduleSchema,
395
+ isPickupPoint: z.boolean(),
396
+ version: z.number().int().positive(),
397
+ createdAt: DateTimeSchema,
398
+ updatedAt: DateTimeSchema
399
+ });
400
+ var WarehouseUserLookupSchema = z.object({
401
+ id: z.number().int().positive(),
402
+ uuid: z.string(),
403
+ login: z.string(),
404
+ firstName: z.string(),
405
+ lastName: z.string(),
406
+ email: z.email(),
407
+ role: z.string()
408
+ });
409
+ z.object({
410
+ publicId: PublicIdSchema2,
411
+ warehousePublicId: PublicIdSchema2,
412
+ type: z.enum(WarehouseAssignmentType),
413
+ user: WarehouseUserLookupSchema,
414
+ assignedByLogin: z.string(),
415
+ assignedAt: DateTimeSchema
416
+ });
417
+ var WarehouseOperationLineSchema = z.object({
418
+ publicId: PublicIdSchema2,
419
+ variantPublicId: PublicIdSchema2,
420
+ sku: z.string(),
421
+ quantity: z.number().int().positive(),
422
+ expiresAt: DateSchema.nullable(),
423
+ batchNumber: z.string().nullable(),
424
+ comment: z.string().nullable()
425
+ });
426
+ var WarehouseOperationEventSchema = z.object({
427
+ publicId: PublicIdSchema2,
428
+ fromStatus: z.enum(WarehouseRequestStatus).nullable(),
429
+ toStatus: z.enum(WarehouseRequestStatus),
430
+ actorUserId: z.number().int().positive(),
431
+ actorLogin: z.string(),
432
+ comment: z.string().nullable(),
433
+ createdAt: DateTimeSchema
434
+ });
435
+ var WarehouseOperationAttachmentSchema = z.object({
436
+ publicId: PublicIdSchema2,
437
+ mimeType: z.string(),
438
+ sizeBytes: z.number().int().positive(),
439
+ originalName: z.string().nullable(),
440
+ uploadedByLogin: z.string(),
441
+ contentUrl: z.string(),
442
+ createdAt: DateTimeSchema
443
+ });
444
+ z.object({
445
+ publicId: PublicIdSchema2,
446
+ type: z.enum(WarehouseRequestType),
447
+ status: z.enum(WarehouseRequestStatus),
448
+ sourceWarehouse: WarehouseSchema.nullable(),
449
+ destinationWarehouse: WarehouseSchema.nullable(),
450
+ writeOffReason: z.enum(WarehouseWriteOffReason).nullable(),
451
+ comment: z.string().nullable(),
452
+ rejectionComment: z.string().nullable(),
453
+ createdByUserId: z.number().int().positive(),
454
+ createdByLogin: z.string(),
455
+ approvedByUserId: z.number().int().positive().nullable(),
456
+ approvedByLogin: z.string().nullable(),
457
+ approvedAt: DateTimeSchema.nullable(),
458
+ completedByUserId: z.number().int().positive().nullable(),
459
+ completedByLogin: z.string().nullable(),
460
+ completedAt: DateTimeSchema.nullable(),
461
+ version: z.number().int().positive(),
462
+ lines: z.array(WarehouseOperationLineSchema),
463
+ events: z.array(WarehouseOperationEventSchema),
464
+ attachments: z.array(WarehouseOperationAttachmentSchema),
465
+ createdAt: DateTimeSchema,
466
+ updatedAt: DateTimeSchema
467
+ });
468
+ z.object({
469
+ publicId: PublicIdSchema2,
470
+ warehouse: WarehouseSchema,
471
+ variantPublicId: PublicIdSchema2,
472
+ sku: z.string(),
473
+ productPublicId: PublicIdSchema2,
474
+ productCode: z.string(),
475
+ batchNumber: z.string().nullable(),
476
+ expiresAt: DateSchema,
477
+ onHand: z.number().int().nonnegative(),
478
+ reserved: z.number().int().nonnegative(),
479
+ available: z.number().int().nonnegative(),
480
+ expired: z.boolean(),
481
+ version: z.number().int().positive(),
482
+ updatedAt: DateTimeSchema
483
+ });
484
+ z.object({
485
+ publicId: PublicIdSchema2,
486
+ warehousePublicId: PublicIdSchema2,
487
+ operationPublicId: PublicIdSchema2,
488
+ variantPublicId: PublicIdSchema2,
489
+ inventoryBatchPublicId: PublicIdSchema2.nullable(),
490
+ type: z.enum(WarehouseMovementType),
491
+ quantityDelta: z.number().int(),
492
+ balanceAfter: z.number().int().nonnegative(),
493
+ actorUserId: z.number().int().positive(),
494
+ actorLogin: z.string(),
495
+ createdAt: DateTimeSchema
496
+ });
497
+
498
+ // src/order/order.schemas.ts
499
+ var PublicIdSchema3 = z.uuid();
500
+ var DateTimeSchema2 = z.iso.datetime();
501
+ var MoneySchema = z.string().regex(/^\d{1,16}\.\d{2}$/);
502
+ var DecimalSchema2 = z.string().regex(/^\d{1,16}(?:\.\d{1,3})?$/);
503
+ var OrderNumberSchema = z.string().regex(/^AV-\d{8}-[A-Z0-9]{6}$/);
504
+ var CheckoutWarehouseQuerySchema = z.object({
505
+ countryCode: z.string().trim().toUpperCase().length(2),
506
+ city: z.string().trim().min(1).max(160)
507
+ });
508
+ var CheckoutLocationSchema = z.object({
509
+ countryCode: z.string().length(2),
510
+ country: z.string(),
511
+ cities: z.array(z.string()).min(1)
512
+ });
513
+ var CheckoutSnapshotSchema = z.object({
514
+ cart: CartSchema,
515
+ locations: z.array(CheckoutLocationSchema),
516
+ mainWallet: z.object({
517
+ balanceUsd: MoneySchema,
518
+ availableBalanceUsd: MoneySchema
519
+ }),
520
+ paymentMethods: z.array(z.enum(OrderPaymentMethod)),
521
+ reserveDurationHours: z.literal(24)
522
+ });
523
+ var CheckoutWarehouseAvailabilitySchema = z.object({
524
+ variantPublicId: PublicIdSchema3,
525
+ requestedQuantity: z.number().int().positive(),
526
+ availableQuantity: z.number().int().nonnegative(),
527
+ availability: z.enum(OrderStockAvailability)
528
+ });
529
+ var CheckoutWarehouseSchema = z.object({
530
+ publicId: PublicIdSchema3,
531
+ code: z.string(),
532
+ name: z.string(),
533
+ countryCode: z.string().length(2),
534
+ country: z.string(),
535
+ city: z.string(),
536
+ address: z.string(),
537
+ phoneNumber: z.string(),
538
+ mapUrl: z.url(),
539
+ timezone: z.string(),
540
+ schedule: WarehouseWeeklyScheduleSchema,
541
+ canFulfill: z.boolean(),
542
+ items: z.array(CheckoutWarehouseAvailabilitySchema)
543
+ });
544
+ var CheckoutWarehouseListSchema = z.array(CheckoutWarehouseSchema);
545
+ var CreateOrderRequestSchema = z.object({
546
+ warehousePublicId: PublicIdSchema3,
547
+ deliveryMethod: z.literal("PICKUP" /* PICKUP */),
548
+ paymentMethod: z.enum(OrderPaymentMethod),
549
+ walletAmountUsd: MoneySchema.optional(),
550
+ idempotencyKey: PublicIdSchema3
551
+ }).superRefine((value, context) => {
552
+ if (value.paymentMethod === "CASH" /* CASH */ && value.walletAmountUsd) {
553
+ context.addIssue({
554
+ code: "custom",
555
+ path: ["walletAmountUsd"],
556
+ message: "\u0414\u043B\u044F \u043E\u043F\u043B\u0430\u0442\u044B \u043D\u0430\u043B\u0438\u0447\u043D\u044B\u043C\u0438 \u0441\u0443\u043C\u043C\u0430 \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F"
557
+ });
558
+ }
559
+ if (value.paymentMethod === "MAIN_WALLET" /* MAIN_WALLET */ && (!value.walletAmountUsd || value.walletAmountUsd === "0.00")) {
560
+ context.addIssue({
561
+ code: "custom",
562
+ path: ["walletAmountUsd"],
563
+ message: "\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0441\u0443\u043C\u043C\u0443 \u043E\u043F\u043B\u0430\u0442\u044B \u0441 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u043A\u043E\u0448\u0435\u043B\u044C\u043A\u0430"
564
+ });
565
+ }
566
+ });
567
+ var OrderPublicIdParamSchema = z.object({ publicId: PublicIdSchema3 });
568
+ var OrderReceiptParamSchema = z.object({
569
+ publicId: PublicIdSchema3,
570
+ receiptPublicId: PublicIdSchema3
571
+ });
572
+ var OrderWarehouseSchema = z.object({
573
+ publicId: PublicIdSchema3,
574
+ code: z.string(),
575
+ name: z.string(),
576
+ countryCode: z.string().length(2),
577
+ country: z.string(),
578
+ city: z.string(),
579
+ address: z.string(),
580
+ phoneNumber: z.string(),
581
+ mapUrl: z.url(),
582
+ timezone: z.string(),
583
+ schedule: WarehouseWeeklyScheduleSchema
584
+ });
585
+ var OrderItemSchema = z.object({
586
+ publicId: PublicIdSchema3,
587
+ productPublicId: PublicIdSchema3,
588
+ variantPublicId: PublicIdSchema3,
589
+ productName: z.string(),
590
+ sku: z.string(),
591
+ variantQuantity: DecimalSchema2,
592
+ unit: z.enum(ProductUnit),
593
+ quantity: z.number().int().positive(),
594
+ unitPriceUsd: MoneySchema,
595
+ lineTotalUsd: MoneySchema,
596
+ unitPv: MoneySchema,
597
+ lineTotalPv: MoneySchema,
598
+ coverContentUrl: z.string().nullable()
599
+ });
600
+ var OrderReceiptSchema = z.object({
601
+ publicId: PublicIdSchema3,
602
+ status: z.enum(OrderReceiptStatus),
603
+ originalName: z.string().nullable(),
604
+ mimeType: z.string(),
605
+ sizeBytes: z.number().int().positive(),
606
+ version: z.number().int().positive(),
607
+ rejectionReason: z.string().nullable(),
608
+ reviewedAt: DateTimeSchema2.nullable(),
609
+ createdAt: DateTimeSchema2,
610
+ contentUrl: z.string()
611
+ });
612
+ var OrderEventSchema = z.object({
613
+ publicId: PublicIdSchema3,
614
+ type: z.enum(OrderEventType),
615
+ actorLogin: z.string().nullable(),
616
+ comment: z.string().nullable(),
617
+ createdAt: DateTimeSchema2
618
+ });
619
+ var OrderSchema = z.object({
620
+ publicId: PublicIdSchema3,
621
+ number: OrderNumberSchema,
622
+ status: z.enum(OrderStatus),
623
+ paymentStatus: z.enum(OrderPaymentStatus),
624
+ deliveryMethod: z.enum(OrderDeliveryMethod),
625
+ paymentMethod: z.enum(OrderPaymentMethod),
626
+ locale: z.string().length(2),
627
+ baseCurrencyCode: z.string().length(3),
628
+ displayCurrencyCode: z.string().length(3),
629
+ displayRate: z.string(),
630
+ subtotalUsd: MoneySchema,
631
+ totalPv: MoneySchema,
632
+ walletPaidUsd: MoneySchema,
633
+ walletRefundedUsd: MoneySchema,
634
+ cashDueUsd: MoneySchema,
635
+ reserveExpiresAt: DateTimeSchema2.nullable(),
636
+ paidAt: DateTimeSchema2.nullable(),
637
+ cancelledAt: DateTimeSchema2.nullable(),
638
+ cancellationReason: z.string().nullable(),
639
+ warehouse: OrderWarehouseSchema,
640
+ items: z.array(OrderItemSchema).min(1),
641
+ receipts: z.array(OrderReceiptSchema),
642
+ events: z.array(OrderEventSchema),
643
+ createdAt: DateTimeSchema2,
644
+ updatedAt: DateTimeSchema2
645
+ });
646
+ var OrderListItemSchema = OrderSchema.omit({
647
+ receipts: true,
648
+ events: true
649
+ });
650
+ var OrderListQuerySchema = BaseListQuerySchema.extend({
651
+ status: z.enum(OrderStatus).optional(),
652
+ paymentStatus: z.enum(OrderPaymentStatus).optional()
653
+ });
654
+ var OrderListResponseSchema = z.object({
655
+ items: z.array(OrderListItemSchema),
656
+ meta: z.object({
657
+ page: z.number().int().positive(),
658
+ limit: z.number().int().positive(),
659
+ total: z.number().int().nonnegative(),
660
+ pageCount: z.number().int().nonnegative()
661
+ })
662
+ });
663
+ var WarehouseOrderReservationListQuerySchema = BaseListQuerySchema.extend({
664
+ warehousePublicId: PublicIdSchema3,
665
+ reservationStatus: z.enum(OrderReservationStatus).optional()
666
+ });
667
+ var WarehouseOrderReservationSchema = z.object({
668
+ publicId: PublicIdSchema3,
669
+ status: z.enum(OrderReservationStatus),
670
+ quantity: z.number().int().positive(),
671
+ createdAt: DateTimeSchema2,
672
+ releasedAt: DateTimeSchema2.nullable(),
673
+ reserveExpiresAt: DateTimeSchema2.nullable(),
674
+ releaseReason: z.string().nullable(),
675
+ order: z.object({
676
+ publicId: PublicIdSchema3,
677
+ number: OrderNumberSchema,
678
+ status: z.enum(OrderStatus),
679
+ paymentStatus: z.enum(OrderPaymentStatus)
680
+ }),
681
+ item: z.object({
682
+ publicId: PublicIdSchema3,
683
+ productPublicId: PublicIdSchema3,
684
+ variantPublicId: PublicIdSchema3,
685
+ productName: z.string(),
686
+ sku: z.string(),
687
+ coverContentUrl: z.string().nullable()
688
+ }),
689
+ batch: z.object({
690
+ publicId: PublicIdSchema3,
691
+ batchNumber: z.string().nullable(),
692
+ expiresAt: z.iso.date()
693
+ })
694
+ });
695
+ var WarehouseOrderReservationListResponseSchema = z.object({
696
+ items: z.array(WarehouseOrderReservationSchema),
697
+ meta: z.object({
698
+ page: z.number().int().positive(),
699
+ limit: z.number().int().positive(),
700
+ total: z.number().int().nonnegative(),
701
+ pageCount: z.number().int().nonnegative()
702
+ }),
703
+ summary: z.object({
704
+ activeQuantity: z.number().int().nonnegative(),
705
+ activeReservations: z.number().int().nonnegative(),
706
+ releasedReservations: z.number().int().nonnegative()
707
+ })
708
+ });
709
+ var ReviewOrderReceiptRequestSchema = z.object({
710
+ decision: z.enum(OrderReceiptDecision),
711
+ version: z.number().int().positive(),
712
+ rejectionReason: z.string().trim().min(1).max(2e3).optional()
713
+ }).superRefine((value, context) => {
714
+ if (value.decision === "REJECT" /* REJECT */ && !value.rejectionReason) {
715
+ context.addIssue({
716
+ code: "custom",
717
+ path: ["rejectionReason"],
718
+ message: "\u041F\u0440\u0438\u0447\u0438\u043D\u0430 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u0430"
719
+ });
720
+ }
721
+ if (value.decision === "APPROVE" /* APPROVE */ && value.rejectionReason) {
722
+ context.addIssue({
723
+ code: "custom",
724
+ path: ["rejectionReason"],
725
+ message: "\u041F\u0440\u0438\u0447\u0438\u043D\u0430 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u0440\u0438 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0438"
726
+ });
727
+ }
728
+ });
729
+ var OrderNotificationSchema = z.object({
730
+ publicId: PublicIdSchema3,
731
+ orderPublicId: PublicIdSchema3,
732
+ orderNumber: OrderNumberSchema,
733
+ type: z.enum(OrderNotificationType),
734
+ isRead: z.boolean(),
735
+ createdAt: DateTimeSchema2
736
+ });
737
+ var OrderNotificationListSchema = z.array(OrderNotificationSchema);
738
+
739
+ export { CheckoutLocationSchema, CheckoutSnapshotSchema, CheckoutWarehouseAvailabilitySchema, CheckoutWarehouseListSchema, CheckoutWarehouseQuerySchema, CheckoutWarehouseSchema, CreateOrderRequestSchema, OrderDeliveryMethod, OrderEventSchema, OrderEventType, OrderItemSchema, OrderListItemSchema, OrderListQuerySchema, OrderListResponseSchema, OrderNotificationListSchema, OrderNotificationSchema, OrderNotificationType, OrderPaymentMethod, OrderPaymentStatus, OrderPublicIdParamSchema, OrderReceiptDecision, OrderReceiptParamSchema, OrderReceiptSchema, OrderReceiptStatus, OrderReservationStatus, OrderSchema, OrderStatus, OrderStockAvailability, OrderWarehouseSchema, ReviewOrderReceiptRequestSchema, WarehouseOrderReservationListQuerySchema, WarehouseOrderReservationListResponseSchema, WarehouseOrderReservationSchema };
740
+ //# sourceMappingURL=index.mjs.map
741
+ //# sourceMappingURL=index.mjs.map