@floristcloud/api-lib 1.2.176 → 1.2.179

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 (161) hide show
  1. package/build/commands/order/get-order-delivery-pricing.query.js +10 -0
  2. package/build/commands/order/index.js +1 -0
  3. package/build/commands/pre-order/get-pre-order-by-pre-order-collection-uuid.command.js +2 -6
  4. package/build/commands/pre-order/group/analyze-create-orders-from-pre-orders.command.js +4 -35
  5. package/build/commands/pre-order/group/group-create-orders-from-pre-orders.command.js +4 -51
  6. package/build/commands/pre-order/index.js +1 -0
  7. package/build/commands/pre-order/revert-pre-order-conversion.command.js +8 -0
  8. package/build/commands/pre-order/webshop/checkout-pre-order-webshop.command.js +4 -14
  9. package/build/commands/pre-order/webshop/create-pre-order-webshop.command.js +2 -6
  10. package/build/commands/pre-order/webshop/update-pre-order-webshop.command.js +2 -6
  11. package/build/constant/error.js +35 -0
  12. package/build/enum/delivery-pricing-in-transit-mode.enum.js +8 -0
  13. package/build/enum/delivery-pricing-rule-scope.enum.js +9 -0
  14. package/build/enum/index.js +8 -0
  15. package/build/enum/pre-order-conversion-difference-field.enum.js +11 -0
  16. package/build/enum/pre-order-conversion-match-kind.enum.js +8 -0
  17. package/build/enum/pre-order-conversion-remainder-reason.enum.js +10 -0
  18. package/build/enum/pre-order-conversion-skip-reason.enum.js +7 -0
  19. package/build/enum/pre-order-conversion-warning.enum.js +8 -0
  20. package/build/enum/pre-order-fulfillment-status.enum.js +10 -0
  21. package/build/helpers/canonical-money-key.helper.js +9 -0
  22. package/build/helpers/normalize-delivery-pricing-value.helper.js +5 -0
  23. package/build/helpers/validate-unique-delivery-pricing-rules.helper.js +16 -0
  24. package/build/helpers/validate-unique-delivery-pricing-thresholds.helper.js +14 -0
  25. package/build/schemas/index.js +4 -0
  26. package/build/schemas/order/delivery-pricing.schema.js +13 -0
  27. package/build/schemas/order/get-order-delivery-pricing-request.schema.js +5 -0
  28. package/build/schemas/order/get-order-delivery-pricing-response.schema.js +9 -0
  29. package/build/schemas/order/index.js +3 -0
  30. package/build/schemas/order/order-extended-for-client.schema.js +4 -2
  31. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-data.schema.js +10 -0
  32. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-request.schema.js +13 -0
  33. package/build/schemas/pre-order/analyze-create-orders-from-pre-orders-response.schema.js +9 -0
  34. package/build/schemas/pre-order/checkout-pre-order-webshop-request.schema.js +7 -0
  35. package/build/schemas/pre-order/checkout-pre-order-webshop-response.schema.js +6 -0
  36. package/build/schemas/pre-order/create-pre-order-webshop-response.schema.js +6 -0
  37. package/build/schemas/pre-order/get-pre-order-by-collection-for-client-response.schema.js +6 -0
  38. package/build/schemas/pre-order/group-create-orders-from-pre-orders-data.schema.js +12 -0
  39. package/build/schemas/pre-order/group-create-orders-from-pre-orders-request.schema.js +17 -0
  40. package/build/schemas/pre-order/group-create-orders-from-pre-orders-response.schema.js +9 -0
  41. package/build/schemas/pre-order/index.js +39 -0
  42. package/build/schemas/pre-order/pre-order-conversion-allocation.schema.js +23 -0
  43. package/build/schemas/pre-order/pre-order-conversion-analysis.schema.js +12 -0
  44. package/build/schemas/pre-order/pre-order-conversion-attributes.schema.js +12 -0
  45. package/build/schemas/pre-order/pre-order-conversion-change.schema.js +9 -0
  46. package/build/schemas/pre-order/pre-order-conversion-created.schema.js +11 -0
  47. package/build/schemas/pre-order/pre-order-conversion-current-order.schema.js +11 -0
  48. package/build/schemas/pre-order/pre-order-conversion-difference.schema.js +12 -0
  49. package/build/schemas/pre-order/pre-order-conversion-error.schema.js +9 -0
  50. package/build/schemas/pre-order/pre-order-conversion-failed-error.schema.js +8 -0
  51. package/build/schemas/pre-order/pre-order-conversion-failed.schema.js +6 -0
  52. package/build/schemas/pre-order/pre-order-conversion-mapping.schema.js +14 -0
  53. package/build/schemas/pre-order/pre-order-conversion-match-description.schema.js +9 -0
  54. package/build/schemas/pre-order/pre-order-conversion-match.schema.js +13 -0
  55. package/build/schemas/pre-order/pre-order-conversion-order.schema.js +6 -0
  56. package/build/schemas/pre-order/pre-order-conversion-plan-allocation.schema.js +5 -0
  57. package/build/schemas/pre-order/pre-order-conversion-plan-entry.schema.js +10 -0
  58. package/build/schemas/pre-order/pre-order-conversion-plan-line.schema.js +9 -0
  59. package/build/schemas/pre-order/pre-order-conversion-preview-plan-entry.schema.js +5 -0
  60. package/build/schemas/pre-order/pre-order-conversion-remainder.schema.js +9 -0
  61. package/build/schemas/pre-order/pre-order-conversion-skipped.schema.js +6 -0
  62. package/build/schemas/pre-order/pre-order-conversion-summary-line.schema.js +20 -0
  63. package/build/schemas/pre-order/pre-order-conversion-summary.schema.js +14 -0
  64. package/build/schemas/pre-order/pre-order-for-client.schema.js +4 -0
  65. package/build/schemas/pre-order/pre-order-fulfillment-stop-price.schema.js +6 -0
  66. package/build/schemas/pre-order/pre-order-fulfillment-substitute.schema.js +5 -0
  67. package/build/schemas/pre-order/pre-order-fulfillment.schema.js +16 -0
  68. package/build/schemas/pre-order/pre-order.schema.js +14 -1
  69. package/build/schemas/pre-order/revert-pre-order-conversion-order.schema.js +8 -0
  70. package/build/schemas/pre-order/revert-pre-order-conversion-response.schema.js +8 -0
  71. package/build/schemas/pre-order/revert-pre-order-conversion-result.schema.js +10 -0
  72. package/build/schemas/pre-order/update-pre-order-webshop-response.schema.js +6 -0
  73. package/build/schemas/settings/city-delivery-pricing-rule.schema.js +11 -0
  74. package/build/schemas/settings/default-delivery-pricing-rule.schema.js +11 -0
  75. package/build/schemas/settings/delivery-pricing-rule.schema.js +12 -0
  76. package/build/schemas/settings/delivery-pricing-rules.schema.js +7 -0
  77. package/build/schemas/settings/delivery-pricing-tier.schema.js +10 -0
  78. package/build/schemas/settings/delivery-pricing-tiers.schema.js +7 -0
  79. package/build/schemas/settings/group-delivery-pricing-rule.schema.js +11 -0
  80. package/build/schemas/settings/settings.schema.js +18 -12
  81. package/commands/order/get-order-delivery-pricing.query.ts +10 -0
  82. package/commands/order/index.ts +2 -0
  83. package/commands/pre-order/get-pre-order-by-pre-order-collection-uuid.command.ts +3 -7
  84. package/commands/pre-order/group/analyze-create-orders-from-pre-orders.command.ts +3 -49
  85. package/commands/pre-order/group/group-create-orders-from-pre-orders.command.ts +3 -51
  86. package/commands/pre-order/index.ts +1 -0
  87. package/commands/pre-order/revert-pre-order-conversion.command.ts +7 -0
  88. package/commands/pre-order/webshop/checkout-pre-order-webshop.command.ts +3 -14
  89. package/commands/pre-order/webshop/create-pre-order-webshop.command.ts +3 -7
  90. package/commands/pre-order/webshop/update-pre-order-webshop.command.ts +3 -7
  91. package/constant/error.ts +35 -0
  92. package/enum/delivery-pricing-in-transit-mode.enum.ts +4 -0
  93. package/enum/delivery-pricing-rule-scope.enum.ts +5 -0
  94. package/enum/index.ts +10 -0
  95. package/enum/pre-order-conversion-difference-field.enum.ts +7 -0
  96. package/enum/pre-order-conversion-match-kind.enum.ts +4 -0
  97. package/enum/pre-order-conversion-remainder-reason.enum.ts +6 -0
  98. package/enum/pre-order-conversion-skip-reason.enum.ts +3 -0
  99. package/enum/pre-order-conversion-warning.enum.ts +4 -0
  100. package/enum/pre-order-fulfillment-status.enum.ts +6 -0
  101. package/helpers/canonical-money-key.helper.ts +5 -0
  102. package/helpers/normalize-delivery-pricing-value.helper.ts +1 -0
  103. package/helpers/validate-unique-delivery-pricing-rules.helper.ts +18 -0
  104. package/helpers/validate-unique-delivery-pricing-thresholds.helper.ts +13 -0
  105. package/package.json +1 -1
  106. package/schemas/index.ts +4 -0
  107. package/schemas/order/delivery-pricing.schema.ts +11 -0
  108. package/schemas/order/get-order-delivery-pricing-request.schema.ts +3 -0
  109. package/schemas/order/get-order-delivery-pricing-response.schema.ts +7 -0
  110. package/schemas/order/index.ts +4 -0
  111. package/schemas/order/order-extended-for-client.schema.ts +4 -2
  112. package/schemas/pre-order/analyze-create-orders-from-pre-orders-data.schema.ts +8 -0
  113. package/schemas/pre-order/analyze-create-orders-from-pre-orders-request.schema.ts +11 -0
  114. package/schemas/pre-order/analyze-create-orders-from-pre-orders-response.schema.ts +7 -0
  115. package/schemas/pre-order/checkout-pre-order-webshop-request.schema.ts +4 -0
  116. package/schemas/pre-order/checkout-pre-order-webshop-response.schema.ts +3 -0
  117. package/schemas/pre-order/create-pre-order-webshop-response.schema.ts +3 -0
  118. package/schemas/pre-order/get-pre-order-by-collection-for-client-response.schema.ts +3 -0
  119. package/schemas/pre-order/group-create-orders-from-pre-orders-data.schema.ts +10 -0
  120. package/schemas/pre-order/group-create-orders-from-pre-orders-request.schema.ts +15 -0
  121. package/schemas/pre-order/group-create-orders-from-pre-orders-response.schema.ts +7 -0
  122. package/schemas/pre-order/index.ts +43 -0
  123. package/schemas/pre-order/pre-order-conversion-allocation.schema.ts +21 -0
  124. package/schemas/pre-order/pre-order-conversion-analysis.schema.ts +10 -0
  125. package/schemas/pre-order/pre-order-conversion-attributes.schema.ts +10 -0
  126. package/schemas/pre-order/pre-order-conversion-change.schema.ts +7 -0
  127. package/schemas/pre-order/pre-order-conversion-created.schema.ts +9 -0
  128. package/schemas/pre-order/pre-order-conversion-current-order.schema.ts +8 -0
  129. package/schemas/pre-order/pre-order-conversion-difference.schema.ts +10 -0
  130. package/schemas/pre-order/pre-order-conversion-error.schema.ts +7 -0
  131. package/schemas/pre-order/pre-order-conversion-failed-error.schema.ts +6 -0
  132. package/schemas/pre-order/pre-order-conversion-failed.schema.ts +4 -0
  133. package/schemas/pre-order/pre-order-conversion-mapping.schema.ts +12 -0
  134. package/schemas/pre-order/pre-order-conversion-match-description.schema.ts +7 -0
  135. package/schemas/pre-order/pre-order-conversion-match.schema.ts +11 -0
  136. package/schemas/pre-order/pre-order-conversion-order.schema.ts +4 -0
  137. package/schemas/pre-order/pre-order-conversion-plan-allocation.schema.ts +3 -0
  138. package/schemas/pre-order/pre-order-conversion-plan-entry.schema.ts +8 -0
  139. package/schemas/pre-order/pre-order-conversion-plan-line.schema.ts +7 -0
  140. package/schemas/pre-order/pre-order-conversion-preview-plan-entry.schema.ts +3 -0
  141. package/schemas/pre-order/pre-order-conversion-remainder.schema.ts +7 -0
  142. package/schemas/pre-order/pre-order-conversion-skipped.schema.ts +4 -0
  143. package/schemas/pre-order/pre-order-conversion-summary-line.schema.ts +18 -0
  144. package/schemas/pre-order/pre-order-conversion-summary.schema.ts +12 -0
  145. package/schemas/pre-order/pre-order-for-client.schema.ts +4 -0
  146. package/schemas/pre-order/pre-order-fulfillment-stop-price.schema.ts +3 -0
  147. package/schemas/pre-order/pre-order-fulfillment-substitute.schema.ts +2 -0
  148. package/schemas/pre-order/pre-order-fulfillment.schema.ts +13 -0
  149. package/schemas/pre-order/pre-order.schema.ts +14 -1
  150. package/schemas/pre-order/revert-pre-order-conversion-order.schema.ts +6 -0
  151. package/schemas/pre-order/revert-pre-order-conversion-response.schema.ts +6 -0
  152. package/schemas/pre-order/revert-pre-order-conversion-result.schema.ts +8 -0
  153. package/schemas/pre-order/update-pre-order-webshop-response.schema.ts +3 -0
  154. package/schemas/settings/city-delivery-pricing-rule.schema.ts +9 -0
  155. package/schemas/settings/default-delivery-pricing-rule.schema.ts +9 -0
  156. package/schemas/settings/delivery-pricing-rule.schema.ts +10 -0
  157. package/schemas/settings/delivery-pricing-rules.schema.ts +5 -0
  158. package/schemas/settings/delivery-pricing-tier.schema.ts +8 -0
  159. package/schemas/settings/delivery-pricing-tiers.schema.ts +5 -0
  160. package/schemas/settings/group-delivery-pricing-rule.schema.ts +9 -0
  161. package/schemas/settings/settings.schema.ts +14 -11
