@floristcloud/api-lib 1.2.170 → 1.2.172

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 (45) hide show
  1. package/build/commands/integration/one-c/get-one-c-stock-conflict-list.query.js +10 -0
  2. package/build/commands/integration/one-c/get-one-c-stock-conflict-preview.query.js +8 -0
  3. package/build/commands/integration/one-c/index.js +3 -0
  4. package/build/commands/integration/one-c/resolve-one-c-stock-conflict.command.js +10 -0
  5. package/build/constant/error.js +17 -0
  6. package/build/enum/index.js +3 -0
  7. package/build/enum/notification-type.enum.js +2 -0
  8. package/build/enum/one-c-stock-conflict-line-action.enum.js +10 -0
  9. package/build/enum/one-c-stock-conflict-line-restriction.enum.js +11 -0
  10. package/build/enum/one-c-stock-conflict-status.enum.js +15 -0
  11. package/build/schemas/integration/one-c/get-one-c-stock-conflict-list-request.schema.js +10 -0
  12. package/build/schemas/integration/one-c/get-one-c-stock-conflict-list-response.schema.js +9 -0
  13. package/build/schemas/integration/one-c/get-one-c-stock-conflict-preview-response.schema.js +9 -0
  14. package/build/schemas/integration/one-c/index.js +11 -0
  15. package/build/schemas/integration/one-c/one-c-stock-conflict-decision.schema.js +16 -0
  16. package/build/schemas/integration/one-c/one-c-stock-conflict-line.schema.js +18 -0
  17. package/build/schemas/integration/one-c/one-c-stock-conflict-list.schema.js +11 -0
  18. package/build/schemas/integration/one-c/one-c-stock-conflict-preview.schema.js +14 -0
  19. package/build/schemas/integration/one-c/one-c-stock-conflict-resolution.schema.js +13 -0
  20. package/build/schemas/integration/one-c/one-c-stock-conflict.schema.js +24 -0
  21. package/build/schemas/integration/one-c/resolve-one-c-stock-conflict-request.schema.js +10 -0
  22. package/build/schemas/integration/one-c/resolve-one-c-stock-conflict-response.schema.js +9 -0
  23. package/commands/integration/one-c/get-one-c-stock-conflict-list.query.ts +11 -0
  24. package/commands/integration/one-c/get-one-c-stock-conflict-preview.query.ts +7 -0
  25. package/commands/integration/one-c/index.ts +3 -0
  26. package/commands/integration/one-c/resolve-one-c-stock-conflict.command.ts +11 -0
  27. package/constant/error.ts +17 -0
  28. package/enum/index.ts +3 -0
  29. package/enum/notification-type.enum.ts +2 -0
  30. package/enum/one-c-stock-conflict-line-action.enum.ts +6 -0
  31. package/enum/one-c-stock-conflict-line-restriction.enum.ts +7 -0
  32. package/enum/one-c-stock-conflict-status.enum.ts +11 -0
  33. package/package.json +1 -1
  34. package/schemas/integration/one-c/get-one-c-stock-conflict-list-request.schema.ts +8 -0
  35. package/schemas/integration/one-c/get-one-c-stock-conflict-list-response.schema.ts +7 -0
  36. package/schemas/integration/one-c/get-one-c-stock-conflict-preview-response.schema.ts +7 -0
  37. package/schemas/integration/one-c/index.ts +11 -0
  38. package/schemas/integration/one-c/one-c-stock-conflict-decision.schema.ts +14 -0
  39. package/schemas/integration/one-c/one-c-stock-conflict-line.schema.ts +16 -0
  40. package/schemas/integration/one-c/one-c-stock-conflict-list.schema.ts +9 -0
  41. package/schemas/integration/one-c/one-c-stock-conflict-preview.schema.ts +12 -0
  42. package/schemas/integration/one-c/one-c-stock-conflict-resolution.schema.ts +11 -0
  43. package/schemas/integration/one-c/one-c-stock-conflict.schema.ts +22 -0
  44. package/schemas/integration/one-c/resolve-one-c-stock-conflict-request.schema.ts +8 -0
  45. package/schemas/integration/one-c/resolve-one-c-stock-conflict-response.schema.ts +7 -0
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCStockConflictListContractQuery = void 0;
4
+ const get_one_c_stock_conflict_list_request_schema_1 = require("../../../schemas/integration/one-c/get-one-c-stock-conflict-list-request.schema");
5
+ const get_one_c_stock_conflict_list_response_schema_1 = require("../../../schemas/integration/one-c/get-one-c-stock-conflict-list-response.schema");
6
+ var GetOneCStockConflictListContractQuery;
7
+ (function (GetOneCStockConflictListContractQuery) {
8
+ GetOneCStockConflictListContractQuery.RequestSchema = get_one_c_stock_conflict_list_request_schema_1.GetOneCStockConflictListRequestSchema;
9
+ GetOneCStockConflictListContractQuery.ResponseSchema = get_one_c_stock_conflict_list_response_schema_1.GetOneCStockConflictListResponseSchema;
10
+ })(GetOneCStockConflictListContractQuery || (exports.GetOneCStockConflictListContractQuery = GetOneCStockConflictListContractQuery = {}));
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCStockConflictPreviewContractQuery = void 0;
4
+ const get_one_c_stock_conflict_preview_response_schema_1 = require("../../../schemas/integration/one-c/get-one-c-stock-conflict-preview-response.schema");
5
+ var GetOneCStockConflictPreviewContractQuery;
6
+ (function (GetOneCStockConflictPreviewContractQuery) {
7
+ GetOneCStockConflictPreviewContractQuery.ResponseSchema = get_one_c_stock_conflict_preview_response_schema_1.GetOneCStockConflictPreviewResponseSchema;
8
+ })(GetOneCStockConflictPreviewContractQuery || (exports.GetOneCStockConflictPreviewContractQuery = GetOneCStockConflictPreviewContractQuery = {}));
@@ -18,3 +18,6 @@ __exportStar(require("./connect-one-c.command"), exports);
18
18
  __exportStar(require("./rotate-one-c-password.command"), exports);
