@floristcloud/api-lib 1.2.175 → 1.2.177

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 (135) hide show
  1. package/build/commands/pre-order/get-pre-order-by-pre-order-collection-uuid.command.js +2 -6
  2. package/build/commands/pre-order/group/analyze-create-orders-from-pre-orders.command.js +4 -35
  3. package/build/commands/pre-order/group/group-create-orders-from-pre-orders.command.js +4 -51
  4. package/build/commands/pre-order/index.js +1 -0
  5. package/build/commands/pre-order/revert-pre-order-conversion.command.js +8 -0
  6. package/build/commands/pre-order/webshop/checkout-pre-order-webshop.command.js +4 -14
  7. package/build/commands/pre-order/webshop/create-pre-order-webshop.command.js +2 -6
  8. package/build/commands/pre-order/webshop/update-pre-order-webshop.command.js +2 -6
  9. package/build/constant/error.js +49 -0
  10. package/build/enum/index.js +6 -0
  11. package/build/enum/pre-order-conversion-difference-field.enum.js +11 -0
  12. package/build/enum/pre-order-conversion-match-kind.enum.js +8 -0
  13. package/build/enum/pre-order-conversion-remainder-reason.enum.js +10 -0
  14. package/build/enum/pre-order-conversion-skip-reason.enum.js +7 -0
  15. package/build/enum/pre-order-conversion-warning.enum.js +8 -0
  16. package/build/enum/pre-order-fulfillment-status.enum.js +10 -0
  17. package/build/schemas/client/client-extended-list-item.schema.js +7 -0
  18. package/build/schemas/client/client-extended-list.schema.js +2 -2
  19. package/build/schemas/client/client-legal-profile-label.schema.js +6 -0
  20. package/build/schemas/client/client-legal-profile-requisites.schema.js +5 -0
  21. package/build/schemas/client/client-legal-profile.schema.js +1 -0
  22. package/build/schemas/client/create-client-legal-profile-request.schema.js +2 -2
  23. package/build/schemas/client/index.js +3 -0
  24. package/build/schemas/client/legal-identifier-value.schema.js +6 -0
  25. package/build/schemas/client/update-client-legal-profile-request.schema.js +2 -2
  26. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-data.schema.js +10 -0
  27. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-request.schema.js +13 -0
  28. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-response.schema.js +9 -0
  29. package/build/schemas/pre-order/checkout-pre-order-webshop-request.schema.js +7 -0
  30. package/build/schemas/pre-order/checkout-pre-order-webshop-response.schema.js +6 -0
  31. package/build/schemas/pre-order/create-pre-order-webshop-response.schema.js +6 -0
  32. package/build/schemas/pre-order/get-pre-order-by-collection-for-client-response.schema.js +6 -0
  33. package/build/schemas/pre-order/group-create-orders-from-pre-orders-data.schema.js +12 -0
  34. package/build/schemas/pre-order/group-create-orders-from-pre-orders-request.schema.js +17 -0
  35. package/build/schemas/pre-order/group-create-orders-from-pre-orders-response.schema.js +9 -0
  36. package/build/schemas/pre-order/index.js +39 -0
  37. package/build/schemas/pre-order/pre-order-conversion-allocation.schema.js +23 -0
  38. package/build/schemas/pre-order/pre-order-conversion-analysis.schema.js +12 -0
  39. package/build/schemas/pre-order/pre-order-conversion-attributes.schema.js +12 -0
  40. package/build/schemas/pre-order/pre-order-conversion-change.schema.js +9 -0
  41. package/build/schemas/pre-order/pre-order-conversion-created.schema.js +11 -0
  42. package/build/schemas/pre-order/pre-order-conversion-current-order.schema.js +11 -0
  43. package/build/schemas/pre-order/pre-order-conversion-difference.schema.js +12 -0
  44. package/build/schemas/pre-order/pre-order-conversion-error.schema.js +9 -0
  45. package/build/schemas/pre-order/pre-order-conversion-failed-error.schema.js +8 -0
  46. package/build/schemas/pre-order/pre-order-conversion-failed.schema.js +6 -0
  47. package/build/schemas/pre-order/pre-order-conversion-mapping.schema.js +14 -0
  48. package/build/schemas/pre-order/pre-order-conversion-match-description.schema.js +9 -0
  49. package/build/schemas/pre-order/pre-order-conversion-match.schema.js +13 -0
  50. package/build/schemas/pre-order/pre-order-conversion-order.schema.js +6 -0
  51. package/build/schemas/pre-order/pre-order-conversion-plan-allocation.schema.js +5 -0
  52. package/build/schemas/pre-order/pre-order-conversion-plan-entry.schema.js +10 -0
  53. package/build/schemas/pre-order/pre-order-conversion-plan-line.schema.js +9 -0
  54. package/build/schemas/pre-order/pre-order-conversion-preview-plan-entry.schema.js +5 -0
  55. package/build/schemas/pre-order/pre-order-conversion-remainder.schema.js +9 -0
  56. package/build/schemas/pre-order/pre-order-conversion-skipped.schema.js +6 -0
  57. package/build/schemas/pre-order/pre-order-conversion-summary-line.schema.js +20 -0
  58. package/build/schemas/pre-order/pre-order-conversion-summary.schema.js +14 -0
  59. package/build/schemas/pre-order/pre-order-for-client.schema.js +4 -0
  60. package/build/schemas/pre-order/pre-order-fulfillment-stop-price.schema.js +6 -0
  61. package/build/schemas/pre-order/pre-order-fulfillment-substitute.schema.js +5 -0
  62. package/build/schemas/pre-order/pre-order-fulfillment.schema.js +16 -0
  63. package/build/schemas/pre-order/pre-order.schema.js +14 -1
  64. package/build/schemas/pre-order/revert-pre-order-conversion-order.schema.js +8 -0
  65. package/build/schemas/pre-order/revert-pre-order-conversion-response.schema.js +8 -0
  66. package/build/schemas/pre-order/revert-pre-order-conversion-result.schema.js +10 -0
  67. package/build/schemas/pre-order/update-pre-order-webshop-response.schema.js +6 -0
  68. package/commands/pre-order/get-pre-order-by-pre-order-collection-uuid.command.ts +3 -7
  69. package/commands/pre-order/group/analyze-create-orders-from-pre-orders.command.ts +3 -49
  70. package/commands/pre-order/group/group-create-orders-from-pre-orders.command.ts +3 -51
  71. package/commands/pre-order/index.ts +1 -0
  72. package/commands/pre-order/revert-pre-order-conversion.command.ts +7 -0
  73. package/commands/pre-order/webshop/checkout-pre-order-webshop.command.ts +3 -14
  74. package/commands/pre-order/webshop/create-pre-order-webshop.command.ts +3 -7
  75. package/commands/pre-order/webshop/update-pre-order-webshop.command.ts +3 -7
  76. package/constant/error.ts +49 -0
  77. package/enum/index.ts +7 -0
  78. package/enum/pre-order-conversion-difference-field.enum.ts +7 -0
  79. package/enum/pre-order-conversion-match-kind.enum.ts +4 -0
  80. package/enum/pre-order-conversion-remainder-reason.enum.ts +6 -0
  81. package/enum/pre-order-conversion-skip-reason.enum.ts +3 -0
  82. package/enum/pre-order-conversion-warning.enum.ts +4 -0
  83. package/enum/pre-order-fulfillment-status.enum.ts +6 -0
  84. package/package.json +1 -1
  85. package/schemas/client/client-extended-list-item.schema.ts +5 -0
  86. package/schemas/client/client-extended-list.schema.ts +2 -2
  87. package/schemas/client/client-legal-profile-label.schema.ts +4 -0
  88. package/schemas/client/client-legal-profile-requisites.schema.ts +5 -0
  89. package/schemas/client/client-legal-profile.schema.ts +1 -0
  90. package/schemas/client/create-client-legal-profile-request.schema.ts +2 -2
  91. package/schemas/client/index.ts +3 -0
  92. package/schemas/client/legal-identifier-value.schema.ts +4 -0
  93. package/schemas/client/update-client-legal-profile-request.schema.ts +2 -2
  94. package/schemas/pre-order/analyze-create-orders-from-pre-orders-data.schema.ts +8 -0
  95. package/schemas/pre-order/analyze-create-orders-from-pre-orders-request.schema.ts +11 -0
  96. package/schemas/pre-order/analyze-create-orders-from-pre-orders-response.schema.ts +7 -0
  97. package/schemas/pre-order/checkout-pre-order-webshop-request.schema.ts +4 -0
  98. package/schemas/pre-order/checkout-pre-order-webshop-response.schema.ts +3 -0
  99. package/schemas/pre-order/create-pre-order-webshop-response.schema.ts +3 -0
  100. package/schemas/pre-order/get-pre-order-by-collection-for-client-response.schema.ts +3 -0
  101. package/schemas/pre-order/group-create-orders-from-pre-orders-data.schema.ts +10 -0
  102. package/schemas/pre-order/group-create-orders-from-pre-orders-request.schema.ts +15 -0
  103. package/schemas/pre-order/group-create-orders-from-pre-orders-response.schema.ts +7 -0
  104. package/schemas/pre-order/index.ts +43 -0
  105. package/schemas/pre-order/pre-order-conversion-allocation.schema.ts +21 -0
  106. package/schemas/pre-order/pre-order-conversion-analysis.schema.ts +10 -0
  107. package/schemas/pre-order/pre-order-conversion-attributes.schema.ts +10 -0
  108. package/schemas/pre-order/pre-order-conversion-change.schema.ts +7 -0
  109. package/schemas/pre-order/pre-order-conversion-created.schema.ts +9 -0
  110. package/schemas/pre-order/pre-order-conversion-current-order.schema.ts +8 -0
  111. package/schemas/pre-order/pre-order-conversion-difference.schema.ts +10 -0
  112. package/schemas/pre-order/pre-order-conversion-error.schema.ts +7 -0
  113. package/schemas/pre-order/pre-order-conversion-failed-error.schema.ts +6 -0
  114. package/schemas/pre-order/pre-order-conversion-failed.schema.ts +4 -0
  115. package/schemas/pre-order/pre-order-conversion-mapping.schema.ts +12 -0
  116. package/schemas/pre-order/pre-order-conversion-match-description.schema.ts +7 -0
  117. package/schemas/pre-order/pre-order-conversion-match.schema.ts +11 -0
  118. package/schemas/pre-order/pre-order-conversion-order.schema.ts +4 -0
  119. package/schemas/pre-order/pre-order-conversion-plan-allocation.schema.ts +3 -0
  120. package/schemas/pre-order/pre-order-conversion-plan-entry.schema.ts +8 -0
  121. package/schemas/pre-order/pre-order-conversion-plan-line.schema.ts +7 -0
  122. package/schemas/pre-order/pre-order-conversion-preview-plan-entry.schema.ts +3 -0
  123. package/schemas/pre-order/pre-order-conversion-remainder.schema.ts +7 -0
  124. package/schemas/pre-order/pre-order-conversion-skipped.schema.ts +4 -0
  125. package/schemas/pre-order/pre-order-conversion-summary-line.schema.ts +18 -0
  126. package/schemas/pre-order/pre-order-conversion-summary.schema.ts +12 -0
  127. package/schemas/pre-order/pre-order-for-client.schema.ts +4 -0
  128. package/schemas/pre-order/pre-order-fulfillment-stop-price.schema.ts +3 -0
  129. package/schemas/pre-order/pre-order-fulfillment-substitute.schema.ts +2 -0
  130. package/schemas/pre-order/pre-order-fulfillment.schema.ts +13 -0
  131. package/schemas/pre-order/pre-order.schema.ts +14 -1
  132. package/schemas/pre-order/revert-pre-order-conversion-order.schema.ts +6 -0
  133. package/schemas/pre-order/revert-pre-order-conversion-response.schema.ts +6 -0
  134. package/schemas/pre-order/revert-pre-order-conversion-result.schema.ts +8 -0
  135. package/schemas/pre-order/update-pre-order-webshop-response.schema.ts +3 -0