@@ -25,3 +25,5 @@ export * from './webshop/create-cart.command';
25
25
  export * from './webshop/get-order-list-for-client.query';
26
26
  export * from './webshop/update-cart.command';
27
27
  export * from './webshop/get-order-sales-by-month.query';
28
+
29
+ export * from './get-order-delivery-pricing.query';
@@ -1,11 +1,7 @@
1
- import { z } from 'zod';
2
- import { PreOrderSchema } from '../../schemas';
3
-
4
- const GetPreOrderResponseSchema = z.object({
5
- data: PreOrderSchema,
6
- });
1
+ import type { z } from 'zod';
2
+ import { GetPreOrderByCollectionForClientResponseSchema } from '../../schemas/pre-order/get-pre-order-by-collection-for-client-response.schema';
7
3
 
8
4
  export namespace GetPreOrderByPreOrderCollectionUuidContractCommand {
9
- export const ResponseSchema = GetPreOrderResponseSchema;
5
+ export const ResponseSchema = GetPreOrderByCollectionForClientResponseSchema;
10
6
  export type Response = z.infer<typeof ResponseSchema>;
11
7
  }
@@ -1,52 +1,6 @@
1
- import { z } from 'zod';
2
- import {
3
- MatchingConfigSchema,
4
- PreOrderProductExtendedSchema,
5
- PreOrderWithClientSchema,
6
- ProductExtendedForAdminSchema,
7
- } from '../../../schemas';
8
-
9
- const AnalyzeCreateOrdersFromPreOrdersRequestSchema = z.object({
10
- preOrderUUIDs: z.uuid().array(),
11
- consignmentUUIDs: z.uuid().array(),
12
- matchingConfig: MatchingConfigSchema.optional().nullable(),
13
- isProportionalAllocation: z.coerce.boolean().optional(),
14
- });
15
-
16
- const AnalyzeCreateOrdersFromPreOrdersResponseSchema = z.object({
17
- message: z.string().optional(),
18
- data: z.object({
19
- analyses: z.array(
20
- z.object({
21
- preOrder: PreOrderWithClientSchema,
22
- mappings: z.record(
23
- z.string(),
24
- z.object({
25
- item: PreOrderProductExtendedSchema,
26
- matches: z.array(
27
- z.object({
28
- product: ProductExtendedForAdminSchema,
29
- quantity: z.number(),
30
- remainingBalance: z.number(),
31
- }),
32
- ),
33
- warnings: z.array(z.string()),
34
- remainingQuantity: z.number(),
35
- }),
36
- ),
37
- warnings: z.array(z.string()),
38
- }),
39
- ),
40
- errorList: z
41
- .array(
42
- z.object({
43
- code: z.string(),
44
- message: z.string(),
45
- }),
46
- )
47
- .optional(),
48
- }),
49
- });
1
+ import type { z } from 'zod';
2
+ import { AnalyzeCreateOrdersFromPreOrdersRequestSchema } from '../../../schemas/pre-order/analyze-create-orders-from-pre-orders-request.schema';
3
+ import { AnalyzeCreateOrdersFromPreOrdersResponseSchema } from '../../../schemas/pre-order/analyze-create-orders-from-pre-orders-response.schema';
50
4
 