19
19
  __exportStar(require("./disconnect-one-c.command"), exports);
20
20
  __exportStar(require("./get-one-c-status.query"), exports);
21
+ __exportStar(require("./get-one-c-stock-conflict-list.query"), exports);
22
+ __exportStar(require("./get-one-c-stock-conflict-preview.query"), exports);
23
+ __exportStar(require("./resolve-one-c-stock-conflict.command"), exports);
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveOneCStockConflictContractCommand = void 0;
4
+ const resolve_one_c_stock_conflict_request_schema_1 = require("../../../schemas/integration/one-c/resolve-one-c-stock-conflict-request.schema");
5
+ const resolve_one_c_stock_conflict_response_schema_1 = require("../../../schemas/integration/one-c/resolve-one-c-stock-conflict-response.schema");
6
+ var ResolveOneCStockConflictContractCommand;
7
+ (function (ResolveOneCStockConflictContractCommand) {
8
+ ResolveOneCStockConflictContractCommand.RequestSchema = resolve_one_c_stock_conflict_request_schema_1.ResolveOneCStockConflictRequestSchema;
9
+ ResolveOneCStockConflictContractCommand.ResponseSchema = resolve_one_c_stock_conflict_response_schema_1.ResolveOneCStockConflictResponseSchema;
10
+ })(ResolveOneCStockConflictContractCommand || (exports.ResolveOneCStockConflictContractCommand = ResolveOneCStockConflictContractCommand = {}));
@@ -1650,6 +1650,23 @@ exports.ERRORS = {
1650
1650
  ONE_C_ORDERS_EXPORT_FAILED: { code: 'OC009', message: 'Failed to export orders to 1C', httpCode: 500 },
1651
1651
  ONE_C_ORDERS_IMPORT_FAILED: { code: 'OC010', message: 'Failed to apply orders from 1C', httpCode: 500 },
1652
1652
  ONE_C_ACTOR_NOT_FOUND: { code: 'OC011', message: 'No company admin to attribute 1C changes to', httpCode: 409 },
1653
+ ONE_C_STOCK_CONFLICT_CHECK_FAILED: { code: 'OC012', message: 'Failed to check 1C stock conflicts', httpCode: 500 },
1654
+ ONE_C_STOCK_CONFLICT_FETCH_FAILED: { code: 'OC013', message: 'Failed to read 1C stock conflicts', httpCode: 500 },
1655
+ ONE_C_STOCK_CONFLICT_NOTIFY_FAILED: { code: 'OC014', message: 'Failed to notify admins about 1C stock conflicts', httpCode: 500 },
1656
+ ONE_C_STOCK_CONFLICT_NOT_FOUND: { code: 'OC015', message: '1C stock conflict not found', httpCode: 404 },
1657
+ // Снимок остатка или строки резерва изменились после предпросмотра — сотрудник пересчитывает решение.
1658
+ ONE_C_STOCK_CONFLICT_STALE: { code: 'OC016', message: '1C stock conflict data changed, refresh the preview', httpCode: 409 },
1659
+ ONE_C_STOCK_CONFLICT_BUSY: { code: 'OC017', message: '1C stock conflicts are being checked, try again', httpCode: 409 },
1660
+ ONE_C_STOCK_CONFLICT_INVALID_DECISION: { code: 'OC018', message: 'Invalid decision for a 1C stock conflict line', httpCode: 400 },
1661
+ ONE_C_STOCK_CONFLICT_LINE_NOT_EDITABLE: { code: 'OC019', message: 'This order line cannot be changed from the panel', httpCode: 409 },
1662
+ ONE_C_STOCK_CONFLICT_PREVIEW_FAILED: { code: 'OC020', message: 'Failed to build 1C stock conflict preview', httpCode: 500 },
1663
+ ONE_C_STOCK_CONFLICT_RESOLVE_FAILED: { code: 'OC021', message: 'Failed to apply 1C stock conflict decision', httpCode: 500 },
1664
+ // Строки менялись, а доступный остаток пересчитать нельзя (товар вне поставки синхронизации 1С) — решение откатывается.
1665
+ ONE_C_STOCK_CONFLICT_BALANCE_NOT_RECOMPUTED: {
1666
+ code: 'OC022',
1667
+ message: 'Product stock cannot be recomputed: it is not in the 1C sync consignment',
1668
+ httpCode: 409,
1669
+ },
1653
1670
  // COMPANY INTEGRATION (общая запись интеграции компании)
1654
1671
  COMPANY_INTEGRATION_FETCH_FAILED: { code: 'CINT001', message: 'Failed to read company integration', httpCode: 500 },
1655
1672
  COMPANY_INTEGRATION_NOT_SAVED: { code: 'CINT002', message: 'Failed to save company integration', httpCode: 500 },
@@ -165,3 +165,6 @@ __exportStar(require("./webshop-main-display-mode.enum"), exports);
165
165
  __exportStar(require("./webshop-mode.enum"), exports);
166
166
  __exportStar(require("./write-off-report-date-basis.enum"), exports);
167
167
  __exportStar(require("./write-off-status.enum"), exports);
168
+ __exportStar(require("./one-c-stock-conflict-status.enum"), exports);
169
+ __exportStar(require("./one-c-stock-conflict-line-action.enum"), exports);
170
+ __exportStar(require("./one-c-stock-conflict-line-restriction.enum"), exports);
@@ -14,4 +14,6 @@ var NotificationTypeEnum;
14
14
  NotificationTypeEnum["ACCOUNT_DELETION_REQUEST_CREATED"] = "ACCOUNT_DELETION_REQUEST_CREATED";
15
15
  NotificationTypeEnum["ACCOUNT_DELETION_REQUEST_APPROVED"] = "ACCOUNT_DELETION_REQUEST_APPROVED";
16
16
  NotificationTypeEnum["ACCOUNT_DELETION_REQUEST_REJECTED"] = "ACCOUNT_DELETION_REQUEST_REJECTED";
17
+ // Админам: подтверждён конфликт «остаток 1С меньше резерва FC» или его рост (FC-560).
18
+ NotificationTypeEnum["ONE_C_STOCK_CONFLICT"] = "ONE_C_STOCK_CONFLICT";
17
19
  })(NotificationTypeEnum || (exports.NotificationTypeEnum = NotificationTypeEnum = {}));
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictLineActionEnum = void 0;
4
+ // Решение сотрудника по строке заказа в конфликте «остаток 1С меньше резерва FC» (FC-560).
5
+ var OneCStockConflictLineActionEnum;
6
+ (function (OneCStockConflictLineActionEnum) {
7
+ OneCStockConflictLineActionEnum["REDUCE"] = "REDUCE";
8
+ OneCStockConflictLineActionEnum["REMOVE"] = "REMOVE";
9
+ OneCStockConflictLineActionEnum["KEEP"] = "KEEP";
10
+ })(OneCStockConflictLineActionEnum || (exports.OneCStockConflictLineActionEnum = OneCStockConflictLineActionEnum = {}));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictLineRestrictionEnum = void 0;
4
+ // Почему строку в конфликте остатка нельзя менять из панели.
5
+ var OneCStockConflictLineRestrictionEnum;
6
+ (function (OneCStockConflictLineRestrictionEnum) {
7
+ // Корзина покупателя (WEBSHOP_NEW): сотрудник её не правит, корзина освобождается по таймеру.
8
+ OneCStockConflictLineRestrictionEnum["CART"] = "CART";
9
+ // Заказ входит в УПД.
10
+ OneCStockConflictLineRestrictionEnum["TRANSFER_DOCUMENT"] = "TRANSFER_DOCUMENT";
11
+ })(OneCStockConflictLineRestrictionEnum || (exports.OneCStockConflictLineRestrictionEnum = OneCStockConflictLineRestrictionEnum = {}));
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictStatusEnum = void 0;
4
+ // Конфликт «остаток 1С меньше резерва FC» по товару (FC-560).
5
+ var OneCStockConflictStatusEnum;
6
+ (function (OneCStockConflictStatusEnum) {
7
+ // Найден одной проверкой, ещё не подтверждён: в тревожный счётчик не входит.
8
+ OneCStockConflictStatusEnum["DETECTED"] = "DETECTED";
9
+ // Подтверждён второй проверкой на свежем снимке остатка — показываем и уведомляем.
10
+ OneCStockConflictStatusEnum["OPEN"] = "OPEN";
11
+ // Сотрудник оставил недостачу как есть; рост недостачи снова проходит подтверждение.
12
+ OneCStockConflictStatusEnum["ACKNOWLEDGED"] = "ACKNOWLEDGED";
13
+ // Недостачи больше нет.
14
+ OneCStockConflictStatusEnum["RESOLVED"] = "RESOLVED";
15
+ })(OneCStockConflictStatusEnum || (exports.OneCStockConflictStatusEnum = OneCStockConflictStatusEnum = {}));
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCStockConflictListRequestSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_status_enum_1 = require("../../../enum/one-c-stock-conflict-status.enum");
6
+ const pagination_request_schema_1 = require("../../pagination-request.schema");
7
+ // По умолчанию — тревожные (OPEN); ACKNOWLEDGED и остальные — отдельным фильтром.
8
+ exports.GetOneCStockConflictListRequestSchema = pagination_request_schema_1.PaginationRequestSchema.extend({
9
+ status: zod_1.z.nativeEnum(one_c_stock_conflict_status_enum_1.OneCStockConflictStatusEnum).optional().default(one_c_stock_conflict_status_enum_1.OneCStockConflictStatusEnum.OPEN),
10
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCStockConflictListResponseSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_list_schema_1 = require("./one-c-stock-conflict-list.schema");
6
+ exports.GetOneCStockConflictListResponseSchema = zod_1.z.object({
7
+ message: zod_1.z.string().optional(),
8
+ data: one_c_stock_conflict_list_schema_1.OneCStockConflictListSchema,
9
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetOneCStockConflictPreviewResponseSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_preview_schema_1 = require("./one-c-stock-conflict-preview.schema");
6
+ exports.GetOneCStockConflictPreviewResponseSchema = zod_1.z.object({
7
+ message: zod_1.z.string().optional(),
8
+ data: one_c_stock_conflict_preview_schema_1.OneCStockConflictPreviewSchema,
9
+ });
@@ -16,3 +16,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./get-one-c-status-response.schema"), exports);
18
18
  __exportStar(require("./one-c-status.schema"), exports);
19
+ __exportStar(require("./get-one-c-stock-conflict-list-request.schema"), exports);
20
+ __exportStar(require("./get-one-c-stock-conflict-list-response.schema"), exports);
21
+ __exportStar(require("./one-c-stock-conflict-list.schema"), exports);
22
+ __exportStar(require("./one-c-stock-conflict.schema"), exports);
23
+ __exportStar(require("./get-one-c-stock-conflict-preview-response.schema"), exports);
24
+ __exportStar(require("./one-c-stock-conflict-decision.schema"), exports);
25
+ __exportStar(require("./one-c-stock-conflict-line.schema"), exports);
26
+ __exportStar(require("./one-c-stock-conflict-preview.schema"), exports);
27
+ __exportStar(require("./one-c-stock-conflict-resolution.schema"), exports);
28
+ __exportStar(require("./resolve-one-c-stock-conflict-request.schema"), exports);
29
+ __exportStar(require("./resolve-one-c-stock-conflict-response.schema"), exports);
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictDecisionSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_line_action_enum_1 = require("../../../enum/one-c-stock-conflict-line-action.enum");
6
+ // Решение по строке: REDUCE — до quantity (меньше текущего, не меньше 1), REMOVE — удалить, KEEP — оставить.
7
+ exports.OneCStockConflictDecisionSchema = zod_1.z
8
+ .object({
9
+ orderProductUUID: zod_1.z.string(),
10
+ action: zod_1.z.nativeEnum(one_c_stock_conflict_line_action_enum_1.OneCStockConflictLineActionEnum),
11
+ quantity: zod_1.z.number().int().min(1).optional(),
12
+ })
13
+ .refine(decision => decision.action !== one_c_stock_conflict_line_action_enum_1.OneCStockConflictLineActionEnum.REDUCE || decision.quantity !== undefined, {
14
+ message: 'quantity is required for REDUCE',
15
+ path: ['quantity'],
16
+ });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictLineSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_line_restriction_enum_1 = require("../../../enum/one-c-stock-conflict-line-restriction.enum");
6
+ const order_status_enum_1 = require("../../../enum/order-status.enum");
7
+ // Строка заказа, держащая резерв товара конфликта. restriction != null — менять из панели нельзя.
8
+ exports.OneCStockConflictLineSchema = zod_1.z.object({
9
+ orderProductUUID: zod_1.z.string(),
10
+ orderUUID: zod_1.z.string(),
11
+ orderId: zod_1.z.number().int(),
12
+ orderStatus: zod_1.z.nativeEnum(order_status_enum_1.OrderStatusEnum),
13
+ orderCreatedAt: zod_1.z.string().datetime(),
14
+ clientUUID: zod_1.z.string(),
15
+ clientName: zod_1.z.string(),
16
+ quantity: zod_1.z.number().int(),
17
+ restriction: zod_1.z.nativeEnum(one_c_stock_conflict_line_restriction_enum_1.OneCStockConflictLineRestrictionEnum).nullable(),
18
+ });
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictListSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_schema_1 = require("./one-c-stock-conflict.schema");
6
+ exports.OneCStockConflictListSchema = zod_1.z.object({
7
+ items: zod_1.z.array(one_c_stock_conflict_schema_1.OneCStockConflictSchema),
8
+ total: zod_1.z.number().int(),
9
+ // Тревожный счётчик для глобального баннера панели — всегда по OPEN, независимо от фильтра.
10
+ openCount: zod_1.z.number().int(),
11
+ });
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictPreviewSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_line_schema_1 = require("./one-c-stock-conflict-line.schema");
6
+ const one_c_stock_conflict_schema_1 = require("./one-c-stock-conflict.schema");
7
+ // Предпросмотр решения: строки — сначала корзины, затем заказы от новых к старым. previewToken передаётся в применение:
8
+ // если снимок остатка или строки изменились, применение ответит «пересчитайте».
9
+ exports.OneCStockConflictPreviewSchema = zod_1.z.object({
10
+ conflict: one_c_stock_conflict_schema_1.OneCStockConflictSchema,
11
+ stockSnapshotFormedAt: zod_1.z.string().datetime().nullable(),
12
+ lines: zod_1.z.array(one_c_stock_conflict_line_schema_1.OneCStockConflictLineSchema),
13
+ previewToken: zod_1.z.string(),
14
+ });
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictResolutionSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_status_enum_1 = require("../../../enum/one-c-stock-conflict-status.enum");
6
+ // Итог решения: оставшаяся недостача принята (ACKNOWLEDGED) или её нет (RESOLVED). balance — доступный остаток
7
+ // после пересчёта; null — строки не менялись (только подтверждение недостачи), пересчёта не было.
8
+ exports.OneCStockConflictResolutionSchema = zod_1.z.object({
9
+ status: zod_1.z.nativeEnum(one_c_stock_conflict_status_enum_1.OneCStockConflictStatusEnum),
10
+ shortage: zod_1.z.string(),
11
+ balance: zod_1.z.number().int().nullable(),
12
+ changedLines: zod_1.z.number().int(),
13
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OneCStockConflictSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_status_enum_1 = require("../../../enum/one-c-stock-conflict-status.enum");
6
+ // Конфликт «остаток 1С меньше резерва FC» по товару. Количества — десятичные строки: остаток 1С бывает дробным.
7
+ exports.OneCStockConflictSchema = zod_1.z.object({
8
+ uuid: zod_1.z.string(),
9
+ status: zod_1.z.nativeEnum(one_c_stock_conflict_status_enum_1.OneCStockConflictStatusEnum),
10
+ productUUID: zod_1.z.string(),
11
+ productName: zod_1.z.string().nullable(),
12
+ article: zod_1.z.string().nullable(),
13
+ stock: zod_1.z.string(),
14
+ reserved: zod_1.z.number().int(),
15
+ shortage: zod_1.z.string(),
16
+ // Подтверждённая недостача OPEN: shortage выше неё — рост, ждущий подтверждения; null вне OPEN.
17
+ confirmedShortage: zod_1.z.string().nullable(),
18
+ acknowledgedShortage: zod_1.z.string().nullable(),
19
+ detectedAt: zod_1.z.string().datetime(),
20
+ confirmedAt: zod_1.z.string().datetime().nullable(),
21
+ acknowledgedAt: zod_1.z.string().datetime().nullable(),
22
+ resolvedAt: zod_1.z.string().datetime().nullable(),
23
+ updatedAt: zod_1.z.string().datetime(),
24
+ });
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveOneCStockConflictRequestSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_decision_schema_1 = require("./one-c-stock-conflict-decision.schema");
6
+ // Строки, которых нет в decisions, остаются как есть. Пустой список — «оставить всё»: принять текущую недостачу.
7
+ exports.ResolveOneCStockConflictRequestSchema = zod_1.z.object({
8
+ previewToken: zod_1.z.string().min(1),
9
+ decisions: zod_1.z.array(one_c_stock_conflict_decision_schema_1.OneCStockConflictDecisionSchema).max(500),
10
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveOneCStockConflictResponseSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const one_c_stock_conflict_resolution_schema_1 = require("./one-c-stock-conflict-resolution.schema");
6
+ exports.ResolveOneCStockConflictResponseSchema = zod_1.z.object({
7
+ message: zod_1.z.string().optional(),
8
+ data: one_c_stock_conflict_resolution_schema_1.OneCStockConflictResolutionSchema,
9
+ });
@@ -0,0 +1,11 @@
1
+ import type { z } from 'zod';
2
+ import { GetOneCStockConflictListRequestSchema } from '../../../schemas/integration/one-c/get-one-c-stock-conflict-list-request.schema';
3
+ import { GetOneCStockConflictListResponseSchema } from '../../../schemas/integration/one-c/get-one-c-stock-conflict-list-response.schema';
4
+
5
+ export namespace GetOneCStockConflictListContractQuery {
6
+ export const RequestSchema = GetOneCStockConflictListRequestSchema;
7
+ export type Request = z.infer<typeof RequestSchema>;
8
+
9
+ export const ResponseSchema = GetOneCStockConflictListResponseSchema;
10
+ export type Response = z.infer<typeof ResponseSchema>;
11
+ }
@@ -0,0 +1,7 @@
1
+ import type { z } from 'zod';
2
+ import { GetOneCStockConflictPreviewResponseSchema } from '../../../schemas/integration/one-c/get-one-c-stock-conflict-preview-response.schema';
3
+
4
+ export namespace GetOneCStockConflictPreviewContractQuery {
5
+ export const ResponseSchema = GetOneCStockConflictPreviewResponseSchema;
6
+ export type Response = z.infer<typeof ResponseSchema>;
7
+ }
@@ -2,3 +2,6 @@ export * from './connect-one-c.command';
2
2
  export * from './rotate-one-c-password.command';
3
3
  export * from './disconnect-one-c.command';
4
4
  export * from './get-one-c-status.query';
5
+ export * from './get-one-c-stock-conflict-list.query';
6
+ export * from './get-one-c-stock-conflict-preview.query';
7
+ export * from './resolve-one-c-stock-conflict.command';
@@ -0,0 +1,11 @@
1
+ import type { z } from 'zod';
2
+ import { ResolveOneCStockConflictRequestSchema } from '../../../schemas/integration/one-c/resolve-one-c-stock-conflict-request.schema';
3
+ import { ResolveOneCStockConflictResponseSchema } from '../../../schemas/integration/one-c/resolve-one-c-stock-conflict-response.schema';
4
+
5
+ export namespace ResolveOneCStockConflictContractCommand {
6
+ export const RequestSchema = ResolveOneCStockConflictRequestSchema;
7
+ export type Request = z.infer<typeof RequestSchema>;
8
+
9
+ export const ResponseSchema = ResolveOneCStockConflictResponseSchema;
10
+ export type Response = z.infer<typeof ResponseSchema>;
11
+ }
package/constant/error.ts CHANGED
@@ -1717,6 +1717,23 @@ export const ERRORS = {
1717
1717
  ONE_C_ORDERS_EXPORT_FAILED: { code: 'OC009', message: 'Failed to export orders to 1C', httpCode: 500 },
1718
1718
  ONE_C_ORDERS_IMPORT_FAILED: { code: 'OC010', message: 'Failed to apply orders from 1C', httpCode: 500 },
1719
1719
  ONE_C_ACTOR_NOT_FOUND: { code: 'OC011', message: 'No company admin to attribute 1C changes to', httpCode: 409 },
1720
+ ONE_C_STOCK_CONFLICT_CHECK_FAILED: { code: 'OC012', message: 'Failed to check 1C stock conflicts', httpCode: 500 },
1721
+ ONE_C_STOCK_CONFLICT_FETCH_FAILED: { code: 'OC013', message: 'Failed to read 1C stock conflicts', httpCode: 500 },
1722
+ ONE_C_STOCK_CONFLICT_NOTIFY_FAILED: { code: 'OC014', message: 'Failed to notify admins about 1C stock conflicts', httpCode: 500 },
1723
+ ONE_C_STOCK_CONFLICT_NOT_FOUND: { code: 'OC015', message: '1C stock conflict not found', httpCode: 404 },
1724
+ // Снимок остатка или строки резерва изменились после предпросмотра — сотрудник пересчитывает решение.
1725
+ ONE_C_STOCK_CONFLICT_STALE: { code: 'OC016', message: '1C stock conflict data changed, refresh the preview', httpCode: 409 },
1726
+ ONE_C_STOCK_CONFLICT_BUSY: { code: 'OC017', message: '1C stock conflicts are being checked, try again', httpCode: 409 },
1727
+ ONE_C_STOCK_CONFLICT_INVALID_DECISION: { code: 'OC018', message: 'Invalid decision for a 1C stock conflict line', httpCode: 400 },
1728
+ ONE_C_STOCK_CONFLICT_LINE_NOT_EDITABLE: { code: 'OC019', message: 'This order line cannot be changed from the panel', httpCode: 409 },
1729
+ ONE_C_STOCK_CONFLICT_PREVIEW_FAILED: { code: 'OC020', message: 'Failed to build 1C stock conflict preview', httpCode: 500 },
1730
+ ONE_C_STOCK_CONFLICT_RESOLVE_FAILED: { code: 'OC021', message: 'Failed to apply 1C stock conflict decision', httpCode: 500 },
1731
+ // Строки менялись, а доступный остаток пересчитать нельзя (товар вне поставки синхронизации 1С) — решение откатывается.
1732
+ ONE_C_STOCK_CONFLICT_BALANCE_NOT_RECOMPUTED: {
1733
+ code: 'OC022',
1734
+ message: 'Product stock cannot be recomputed: it is not in the 1C sync consignment',
1735
+ httpCode: 409,
1736
+ },
1720
1737
 
1721
1738
  // COMPANY INTEGRATION (общая запись интеграции компании)
1722
1739
  COMPANY_INTEGRATION_FETCH_FAILED: { code: 'CINT001', message: 'Failed to read company integration', httpCode: 500 },
package/enum/index.ts CHANGED
@@ -149,3 +149,6 @@ export * from './webshop-main-display-mode.enum';
149
149
  export * from './webshop-mode.enum';
150
150
  export * from './write-off-report-date-basis.enum';
151
151
  export * from './write-off-status.enum';
152
+ export * from './one-c-stock-conflict-status.enum';
153
+ export * from './one-c-stock-conflict-line-action.enum';
154
+ export * from './one-c-stock-conflict-line-restriction.enum';
@@ -10,4 +10,6 @@ export enum NotificationTypeEnum {
10
10
  ACCOUNT_DELETION_REQUEST_CREATED = 'ACCOUNT_DELETION_REQUEST_CREATED',
11
11
  ACCOUNT_DELETION_REQUEST_APPROVED = 'ACCOUNT_DELETION_REQUEST_APPROVED',
12
12
  ACCOUNT_DELETION_REQUEST_REJECTED = 'ACCOUNT_DELETION_REQUEST_REJECTED',
13
+ // Админам: подтверждён конфликт «остаток 1С меньше резерва FC» или его рост (FC-560).
14
+ ONE_C_STOCK_CONFLICT = 'ONE_C_STOCK_CONFLICT',
13
15
  }
@@ -0,0 +1,6 @@
1
+ // Решение сотрудника по строке заказа в конфликте «остаток 1С меньше резерва FC» (FC-560).
2
+ export enum OneCStockConflictLineActionEnum {
3
+ REDUCE = 'REDUCE',
4
+ REMOVE = 'REMOVE',
5
+ KEEP = 'KEEP',
6
+ }
@@ -0,0 +1,7 @@
1
+ // Почему строку в конфликте остатка нельзя менять из панели.
2
+ export enum OneCStockConflictLineRestrictionEnum {
3
+ // Корзина покупателя (WEBSHOP_NEW): сотрудник её не правит, корзина освобождается по таймеру.
4
+ CART = 'CART',
5
+ // Заказ входит в УПД.
6
+ TRANSFER_DOCUMENT = 'TRANSFER_DOCUMENT',
7
+ }
@@ -0,0 +1,11 @@
1
+ // Конфликт «остаток 1С меньше резерва FC» по товару (FC-560).
2
+ export enum OneCStockConflictStatusEnum {
3
+ // Найден одной проверкой, ещё не подтверждён: в тревожный счётчик не входит.
4
+ DETECTED = 'DETECTED',
5
+ // Подтверждён второй проверкой на свежем снимке остатка — показываем и уведомляем.
6
+ OPEN = 'OPEN',
7
+ // Сотрудник оставил недостачу как есть; рост недостачи снова проходит подтверждение.
8
+ ACKNOWLEDGED = 'ACKNOWLEDGED',
9
+ // Недостачи больше нет.
10
+ RESOLVED = 'RESOLVED',
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.170",
3
+ "version": "1.2.172",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictStatusEnum } from '../../../enum/one-c-stock-conflict-status.enum';
3
+ import { PaginationRequestSchema } from '../../pagination-request.schema';
4
+
5
+ // По умолчанию — тревожные (OPEN); ACKNOWLEDGED и остальные — отдельным фильтром.
6
+ export const GetOneCStockConflictListRequestSchema = PaginationRequestSchema.extend({
7
+ status: z.nativeEnum(OneCStockConflictStatusEnum).optional().default(OneCStockConflictStatusEnum.OPEN),
8
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictListSchema } from './one-c-stock-conflict-list.schema';
3
+
4
+ export const GetOneCStockConflictListResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: OneCStockConflictListSchema,
7
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictPreviewSchema } from './one-c-stock-conflict-preview.schema';
3
+
4
+ export const GetOneCStockConflictPreviewResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: OneCStockConflictPreviewSchema,
7
+ });
@@ -1,2 +1,13 @@
1
1
  export * from './get-one-c-status-response.schema';
2
2
  export * from './one-c-status.schema';
3
+ export * from './get-one-c-stock-conflict-list-request.schema';
4
+ export * from './get-one-c-stock-conflict-list-response.schema';
5
+ export * from './one-c-stock-conflict-list.schema';
6
+ export * from './one-c-stock-conflict.schema';
7
+ export * from './get-one-c-stock-conflict-preview-response.schema';
8
+ export * from './one-c-stock-conflict-decision.schema';
9
+ export * from './one-c-stock-conflict-line.schema';
10
+ export * from './one-c-stock-conflict-preview.schema';
11
+ export * from './one-c-stock-conflict-resolution.schema';
12
+ export * from './resolve-one-c-stock-conflict-request.schema';
13
+ export * from './resolve-one-c-stock-conflict-response.schema';
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictLineActionEnum } from '../../../enum/one-c-stock-conflict-line-action.enum';
3
+
4
+ // Решение по строке: REDUCE — до quantity (меньше текущего, не меньше 1), REMOVE — удалить, KEEP — оставить.
5
+ export const OneCStockConflictDecisionSchema = z
6
+ .object({
7
+ orderProductUUID: z.string(),
8
+ action: z.nativeEnum(OneCStockConflictLineActionEnum),
9
+ quantity: z.number().int().min(1).optional(),
10
+ })
11
+ .refine(decision => decision.action !== OneCStockConflictLineActionEnum.REDUCE || decision.quantity !== undefined, {
12
+ message: 'quantity is required for REDUCE',
13
+ path: ['quantity'],
14
+ });
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictLineRestrictionEnum } from '../../../enum/one-c-stock-conflict-line-restriction.enum';
3
+ import { OrderStatusEnum } from '../../../enum/order-status.enum';
4
+
5
+ // Строка заказа, держащая резерв товара конфликта. restriction != null — менять из панели нельзя.
6
+ export const OneCStockConflictLineSchema = z.object({
7
+ orderProductUUID: z.string(),
8
+ orderUUID: z.string(),
9
+ orderId: z.number().int(),
10
+ orderStatus: z.nativeEnum(OrderStatusEnum),
11
+ orderCreatedAt: z.string().datetime(),
12
+ clientUUID: z.string(),
13
+ clientName: z.string(),
14
+ quantity: z.number().int(),
15
+ restriction: z.nativeEnum(OneCStockConflictLineRestrictionEnum).nullable(),
16
+ });
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictSchema } from './one-c-stock-conflict.schema';
3
+
4
+ export const OneCStockConflictListSchema = z.object({
5
+ items: z.array(OneCStockConflictSchema),
6
+ total: z.number().int(),
7
+ // Тревожный счётчик для глобального баннера панели — всегда по OPEN, независимо от фильтра.
8
+ openCount: z.number().int(),
9
+ });
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictLineSchema } from './one-c-stock-conflict-line.schema';
3
+ import { OneCStockConflictSchema } from './one-c-stock-conflict.schema';
4
+
5
+ // Предпросмотр решения: строки — сначала корзины, затем заказы от новых к старым. previewToken передаётся в применение:
6
+ // если снимок остатка или строки изменились, применение ответит «пересчитайте».
7
+ export const OneCStockConflictPreviewSchema = z.object({
8
+ conflict: OneCStockConflictSchema,
9
+ stockSnapshotFormedAt: z.string().datetime().nullable(),
10
+ lines: z.array(OneCStockConflictLineSchema),
11
+ previewToken: z.string(),
12
+ });
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictStatusEnum } from '../../../enum/one-c-stock-conflict-status.enum';
3
+
4
+ // Итог решения: оставшаяся недостача принята (ACKNOWLEDGED) или её нет (RESOLVED). balance — доступный остаток
5
+ // после пересчёта; null — строки не менялись (только подтверждение недостачи), пересчёта не было.
6
+ export const OneCStockConflictResolutionSchema = z.object({
7
+ status: z.nativeEnum(OneCStockConflictStatusEnum),
8
+ shortage: z.string(),
9
+ balance: z.number().int().nullable(),
10
+ changedLines: z.number().int(),
11
+ });
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictStatusEnum } from '../../../enum/one-c-stock-conflict-status.enum';
3
+
4
+ // Конфликт «остаток 1С меньше резерва FC» по товару. Количества — десятичные строки: остаток 1С бывает дробным.
5
+ export const OneCStockConflictSchema = z.object({
6
+ uuid: z.string(),
7
+ status: z.nativeEnum(OneCStockConflictStatusEnum),
8
+ productUUID: z.string(),
9
+ productName: z.string().nullable(),
10
+ article: z.string().nullable(),
11
+ stock: z.string(),
12
+ reserved: z.number().int(),
13
+ shortage: z.string(),
14
+ // Подтверждённая недостача OPEN: shortage выше неё — рост, ждущий подтверждения; null вне OPEN.
15
+ confirmedShortage: z.string().nullable(),
16
+ acknowledgedShortage: z.string().nullable(),
17
+ detectedAt: z.string().datetime(),
18
+ confirmedAt: z.string().datetime().nullable(),
19
+ acknowledgedAt: z.string().datetime().nullable(),
20
+ resolvedAt: z.string().datetime().nullable(),
21
+ updatedAt: z.string().datetime(),
22
+ });
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictDecisionSchema } from './one-c-stock-conflict-decision.schema';
3
+
4
+ // Строки, которых нет в decisions, остаются как есть. Пустой список — «оставить всё»: принять текущую недостачу.
5
+ export const ResolveOneCStockConflictRequestSchema = z.object({
6
+ previewToken: z.string().min(1),
7
+ decisions: z.array(OneCStockConflictDecisionSchema).max(500),
8
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { OneCStockConflictResolutionSchema } from './one-c-stock-conflict-resolution.schema';
3
+
4
+ export const ResolveOneCStockConflictResponseSchema = z.object({
5
+ message: z.string().optional(),
6
+ data: OneCStockConflictResolutionSchema,
7
+ });