package/constant/error.ts CHANGED
@@ -207,6 +207,20 @@ export const ERRORS = {
207
207
  CLIENT_LEGAL_PROFILE_NOT_DELETED: { code: 'CL021', message: 'Legal profile not deleted', httpCode: 500 },
208
208
  CLIENT_LEGAL_PROFILE_NOT_UPDATED: { code: 'CL022', message: 'Legal profile not updated', httpCode: 500 },
209
209
  CLIENT_LEGAL_PROFILE_ARCHIVED: { code: 'CL046', message: 'Legal profile is archived', httpCode: 409 },
210
+ // Не дождались блокировки при записи карточки (lock_timeout): идентификаторы юрлиц компании или строку клиента
211
+ // держит другая запись — импорт, балансовая операция, параллельная правка карточек.
212
+ CLIENT_LEGAL_IDENTIFIERS_LOCK_BUSY: {
213
+ code: 'CL048',
214
+ message: 'Legal requisites of this company are being changed right now, try again',
215
+ httpCode: 409,
216
+ },
217
+ // Карточку реквизитов сейчас меняет другая операция (например, синхронизация): счёт на неё не дождался (lock_timeout)
218
+ // или дождался, но карточка уже не та, по которой он собрал реквизиты.
219
+ CLIENT_LEGAL_PROFILE_LOCK_BUSY: {
220
+ code: 'CL049',
221
+ message: 'Legal profile is being changed right now, try again',
222
+ httpCode: 409,
223
+ },
210
224
  CLIENT_LEGAL_PROFILE_DEFAULT_REQUIRED: {
211
225
  code: 'CL047',
212
226
  message: 'Client must keep a default legal profile: assign another one instead',
@@ -1098,6 +1112,41 @@ export const ERRORS = {
1098
1112
  message: 'Failed to create standing-order position from pre-order position',
1099
1113
  httpCode: 400,
1100
1114
  },
1115
+ PRE_ORDER_ALREADY_CONVERTED: {
1116
+ code: 'PO059',
1117
+ message: 'The pre-order has already been converted into orders.',
1118
+ httpCode: 409,
1119
+ },
1120
+ PRE_ORDER_NOTHING_MATCHED: {
1121
+ code: 'PO057',
1122
+ message: 'Nothing matched; the pre-order remains open.',
1123
+ httpCode: 400,
1124
+ },
1125
+ PRE_ORDER_CLOSE_REMAINDER_CONFIRMATION_REQUIRED: {
1126
+ code: 'PO058',
1127
+ message: 'Confirm closing the unallocated remainder before conversion.',
1128
+ httpCode: 400,
1129
+ },
1130
+ PRE_ORDER_NOT_CONVERTED: {
1131
+ code: 'PO060',
1132
+ message: 'The pre-order has not been converted into orders.',
1133
+ httpCode: 409,
1134
+ },
1135
+ PRE_ORDER_CONVERSION_REVERT_ORDERS_IN_WORK: {
1136
+ code: 'PO061',
1137
+ message: 'Orders from this conversion are already in work, so the conversion cannot be reverted.',
1138
+ httpCode: 409,
1139
+ },
1140
+ PRE_ORDER_CONVERSION_REVERT_ROWS_MOVED: {
1141
+ code: 'PO062',
1142
+ message: 'Goods from this conversion were moved to other orders, so the conversion cannot be reverted.',
1143
+ httpCode: 409,
1144
+ },
1145
+ PRE_ORDER_CONVERSION_SUMMARY_UNREADABLE: {
1146
+ code: 'PO063',
1147
+ message: 'The conversion snapshot cannot be read, so the orders to delete are unknown.',
1148
+ httpCode: 409,
1149
+ },
1101
1150
  PRE_ORDER_CONVERSION_ANALYSIS_STALE: {
1102
1151
  code: 'PO048',
1103
1152
  message: 'The pre-order changed after the conversion analysis, analyze it again',
package/enum/index.ts CHANGED
@@ -152,3 +152,10 @@ export * from './write-off-status.enum';
152
152
  export * from './one-c-stock-conflict-status.enum';
153
153
  export * from './one-c-stock-conflict-line-action.enum';
154
154
  export * from './one-c-stock-conflict-line-restriction.enum';
155
+ export * from './pre-order-conversion-match-kind.enum';
156
+ export * from './pre-order-conversion-warning.enum';
157
+ export * from './pre-order-conversion-remainder-reason.enum';
158
+ export * from './pre-order-conversion-difference-field.enum';
159
+ export * from './pre-order-conversion-skip-reason.enum';
160
+
161
+ export * from './pre-order-fulfillment-status.enum';
@@ -0,0 +1,7 @@
1
+ export enum PreOrderConversionDifferenceFieldEnum {
2
+ NAME = 'name',
3
+ SIZE = 'size',
4
+ COLOR = 'color',
5
+ GROWER = 'grower',
6
+ CATEGORY = 'categoryUUID',
7
+ }
@@ -0,0 +1,4 @@
1
+ export enum PreOrderConversionMatchKindEnum {
2
+ EXACT = 'EXACT',
3
+ SUBSTITUTE = 'SUBSTITUTE',
4
+ }
@@ -0,0 +1,6 @@
1
+ export enum PreOrderConversionRemainderReasonEnum {
2
+ NO_MATCH = 'NO_MATCH',
3
+ INSUFFICIENT_STOCK = 'INSUFFICIENT_STOCK',
4
+ MULTIPLICITY = 'MULTIPLICITY',
5
+ EXCLUDED_BY_EMPLOYEE = 'EXCLUDED_BY_EMPLOYEE',
6
+ }
@@ -0,0 +1,3 @@
1
+ export enum PreOrderConversionSkipReasonEnum {
2
+ NOTHING_MATCHED = 'NOTHING_MATCHED',
3
+ }
@@ -0,0 +1,4 @@
1
+ export enum PreOrderConversionWarningEnum {
2
+ STOP_PRICE_EXCEEDED = 'STOP_PRICE_EXCEEDED',
3
+ REPLACEMENT_NOT_ALLOWED = 'REPLACEMENT_NOT_ALLOWED',
4
+ }
@@ -0,0 +1,6 @@
1
+ export enum PreOrderFulfillmentStatusEnum {
2
+ FULL = 'FULL',
3
+ PARTIAL = 'PARTIAL',
4
+ NOT_MATCHED = 'NOT_MATCHED',
5
+ NOT_IN_CONVERSION = 'NOT_IN_CONVERSION',
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.175",
3
+ "version": "1.2.177",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -0,0 +1,5 @@
1
+ import { ClientExtendedSchema } from './client-extended.schema';
2
+
3
+ // Клиент в списке: только основная карточка реквизитов. Все карточки — в карточке клиента
4
+ // (GET client/:uuid) и в списке карточек (GET client/:uuid/legal-profile): тянуть их на каждую строку списка дорого.
5
+ export const ClientExtendedListItemSchema = ClientExtendedSchema.omit({ clientLegalProfileList: true });
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { ClientExtendedSchema } from './client-extended.schema';
2
+ import { ClientExtendedListItemSchema } from './client-extended-list-item.schema';
3
3
 
4
4
  export const ClientExtendedListSchema = z.object({
5
- clientList: ClientExtendedSchema.array(),
5
+ clientList: ClientExtendedListItemSchema.array(),
6
6
  total: z.number(),
7
7
  });
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+
3
+ // Подпись карточки реквизитов в запросах панели: необязательна, null очищает.
4
+ export const ClientLegalProfileLabelSchema = z.string().max(255).nullable().optional();
@@ -1,4 +1,5 @@
1
1
  import { ClientLegalProfileSchema } from './client-legal-profile.schema';
2
+ import { LegalIdentifierValueSchema } from './legal-identifier-value.schema';
2
3
 
3
4
  // Реквизиты карточки, которые пользователь заполняет сам: без служебных полей и флагов карточки.
4
5
  export const ClientLegalProfileRequisitesSchema = ClientLegalProfileSchema.omit({
@@ -10,4 +11,8 @@ export const ClientLegalProfileRequisitesSchema = ClientLegalProfileSchema.omit(
10
11
  updatedAt: true,
11
12
  }).extend({
12
13
  correspondentAccount: ClientLegalProfileSchema.shape.correspondentAccount.optional(),
14
+ taxId: LegalIdentifierValueSchema,
15
+ ogrn: LegalIdentifierValueSchema,
16
+ ogrnip: LegalIdentifierValueSchema,
17
+ edoId: LegalIdentifierValueSchema,
13
18
  });
@@ -3,6 +3,7 @@ import { ClientLegalTypeEnum } from '../../enum';
3
3
 
4
4
  export const ClientLegalProfileSchema = z.object({
5
5
  uuid: z.uuid(),
6
+ // Подпись карточки для селекта («ООО Ромашка, Сбер»); длина ограничена в запросах создания и правки.
6
7
  label: z.string().nullable(),
7
8
  isDefault: z.boolean(),
8
9
  isArchived: z.boolean(),
@@ -1,8 +1,8 @@
1
1
  import { z } from 'zod';
2
- import { ClientLegalProfileSchema } from './client-legal-profile.schema';
2
+ import { ClientLegalProfileLabelSchema } from './client-legal-profile-label.schema';
3
3
  import { ClientLegalProfileRequisitesSchema } from './client-legal-profile-requisites.schema';
4
4
 
5
5
  export const CreateClientLegalProfileRequestSchema = ClientLegalProfileRequisitesSchema.extend({
6
- label: ClientLegalProfileSchema.shape.label.optional(),
6
+ label: ClientLegalProfileLabelSchema,
7
7
  isDefault: z.boolean().optional(),
8
8
  });
@@ -2,7 +2,9 @@ export * from './client.schema';
2
2
  export * from './client-name.schema';
3
3
  export * from './client-individual-profile.schema';
4
4
  export * from './client-legal-profile.schema';
5
+ export * from './client-extended-list-item.schema';
5
6
  export * from './client-legal-profile-requisites.schema';
7
+ export * from './client-legal-profile-label.schema';
6
8
  export * from './create-client-legal-profile-request.schema';
7
9
  export * from './create-client-legal-profile-response.schema';
8
10
  export * from './update-client-legal-profile-request.schema';
@@ -27,3 +29,4 @@ export * from './update-client-for-client-request.schema';
27
29
  export * from './update-client-for-client-response.schema';
28
30
  export * from './client-extended-list.schema';
29
31
  export * from './client-extended.schema';
32
+ export * from './legal-identifier-value.schema';
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+
3
+ // Идентификатор юрлица (ИНН, ОГРН, ОГРНИП, ЭДО) из запроса — без пробелов по краям: по нему проверяется FC-194.
4
+ export const LegalIdentifierValueSchema = z.string().trim().nullable();
@@ -1,11 +1,11 @@
1
1
  import { z } from 'zod';
2
- import { ClientLegalProfileSchema } from './client-legal-profile.schema';
2
+ import { ClientLegalProfileLabelSchema } from './client-legal-profile-label.schema';
3
3
  import { ClientLegalProfileRequisitesSchema } from './client-legal-profile-requisites.schema';
4
4
 
5
5
  // Правка частичная: поле, которого нет в запросе, не меняется, null — очищает. Так карточку можно сделать
6
6
  // основной или убрать в архив, не пересылая реквизиты.
7
7
  export const UpdateClientLegalProfileRequestSchema = ClientLegalProfileRequisitesSchema.partial().extend({
8
- label: ClientLegalProfileSchema.shape.label.optional(),
8
+ label: ClientLegalProfileLabelSchema,
9
9
  isDefault: z.boolean().optional(),
10
10
  isArchived: z.boolean().optional(),
11
11
  });
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderConversionAnalysisSchema } from './pre-order-conversion-analysis.schema';
3
+ import { PreOrderConversionErrorSchema } from './pre-order-conversion-error.schema';
4
+
5
+ export const AnalyzeCreateOrdersFromPreOrdersDataSchema = z.object({
6
+ analyses: z.array(PreOrderConversionAnalysisSchema),
7
+ errorList: z.array(PreOrderConversionErrorSchema).optional(),
8
+ });
@@ -0,0 +1,11 @@
1
+ import { PreOrderConversionPreviewPlanEntrySchema } from './pre-order-conversion-preview-plan-entry.schema';
2
+ import { z } from 'zod';
3
+ import { MatchingConfigSchema } from '../pre-order-product/matching-config.schema';
4
+
5
+ export const AnalyzeCreateOrdersFromPreOrdersRequestSchema = z.object({
6
+ plan: PreOrderConversionPreviewPlanEntrySchema.array().optional(),
7
+ preOrderUUIDs: z.uuid().array(),
8
+ consignmentUUIDs: z.uuid().array(),
9
+ matchingConfig: MatchingConfigSchema.optional().nullable(),
10
+ isProportionalAllocation: z.coerce.boolean().optional(),
11
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { AnalyzeCreateOrdersFromPreOrdersDataSchema } from './analyze-create-orders-from-pre-orders-data.schema';
3
+
4
+ export const AnalyzeCreateOrdersFromPreOrdersResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: AnalyzeCreateOrdersFromPreOrdersDataSchema,
7
+ });
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ export const CheckoutPreOrderWebshopRequestSchema = z
3
+ .object({ comment: z.string().nullable().optional(), branchUUID: z.string().nullable().optional() })
4
+ .default({});
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderForClientSchema } from './pre-order-for-client.schema';
3
+ export const CheckoutPreOrderWebshopResponseSchema = z.object({ message: z.string().optional(), data: PreOrderForClientSchema });
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderForClientSchema } from './pre-order-for-client.schema';
3
+ export const CreatePreOrderWebshopResponseSchema = z.object({ message: z.string().optional(), data: PreOrderForClientSchema });
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderForClientSchema } from './pre-order-for-client.schema';
3
+ export const GetPreOrderByCollectionForClientResponseSchema = z.object({ data: PreOrderForClientSchema });
@@ -0,0 +1,10 @@
1
+ import { PreOrderConversionSkippedSchema } from './pre-order-conversion-skipped.schema';
2
+ import { z } from 'zod';
3
+ import { PreOrderConversionCreatedSchema } from './pre-order-conversion-created.schema';
4
+ import { PreOrderConversionFailedSchema } from './pre-order-conversion-failed.schema';
5
+
6
+ export const GroupCreateOrdersFromPreOrdersDataSchema = z.object({
7
+ created: PreOrderConversionCreatedSchema.array(),
8
+ skipped: PreOrderConversionSkippedSchema.array(),
9
+ failed: PreOrderConversionFailedSchema.array(),
10
+ });
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ import { MatchingConfigSchema } from '../pre-order-product/matching-config.schema';
3
+ import { PreOrderConversionPlanEntrySchema } from './pre-order-conversion-plan-entry.schema';
4
+
5
+ export const GroupCreateOrdersFromPreOrdersRequestSchema = z.object({
6
+ preOrderUUIDs: z.uuid().array(),
7
+ consignmentUUIDs: z.uuid().array(),
8
+ matchingConfig: MatchingConfigSchema.optional().nullable(),
9
+ isProportionalAllocation: z.coerce.boolean().optional(),
10
+ orderProductTag: z.string().nullable().optional(),
11
+ confirmCloseRemainder: z.boolean().optional(),
12
+ // Оформляется только подтверждённый сотрудником план: без него сервер подобрал бы товары заново, и в заказы
13
+ // ушли бы распределения и цены, которых сотрудник не видел.
14
+ plan: PreOrderConversionPlanEntrySchema.array(),
15
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { GroupCreateOrdersFromPreOrdersDataSchema } from './group-create-orders-from-pre-orders-data.schema';
3
+
4
+ export const GroupCreateOrdersFromPreOrdersResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: GroupCreateOrdersFromPreOrdersDataSchema,
7
+ });
@@ -37,3 +37,46 @@ export * from './standing-order-conversion-plan-line.schema';
37
37
  export * from './standing-order-conversion-result.schema';
38
38
  export * from './standing-order-conversion-target-pre-order.schema';
39
39
  export * from './standing-order-conversion-target.schema';
40
+ export * from './pre-order-conversion-plan-allocation.schema';
41
+ export * from './pre-order-conversion-failed-error.schema';
42
+ export * from './group-create-orders-from-pre-orders-data.schema';
43
+ export * from './group-create-orders-from-pre-orders-request.schema';
44
+ export * from './group-create-orders-from-pre-orders-response.schema';
45
+ export * from './pre-order-conversion-match.schema';
46
+ export * from './pre-order-conversion-mapping.schema';
47
+ export * from './pre-order-conversion-analysis.schema';
48
+ export * from './pre-order-conversion-error.schema';
49
+ export * from './analyze-create-orders-from-pre-orders-data.schema';
50
+ export * from './analyze-create-orders-from-pre-orders-request.schema';
51
+ export * from './analyze-create-orders-from-pre-orders-response.schema';
52
+ export * from './pre-order-conversion-plan-line.schema';
53
+ export * from './pre-order-conversion-plan-entry.schema';
54
+ export * from './pre-order-conversion-order.schema';
55
+ export * from './pre-order-conversion-created.schema';
56
+ export * from './pre-order-conversion-failed.schema';
57
+ export * from './pre-order-conversion-attributes.schema';
58
+ export * from './pre-order-conversion-difference.schema';
59
+ export * from './pre-order-conversion-remainder.schema';
60
+ export * from './pre-order-conversion-allocation.schema';
61
+ export * from './pre-order-conversion-summary-line.schema';
62
+ export * from './pre-order-conversion-summary.schema';
63
+ export * from './pre-order-conversion-match-description.schema';
64
+ export * from './pre-order-conversion-change.schema';
65
+ export * from './pre-order-conversion-skipped.schema';
66
+ export * from './pre-order-conversion-preview-plan-entry.schema';
67
+
68
+ export * from './pre-order-fulfillment-substitute.schema';
69
+
70
+ export * from './pre-order-fulfillment-stop-price.schema';
71
+
72
+ export * from './pre-order-fulfillment.schema';
73
+
74
+ export * from './pre-order-conversion-current-order.schema';
75
+ export * from './create-pre-order-webshop-response.schema';
76
+ export * from './update-pre-order-webshop-response.schema';
77
+ export * from './checkout-pre-order-webshop-request.schema';
78
+ export * from './checkout-pre-order-webshop-response.schema';
79
+ export * from './get-pre-order-by-collection-for-client-response.schema';
80
+ export * from './revert-pre-order-conversion-order.schema';
81
+ export * from './revert-pre-order-conversion-result.schema';
82
+ export * from './revert-pre-order-conversion-response.schema';
@@ -0,0 +1,21 @@
1
+ import { PreOrderConversionWarningEnum } from '../../enum/pre-order-conversion-warning.enum';
2
+ import { PreOrderConversionMatchKindEnum } from '../../enum/pre-order-conversion-match-kind.enum';
3
+ import { z } from 'zod';
4
+ import { MoneySchema } from '../money.schema';
5
+ import { PreOrderConversionDifferenceSchema } from './pre-order-conversion-difference.schema';
6
+ import { PreOrderConversionAttributesSchema } from './pre-order-conversion-attributes.schema';
7
+
8
+ export const PreOrderConversionAllocationSchema = z.object({
9
+ orderUUID: z.uuid(),
10
+ orderId: z.number().int(),
11
+ orderProductUUID: z.uuid(),
12
+ productUUID: z.uuid(),
13
+ quantity: z.number().int().positive(),
14
+ orderProductQuantity: z.number().int().positive(),
15
+ price: MoneySchema,
16
+ multiplicityOptionUUID: z.string().nullable(),
17
+ kind: z.enum(PreOrderConversionMatchKindEnum),
18
+ differences: PreOrderConversionDifferenceSchema.array(),
19
+ warnings: z.enum(PreOrderConversionWarningEnum).array(),
20
+ product: PreOrderConversionAttributesSchema,
21
+ });
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderWithClientSchema } from './pre-order.schema';
3
+ import { PreOrderConversionMappingSchema } from './pre-order-conversion-mapping.schema';
4
+
5
+ export const PreOrderConversionAnalysisSchema = z.object({
6
+ version: z.string().optional(),
7
+ preOrder: PreOrderWithClientSchema,
8
+ mappings: z.record(z.string(), PreOrderConversionMappingSchema),
9
+ warnings: z.array(z.string()),
10
+ });
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+
3
+ export const PreOrderConversionAttributesSchema = z.object({
4
+ name: z.string().nullable(),
5
+ size: z.string().nullable(),
6
+ color: z.string().nullable(),
7
+ grower: z.string().nullable(),
8
+ categoryUUID: z.string().nullable(),
9
+ categoryName: z.string().nullable(),
10
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+
3
+ export const PreOrderConversionChangeSchema = z.object({
4
+ orderProductUUID: z.uuid(),
5
+ isChangedAfterConversion: z.boolean(),
6
+ isOrderAvailable: z.boolean(),
7
+ });
@@ -0,0 +1,9 @@
1
+ import { PreOrderConversionSummarySchema } from './pre-order-conversion-summary.schema';
2
+ import { z } from 'zod';
3
+ import { PreOrderConversionOrderSchema } from './pre-order-conversion-order.schema';
4
+
5
+ export const PreOrderConversionCreatedSchema = z.object({
6
+ preOrderUUID: z.uuid(),
7
+ conversionSummary: PreOrderConversionSummarySchema.nullable().optional(),
8
+ orders: PreOrderConversionOrderSchema.array(),
9
+ });
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { OrderStatusEnum } from '../../enum/order-status.enum';
3
+ export const PreOrderConversionCurrentOrderSchema = z.object({
4
+ uuid: z.uuid(),
5
+ number: z.number().int(),
6
+ status: z.enum(OrderStatusEnum).nullable(),
7
+ exists: z.boolean(),
8
+ });
@@ -0,0 +1,10 @@
1
+ import { PreOrderConversionDifferenceFieldEnum } from '../../enum/pre-order-conversion-difference-field.enum';
2
+ import { z } from 'zod';
3
+
4
+ export const PreOrderConversionDifferenceSchema = z.object({
5
+ field: z.enum(PreOrderConversionDifferenceFieldEnum),
6
+ requestedLabel: z.string().nullable().optional(),
7
+ selectedLabel: z.string().nullable().optional(),
8
+ requested: z.string(),
9
+ selected: z.string().nullable(),
10
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+
3
+ export const PreOrderConversionErrorSchema = z.object({
4
+ preOrderUUID: z.uuid(),
5
+ code: z.string(),
6
+ message: z.string(),
7
+ });
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+
3
+ export const PreOrderConversionFailedErrorSchema = z.object({
4
+ code: z.string(),
5
+ message: z.string(),
6
+ });
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderConversionFailedErrorSchema } from './pre-order-conversion-failed-error.schema';
3
+
4
+ export const PreOrderConversionFailedSchema = z.object({ preOrderUUID: z.uuid(), error: PreOrderConversionFailedErrorSchema });
@@ -0,0 +1,12 @@
1
+ import { PreOrderConversionRemainderSchema } from './pre-order-conversion-remainder.schema';
2
+ import { z } from 'zod';
3
+ import { PreOrderProductExtendedSchema } from '../pre-order-product/pre-order-product.schema';
4
+ import { PreOrderConversionMatchSchema } from './pre-order-conversion-match.schema';
5
+
6
+ export const PreOrderConversionMappingSchema = z.object({
7
+ item: PreOrderProductExtendedSchema,
8
+ matches: z.array(PreOrderConversionMatchSchema),
9
+ warnings: z.array(z.string()),
10
+ remainder: PreOrderConversionRemainderSchema.array().optional(),
11
+ remainingQuantity: z.number(),
12
+ });
@@ -0,0 +1,7 @@
1
+ import { PreOrderConversionAllocationSchema } from './pre-order-conversion-allocation.schema';
2
+
3
+ export const PreOrderConversionMatchDescriptionSchema = PreOrderConversionAllocationSchema.pick({
4
+ kind: true,
5
+ differences: true,
6
+ warnings: true,
7
+ });
@@ -0,0 +1,11 @@
1
+ import { PreOrderConversionMatchDescriptionSchema } from './pre-order-conversion-match-description.schema';
2
+ import { z } from 'zod';
3
+ import { ProductExtendedForAdminSchema } from '../product/product-extended-for-admin.schema';
4
+
5
+ export const PreOrderConversionMatchSchema = z.object({
6
+ product: ProductExtendedForAdminSchema,
7
+ quantity: z.number(),
8
+ description: PreOrderConversionMatchDescriptionSchema.optional(),
9
+ price: z.string().optional(),
10
+ remainingBalance: z.number(),
11
+ });
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ import { OrderSchema } from '../order/order.schema';
3
+
4
+ export const PreOrderConversionOrderSchema = OrderSchema.extend({ warnings: z.string().array() });
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+
3
+ export const PreOrderConversionPlanAllocationSchema = z.object({ productUUID: z.uuid(), quantity: z.number().int().positive() });
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderConversionPlanLineSchema } from './pre-order-conversion-plan-line.schema';
3
+
4
+ export const PreOrderConversionPlanEntrySchema = z.object({
5
+ preOrderUUID: z.uuid(),
6
+ version: z.string().min(1),
7
+ lines: PreOrderConversionPlanLineSchema.array(),
8
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderConversionPlanAllocationSchema } from './pre-order-conversion-plan-allocation.schema';
3
+
4
+ export const PreOrderConversionPlanLineSchema = z.object({
5
+ preOrderProductUUID: z.uuid(),
6
+ allocations: PreOrderConversionPlanAllocationSchema.array(),
7
+ });
@@ -0,0 +1,3 @@
1
+ import { PreOrderConversionPlanEntrySchema } from './pre-order-conversion-plan-entry.schema';
2
+
3
+ export const PreOrderConversionPreviewPlanEntrySchema = PreOrderConversionPlanEntrySchema.omit({ version: true });
@@ -0,0 +1,7 @@
1
+ import { PreOrderConversionRemainderReasonEnum } from '../../enum/pre-order-conversion-remainder-reason.enum';
2
+ import { z } from 'zod';
3
+
4
+ export const PreOrderConversionRemainderSchema = z.object({
5
+ reason: z.enum(PreOrderConversionRemainderReasonEnum),
6
+ quantity: z.number().int().nonnegative(),
7
+ });
@@ -0,0 +1,4 @@
1
+ import { PreOrderConversionSkipReasonEnum } from '../../enum/pre-order-conversion-skip-reason.enum';
2
+ import { z } from 'zod';
3
+
4
+ export const PreOrderConversionSkippedSchema = z.object({ preOrderUUID: z.uuid(), reason: z.enum(PreOrderConversionSkipReasonEnum) });
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import { MoneySchema } from '../money.schema';
3
+ import { PreOrderConversionAttributesSchema } from './pre-order-conversion-attributes.schema';
4
+ import { PreOrderConversionRemainderSchema } from './pre-order-conversion-remainder.schema';
5
+ import { PreOrderConversionAllocationSchema } from './pre-order-conversion-allocation.schema';
6
+
7
+ export const PreOrderConversionSummaryLineSchema = z.object({
8
+ preOrderProductUUID: z.uuid(),
9
+ requested: PreOrderConversionAttributesSchema,
10
+ comment: z.string().nullable(),
11
+ stopPrice: MoneySchema.nullable(),
12
+ isReplaceable: z.boolean(),
13
+ requestedQuantity: z.number().int().nonnegative(),
14
+ allocatedQuantity: z.number().int().nonnegative(),
15
+ closedQuantity: z.number().int().nonnegative(),
16
+ remainder: PreOrderConversionRemainderSchema.array(),
17
+ allocations: PreOrderConversionAllocationSchema.array(),
18
+ });
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ import { PreOrderStatusEnum } from '../../enum/pre-order-status.enum';
3
+ import { PreOrderConversionSummaryLineSchema } from './pre-order-conversion-summary-line.schema';
4
+
5
+ export const PreOrderConversionSummarySchema = z.object({
6
+ version: z.literal(1),
7
+ convertedAt: z.iso.datetime(),
8
+ creatorUserUUID: z.uuid(),
9
+ // Статус до оформления — в него предзаказ вернётся при откате. В ранних снимках поля нет.
10
+ previousStatus: z.enum(PreOrderStatusEnum).optional(),
11
+ lines: PreOrderConversionSummaryLineSchema.array(),
12
+ });
@@ -1,7 +1,11 @@
1
+ import { PreOrderFulfillmentSchema } from './pre-order-fulfillment.schema';
1
2
  import { z } from 'zod';
2
3
  import { PreOrderStatusEnum } from '../../enum';
3
4
 
4
5
  export const PreOrderForClientSchema = z.object({
6
+ fulfillment: z.record(z.uuid(), PreOrderFulfillmentSchema).nullable().optional(),
7
+ orderNumbers: z.number().int().array().optional(),
8
+ hasUnavailableOrders: z.boolean().optional(),
5
9
  uuid: z.string(),
6
10
  clientUUID: z.string(),
7
11
  branchUUID: z.string().nullable(),
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ import { MoneySchema } from '../money.schema';
3
+ export const PreOrderFulfillmentStopPriceSchema = z.object({ limit: MoneySchema, prices: MoneySchema.array(), currency: z.string() });
@@ -0,0 +1,2 @@
1
+ import { z } from 'zod';
2
+ export const PreOrderFulfillmentSubstituteSchema = z.object({ name: z.string(), quantity: z.number().int().positive() });