51
5
  export namespace AnalyzeCreateOrdersFromPreOrdersContractCommand {
52
6
  export const RequestSchema = AnalyzeCreateOrdersFromPreOrdersRequestSchema;
@@ -1,54 +1,6 @@
1
- import { z } from 'zod';
2
- import { MatchingConfigSchema, OrderSchema } from '../../../schemas';
3
-
4
- const GroupCreateOrdersFromPreOrdersRequestSchema = z.object({
5
- preOrderUUIDs: z.uuid().array(),
6
- consignmentUUIDs: z.uuid().array(),
7
- matchingConfig: MatchingConfigSchema.optional().nullable(),
8
- isProportionalAllocation: z.coerce.boolean().optional(),
9
- orderProductTag: z.string().nullable().optional(),
10
- /**
11
- * The conversion the user confirmed in the preview. Without it the server re-runs the analysis
12
- * and converts whatever it finds at that moment; with it the analysis is skipped and exactly
13
- * these allocations are created. Carries product choice and quantity only — prices always stay
14
- * server-side (product price + discount rules).
15
- */
16
- plan: z
17
- .object({
18
- preOrderUUID: z.uuid(),
19
- lines: z
20
- .object({
21
- preOrderProductUUID: z.uuid(),
22
- allocations: z.object({ productUUID: z.uuid(), quantity: z.number().int().positive() }).array(),
23
- })
24
- .array(),
25
- })
26
- .array()
27
- .optional(),
28
- });
29
-
30
- const GroupCreateOrdersFromPreOrdersResponseSchema = z.object({
31
- message: z.string().optional(),
32
- data: z.object({
33
- created: z
34
- .object({
35
- preOrderUUID: z.uuid(),
36
- orders: OrderSchema.extend({
37
- warnings: z.string().array(),
38
- }).array(),
39
- })
40
- .array(),
41
- failed: z
42
- .object({
43
- preOrderUUID: z.uuid(),
44
- error: z.object({
45
- code: z.string(),
46
- message: z.string(),
47
- }),
48
- })
49
- .array(),
50
- }),
51
- });
1
+ import type { z } from 'zod';
2
+ import { GroupCreateOrdersFromPreOrdersRequestSchema } from '../../../schemas/pre-order/group-create-orders-from-pre-orders-request.schema';
3
+ import { GroupCreateOrdersFromPreOrdersResponseSchema } from '../../../schemas/pre-order/group-create-orders-from-pre-orders-response.schema';
52
4
 
53
5
  export namespace GroupCreateOrdersFromPreOrdersContractCommand {
54
6
  export const RequestSchema = GroupCreateOrdersFromPreOrdersRequestSchema;
@@ -11,3 +11,4 @@ export * from './create-order-from-pre-order.command';
11
11
  export * from './import-standing-order.command';
12
12
  export * from './get-standing-order-import-template.command';
13
13
  export * from './export-pre-order.command';
14
+ export * from './revert-pre-order-conversion.command';
@@ -0,0 +1,7 @@
1
+ import type { z } from 'zod';
2
+ import { RevertPreOrderConversionResponseSchema } from '../../schemas/pre-order/revert-pre-order-conversion-response.schema';
3
+
4
+ export namespace RevertPreOrderConversionContractCommand {
5
+ export const ResponseSchema = RevertPreOrderConversionResponseSchema;
6
+ export type Response = z.infer<typeof ResponseSchema>;
7
+ }
@@ -1,17 +1,6 @@
1
- import { z } from 'zod';
2
- import { PreOrderSchema } from '../../../schemas';
3
-
4
- const CheckoutPreOrderWebshopRequestSchema = z
5
- .object({
6
- comment: z.string().nullable().optional(),
7
- branchUUID: z.string().nullable().optional(),
8
- })
9
- .default({});
10
-
11
- const CheckoutPreOrderWebshopResponseSchema = z.object({
12
- message: z.string().optional(),
13
- data: PreOrderSchema,
14
- });
1
+ import { CheckoutPreOrderWebshopRequestSchema } from '../../../schemas/pre-order/checkout-pre-order-webshop-request.schema';
2
+ import { CheckoutPreOrderWebshopResponseSchema } from '../../../schemas/pre-order/checkout-pre-order-webshop-response.schema';
3
+ import type { z } from 'zod';
15
4
 
16
5
  export namespace CheckoutPreOrderWebshopContractCommand {
17
6
  export const RequestSchema = CheckoutPreOrderWebshopRequestSchema;
@@ -1,10 +1,6 @@
1
- import { z } from 'zod';
2
- import { CreatePreOrderWebshopSchema, PreOrderSchema } from '../../../schemas';
3
-
4
- const CreatePreOrderWebshopResponseSchema = z.object({
5
- message: z.string().optional(),
6
- data: PreOrderSchema,
7
- });
1
+ import { CreatePreOrderWebshopResponseSchema } from '../../../schemas/pre-order/create-pre-order-webshop-response.schema';
2
+ import type { z } from 'zod';
3
+ import { CreatePreOrderWebshopSchema } from '../../../schemas';
8
4
 
9
5
  export namespace CreatePreOrderWebshopContractCommand {
10
6
  export const RequestSchema = CreatePreOrderWebshopSchema;
@@ -1,10 +1,6 @@
1
- import { z } from 'zod';
2
- import { UpdatePreOrderWebshopSchema, PreOrderSchema } from '../../../schemas';
3
-
4
- const UpdatePreOrderWebshopResponseSchema = z.object({
5
- message: z.string().optional(),
6
- data: PreOrderSchema,
7
- });
1
+ import { UpdatePreOrderWebshopResponseSchema } from '../../../schemas/pre-order/update-pre-order-webshop-response.schema';
2
+ import type { z } from 'zod';
3
+ import { UpdatePreOrderWebshopSchema } from '../../../schemas';
8
4
 
9
5
  export namespace UpdatePreOrderWebshopContractCommand {
10
6
  export const RequestSchema = UpdatePreOrderWebshopSchema;
package/constant/error.ts CHANGED
@@ -1112,6 +1112,41 @@ export const ERRORS = {
1112
1112
  message: 'Failed to create standing-order position from pre-order position',
1113
1113
  httpCode: 400,
1114
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
+ },
1115
1150
  PRE_ORDER_CONVERSION_ANALYSIS_STALE: {
1116
1151
  code: 'PO048',
1117
1152
  message: 'The pre-order changed after the conversion analysis, analyze it again',
@@ -0,0 +1,4 @@
1
+ export enum DeliveryPricingInTransitModeEnum {
2
+ FREE = 'FREE',
3
+ SAME_RULES = 'SAME_RULES',
4
+ }
@@ -0,0 +1,5 @@
1
+ export enum DeliveryPricingRuleScopeEnum {
2
+ DEFAULT = 'DEFAULT',
3
+ CITY = 'CITY',
4
+ GROUP = 'GROUP',
5
+ }
package/enum/index.ts CHANGED
@@ -152,3 +152,13 @@ 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';
162
+
163
+ export * from './delivery-pricing-rule-scope.enum';
164
+ export * from './delivery-pricing-in-transit-mode.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
+ }
@@ -0,0 +1,5 @@
1
+ /** Input has already passed MoneySchema. Compare decimal strings without floating point arithmetic. */
2
+ export const canonicalMoneyKey = (value: string): string => {
3
+ const [integer, fraction = ''] = value.split('.');
4
+ return `${integer.replace(/^0+(?=\d)/, '')}.${(fraction + '00').slice(0, 2)}`;
5
+ };
@@ -0,0 +1 @@
1
+ export const normalizeDeliveryPricingValue = (value: string): string => value.trim().toLowerCase();
@@ -0,0 +1,18 @@
1
+ import type { RefinementCtx } from 'zod';
2
+ import { DeliveryPricingRuleScopeEnum } from '../enum/delivery-pricing-rule-scope.enum';
3
+ import { normalizeDeliveryPricingValue } from './normalize-delivery-pricing-value.helper';
4
+
5
+ export function validateUniqueDeliveryPricingRules(
6
+ rules: { scope: DeliveryPricingRuleScopeEnum; value: string | null }[],
7
+ ctx: RefinementCtx,
8
+ ): void {
9
+ const seen = new Set<string>();
10
+ rules.forEach((rule, index) => {
11
+ const value = normalizeDeliveryPricingValue(rule.value ?? '');
12
+ const key = `${rule.scope}:${value}`;
13
+ if (seen.has(key)) {
14
+ ctx.addIssue({ code: 'custom', path: [index, 'value'], message: 'Duplicate delivery pricing rule' });
15
+ }
16
+ seen.add(key);
17
+ });
18
+ }
@@ -0,0 +1,13 @@
1
+ import type { RefinementCtx } from 'zod';
2
+ import { canonicalMoneyKey } from './canonical-money-key.helper';
3
+
4
+ export function validateUniqueDeliveryPricingThresholds(tiers: { minSubtotal: string }[], ctx: RefinementCtx): void {
5
+ const thresholds = new Set<string>();
6
+ tiers.forEach((tier, index) => {
7
+ const key = canonicalMoneyKey(tier.minSubtotal);
8
+ if (thresholds.has(key)) {
9
+ ctx.addIssue({ code: 'custom', path: [index, 'minSubtotal'], message: 'Duplicate delivery pricing threshold' });
10
+ }
11
+ thresholds.add(key);
12
+ });
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.176",
3
+ "version": "1.2.179",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
package/schemas/index.ts CHANGED
@@ -107,6 +107,10 @@ export * from './report/user-activity-summary-row.schema';
107
107
  export * from './report/user-activity-timeline-row.schema';
108
108
  export * from './service/service.schema';
109
109
  export * from './settings/settings.schema';
110
+ export * from './settings/city-delivery-pricing-rule.schema';
111
+ export * from './settings/default-delivery-pricing-rule.schema';
112
+ export * from './settings/group-delivery-pricing-rule.schema';
113
+ export * from './settings/delivery-pricing-tiers.schema';
110
114
  export * from './transaction';
111
115
  export * from './transaction/transaction-list.schema';
112
116
  export * from './transaction/transaction.schema';
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import { MoneySchema } from '../money.schema';
3
+ import { DeliveryPricingTierSchema } from '../settings/delivery-pricing-tier.schema';
4
+ import { DeliveryPricingInTransitModeEnum } from '../../enum/delivery-pricing-in-transit-mode.enum';
5
+
6
+ export const DeliveryPricingSchema = z.object({
7
+ cost: MoneySchema,
8
+ inStockSubtotal: MoneySchema,
9
+ tiers: z.array(DeliveryPricingTierSchema),
10
+ inTransitMode: z.nativeEnum(DeliveryPricingInTransitModeEnum),
11
+ });
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+
3
+ export const GetOrderDeliveryPricingRequestSchema = z.object({ orderUUID: z.string().uuid() });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { DeliveryPricingSchema } from './delivery-pricing.schema';
3
+
4
+ export const GetOrderDeliveryPricingResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: DeliveryPricingSchema.nullable(),
7
+ });
@@ -12,3 +12,7 @@ export * from './order.schema';
12
12
  export * from './update-cart-delivery-request.schema';
13
13
  export * from './update-cart-request.schema';
14
14
  export * from './update-cart-response.schema';
15
+
16
+ export * from './delivery-pricing.schema';
17
+ export * from './get-order-delivery-pricing-request.schema';
18
+ export * from './get-order-delivery-pricing-response.schema';
@@ -1,3 +1,4 @@
1
+ import { DeliveryPricingSchema } from './delivery-pricing.schema';
1
2
  import { z } from 'zod';
2
3
  import { OrderForClientSchema } from './order-for-client.schema';
3
4
  import { ClientForClientSchema } from '../client/client-for-client.schema';
@@ -11,7 +12,8 @@ export const OrderExtendedForClientSchema = OrderForClientSchema.extend({
11
12
  delivery: OrderDeliverySchema.nullable(),
12
13
  writeOffSum: MoneySchema,
13
14
  consignmentDeliveryDates: z.union([z.date(), z.literal('in-stock')]).array(),
14
- // Server-computed delivery cost for the current subtotal when the tier rule is on (null when off).
15
- // Convenience preview for the cart page; the storefront still recomputes locally on the delivery/pickup toggle.
15
+ // Server quote for the current cart; transit products do not contribute to the stock threshold.
16
+ deliveryPricing: DeliveryPricingSchema.nullable(),
17
+ /** @deprecated One-release compatibility alias for deliveryPricing.cost. */
16
18
  deliveryCostPreview: MoneySchema.nullable(),
17
19
  });
@@ -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
+ });