@floristcloud/api-lib 1.2.181 → 1.2.182
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.
- package/build/commands/order/group/order-vat-transition-analyze.command.js +10 -0
- package/build/commands/order/group/order-vat-transition-execute.command.js +10 -0
- package/build/commands/order/index.js +2 -0
- package/build/constant/error.js +13 -3
- package/build/enum/order-updated-field.enum.js +2 -0
- package/build/schemas/order/index.js +9 -0
- package/build/schemas/order/order-vat-transition-analyze-item.schema.js +25 -0
- package/build/schemas/order/order-vat-transition-analyze-response.schema.js +9 -0
- package/build/schemas/order/order-vat-transition-analyze-result.schema.js +13 -0
- package/build/schemas/order/order-vat-transition-analyze-summary.schema.js +15 -0
- package/build/schemas/order/order-vat-transition-execute-failure.schema.js +10 -0
- package/build/schemas/order/order-vat-transition-execute-request.schema.js +12 -0
- package/build/schemas/order/order-vat-transition-execute-response.schema.js +9 -0
- package/build/schemas/order/order-vat-transition-execute-result.schema.js +16 -0
- package/build/schemas/order/order-vat-transition-request.schema.js +14 -0
- package/commands/order/group/order-vat-transition-analyze.command.ts +11 -0
- package/commands/order/group/order-vat-transition-execute.command.ts +11 -0
- package/commands/order/index.ts +2 -0
- package/constant/error.ts +13 -3
- package/enum/order-updated-field.enum.ts +2 -0
- package/package.json +1 -1
- package/schemas/order/index.ts +10 -0
- package/schemas/order/order-vat-transition-analyze-item.schema.ts +23 -0
- package/schemas/order/order-vat-transition-analyze-response.schema.ts +7 -0
- package/schemas/order/order-vat-transition-analyze-result.schema.ts +11 -0
- package/schemas/order/order-vat-transition-analyze-summary.schema.ts +13 -0
- package/schemas/order/order-vat-transition-execute-failure.schema.ts +8 -0
- package/schemas/order/order-vat-transition-execute-request.schema.ts +10 -0
- package/schemas/order/order-vat-transition-execute-response.schema.ts +7 -0
- package/schemas/order/order-vat-transition-execute-result.schema.ts +14 -0
- package/schemas/order/order-vat-transition-request.schema.ts +12 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionAnalyzeContractCommand = void 0;
|
|
4
|
+
const order_vat_transition_request_schema_1 = require("../../../schemas/order/order-vat-transition-request.schema");
|
|
5
|
+
const order_vat_transition_analyze_response_schema_1 = require("../../../schemas/order/order-vat-transition-analyze-response.schema");
|
|
6
|
+
var OrderVatTransitionAnalyzeContractCommand;
|
|
7
|
+
(function (OrderVatTransitionAnalyzeContractCommand) {
|
|
8
|
+
OrderVatTransitionAnalyzeContractCommand.RequestSchema = order_vat_transition_request_schema_1.OrderVatTransitionRequestSchema;
|
|
9
|
+
OrderVatTransitionAnalyzeContractCommand.ResponseSchema = order_vat_transition_analyze_response_schema_1.OrderVatTransitionAnalyzeResponseSchema;
|
|
10
|
+
})(OrderVatTransitionAnalyzeContractCommand || (exports.OrderVatTransitionAnalyzeContractCommand = OrderVatTransitionAnalyzeContractCommand = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionExecuteContractCommand = void 0;
|
|
4
|
+
const order_vat_transition_execute_request_schema_1 = require("../../../schemas/order/order-vat-transition-execute-request.schema");
|
|
5
|
+
const order_vat_transition_execute_response_schema_1 = require("../../../schemas/order/order-vat-transition-execute-response.schema");
|
|
6
|
+
var OrderVatTransitionExecuteContractCommand;
|
|
7
|
+
(function (OrderVatTransitionExecuteContractCommand) {
|
|
8
|
+
OrderVatTransitionExecuteContractCommand.RequestSchema = order_vat_transition_execute_request_schema_1.OrderVatTransitionExecuteRequestSchema;
|
|
9
|
+
OrderVatTransitionExecuteContractCommand.ResponseSchema = order_vat_transition_execute_response_schema_1.OrderVatTransitionExecuteResponseSchema;
|
|
10
|
+
})(OrderVatTransitionExecuteContractCommand || (exports.OrderVatTransitionExecuteContractCommand = OrderVatTransitionExecuteContractCommand = {}));
|
|
@@ -35,6 +35,8 @@ __exportStar(require("./group/merge-orders.command"), exports);
|
|
|
35
35
|
__exportStar(require("./group/get-group-order-invoice-info.query"), exports);
|
|
36
36
|
__exportStar(require("./group/send-group-order-invoice.command"), exports);
|
|
37
37
|
__exportStar(require("./group/pin-group-order-planned-shipment-date.command"), exports);
|
|
38
|
+
__exportStar(require("./group/order-vat-transition-analyze.command"), exports);
|
|
39
|
+
__exportStar(require("./group/order-vat-transition-execute.command"), exports);
|
|
38
40
|
//webshop
|
|
39
41
|
__exportStar(require("./webshop/get-order-for-client.query"), exports);
|
|
40
42
|
__exportStar(require("./webshop/create-cart.command"), exports);
|
package/build/constant/error.js
CHANGED
|
@@ -557,6 +557,13 @@ exports.ERRORS = {
|
|
|
557
557
|
ORDER_PLANNED_SHIPMENT_DATE_NOT_UPDATED: { code: 'O062', message: 'Failed to update order planned shipment date', httpCode: 500 },
|
|
558
558
|
// Источник объединения удаляется, и его связь с документом ERP пропала бы молча.
|
|
559
559
|
ORDER_MERGE_SOURCE_HAS_EXTERNAL_NUMBER: { code: 'O064', message: 'Source order has an external number', httpCode: 400 },
|
|
560
|
+
// FC-569: заказ отгружен до даты перехода на НДС — пересчёт его не трогает.
|
|
561
|
+
ORDER_VAT_TRANSITION_NOT_ELIGIBLE: {
|
|
562
|
+
code: 'O065',
|
|
563
|
+
message: 'The order was shipped before the VAT transition date',
|
|
564
|
+
httpCode: 409,
|
|
565
|
+
},
|
|
566
|
+
ORDER_VAT_TRANSITION_FAILED: { code: 'O066', message: 'Failed to recalculate order VAT', httpCode: 500 },
|
|
560
567
|
ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
|
|
561
568
|
code: 'O033',
|
|
562
569
|
message: 'Order status is balance affecting, merge not allowed',
|
|
@@ -1892,9 +1899,12 @@ exports.ERRORS = {
|
|
|
1892
1899
|
},
|
|
1893
1900
|
TRANSFER_DOCUMENT_AMOUNT_INVALID: { code: 'TDOC009', message: 'Transfer document amount must be greater than zero', httpCode: 400 },
|
|
1894
1901
|
TRANSFER_DOCUMENT_EXPORT_FAILED: { code: 'TDOC010', message: 'Failed to build transfer document file', httpCode: 500 },
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1902
|
+
// FC-569: статус документа выводится из заказов — с НДС счёт-фактура (статус 1), без НДС акт (статус 2),
|
|
1903
|
+
// и заказы обоих видов в один документ не сходятся. TDOC011 («плательщики НДС не поддерживаются»)
|
|
1904
|
+
// больше не выдаётся: статус 1 выпускается.
|
|
1905
|
+
TRANSFER_DOCUMENT_VAT_MIXED: {
|
|
1906
|
+
code: 'TDOC015',
|
|
1907
|
+
message: 'Orders with and without VAT cannot be issued in one transfer document',
|
|
1898
1908
|
httpCode: 409,
|
|
1899
1909
|
},
|
|
1900
1910
|
// Реквизиты сторон проверяем до выпуска: движок считает пустое значение штатным и напечатал бы
|
|
@@ -22,4 +22,6 @@ var OrderUpdatedFieldEnum;
|
|
|
22
22
|
OrderUpdatedFieldEnum["PAYMENT_DUE_AT"] = "PAYMENT_DUE_AT";
|
|
23
23
|
OrderUpdatedFieldEnum["PLANNED_SHIPMENT_DATE"] = "PLANNED_SHIPMENT_DATE";
|
|
24
24
|
OrderUpdatedFieldEnum["EXTERNAL_NUMBER"] = "EXTERNAL_NUMBER";
|
|
25
|
+
// Пересчёт НДС заказа при переходе компании на НДС (FC-569): итог налога до и после.
|
|
26
|
+
OrderUpdatedFieldEnum["VAT_AMOUNT"] = "VAT_AMOUNT";
|
|
25
27
|
})(OrderUpdatedFieldEnum || (exports.OrderUpdatedFieldEnum = OrderUpdatedFieldEnum = {}));
|
|
@@ -31,3 +31,12 @@ __exportStar(require("./update-cart-response.schema"), exports);
|
|
|
31
31
|
__exportStar(require("./delivery-pricing.schema"), exports);
|
|
32
32
|
__exportStar(require("./get-order-delivery-pricing-request.schema"), exports);
|
|
33
33
|
__exportStar(require("./get-order-delivery-pricing-response.schema"), exports);
|
|
34
|
+
__exportStar(require("./order-vat-transition-request.schema"), exports);
|
|
35
|
+
__exportStar(require("./order-vat-transition-execute-request.schema"), exports);
|
|
36
|
+
__exportStar(require("./order-vat-transition-analyze-item.schema"), exports);
|
|
37
|
+
__exportStar(require("./order-vat-transition-analyze-summary.schema"), exports);
|
|
38
|
+
__exportStar(require("./order-vat-transition-analyze-result.schema"), exports);
|
|
39
|
+
__exportStar(require("./order-vat-transition-analyze-response.schema"), exports);
|
|
40
|
+
__exportStar(require("./order-vat-transition-execute-failure.schema"), exports);
|
|
41
|
+
__exportStar(require("./order-vat-transition-execute-result.schema"), exports);
|
|
42
|
+
__exportStar(require("./order-vat-transition-execute-response.schema"), exports);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionAnalyzeItemSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const enum_1 = require("../../enum");
|
|
6
|
+
const error_message_schema_1 = require("../error-message.schema");
|
|
7
|
+
const money_schema_1 = require("../money.schema");
|
|
8
|
+
exports.OrderVatTransitionAnalyzeItemSchema = zod_1.z.object({
|
|
9
|
+
orderUUID: zod_1.z.string(),
|
|
10
|
+
orderNumber: zod_1.z.number(),
|
|
11
|
+
status: zod_1.z.nativeEnum(enum_1.OrderStatusEnum),
|
|
12
|
+
type: zod_1.z.nativeEnum(enum_1.OrderTypeEnum),
|
|
13
|
+
// null — заказ ещё не отгружен.
|
|
14
|
+
completedAt: zod_1.z.coerce.date().nullable(),
|
|
15
|
+
totalCost: money_schema_1.MoneySchema,
|
|
16
|
+
currentVatAmount: money_schema_1.MoneySchema,
|
|
17
|
+
newVatAmount: money_schema_1.MoneySchema,
|
|
18
|
+
// Строки товаров и услуг, у которых меняется ставка или сумма налога; доставка не входит.
|
|
19
|
+
changedLineCount: zod_1.z.number().int(),
|
|
20
|
+
isDeliveryChanged: zod_1.z.boolean(),
|
|
21
|
+
// Снимок счёта на оплату пересчёт не трогает — счёт нужно выставить заново.
|
|
22
|
+
isInPaymentInvoice: zod_1.z.boolean(),
|
|
23
|
+
isSkipped: zod_1.z.boolean(),
|
|
24
|
+
skipReason: error_message_schema_1.ErrorMessageSchema.optional(),
|
|
25
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionAnalyzeResponseSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const order_vat_transition_analyze_result_schema_1 = require("./order-vat-transition-analyze-result.schema");
|
|
6
|
+
exports.OrderVatTransitionAnalyzeResponseSchema = zod_1.z.object({
|
|
7
|
+
message: zod_1.z.string().optional(),
|
|
8
|
+
data: order_vat_transition_analyze_result_schema_1.OrderVatTransitionAnalyzeResultSchema,
|
|
9
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionAnalyzeResultSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const order_vat_transition_analyze_item_schema_1 = require("./order-vat-transition-analyze-item.schema");
|
|
6
|
+
const order_vat_transition_analyze_summary_schema_1 = require("./order-vat-transition-analyze-summary.schema");
|
|
7
|
+
exports.OrderVatTransitionAnalyzeResultSchema = zod_1.z.object({
|
|
8
|
+
// Граница в UTC: полночь `fromDate` в поясе компании. Заказы с completedAt раньше неё не трогаются.
|
|
9
|
+
fromUtc: zod_1.z.coerce.date(),
|
|
10
|
+
summary: order_vat_transition_analyze_summary_schema_1.OrderVatTransitionAnalyzeSummarySchema,
|
|
11
|
+
// Только заказы, которые пересчёт меняет или пропускает; уже пересчитанные не выводятся.
|
|
12
|
+
items: zod_1.z.array(order_vat_transition_analyze_item_schema_1.OrderVatTransitionAnalyzeItemSchema),
|
|
13
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionAnalyzeSummarySchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const money_schema_1 = require("../money.schema");
|
|
6
|
+
exports.OrderVatTransitionAnalyzeSummarySchema = zod_1.z.object({
|
|
7
|
+
orderCount: zod_1.z.number().int(),
|
|
8
|
+
changedOrderCount: zod_1.z.number().int(),
|
|
9
|
+
skippedOrderCount: zod_1.z.number().int(),
|
|
10
|
+
paymentInvoiceOrderCount: zod_1.z.number().int(),
|
|
11
|
+
vatAmountDelta: money_schema_1.MoneySchema,
|
|
12
|
+
// Товары с нулевой ставкой: применение сбросит её в пусто — «по ставке компании», иначе остатки
|
|
13
|
+
// продавались бы без налога и после перехода.
|
|
14
|
+
zeroVatProductCount: zod_1.z.number().int(),
|
|
15
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionExecuteFailureSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const error_message_schema_1 = require("../error-message.schema");
|
|
6
|
+
exports.OrderVatTransitionExecuteFailureSchema = zod_1.z.object({
|
|
7
|
+
orderUUID: zod_1.z.string(),
|
|
8
|
+
orderNumber: zod_1.z.number(),
|
|
9
|
+
error: error_message_schema_1.ErrorMessageSchema,
|
|
10
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionExecuteRequestSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const order_vat_transition_request_schema_1 = require("./order-vat-transition-request.schema");
|
|
6
|
+
/**
|
|
7
|
+
* Набор заказов сервер собирает тем же правилом, что и предпросмотр, поэтому размер запроса не
|
|
8
|
+
* зависит от числа заказов. Снять заказ из пересчёта — `excludeOrderUUIDList`.
|
|
9
|
+
*/
|
|
10
|
+
exports.OrderVatTransitionExecuteRequestSchema = order_vat_transition_request_schema_1.OrderVatTransitionRequestSchema.extend({
|
|
11
|
+
excludeOrderUUIDList: zod_1.z.array(zod_1.z.uuid()).optional(),
|
|
12
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionExecuteResponseSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const order_vat_transition_execute_result_schema_1 = require("./order-vat-transition-execute-result.schema");
|
|
6
|
+
exports.OrderVatTransitionExecuteResponseSchema = zod_1.z.object({
|
|
7
|
+
message: zod_1.z.string().optional(),
|
|
8
|
+
data: order_vat_transition_execute_result_schema_1.OrderVatTransitionExecuteResultSchema,
|
|
9
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionExecuteResultSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const order_vat_transition_execute_failure_schema_1 = require("./order-vat-transition-execute-failure.schema");
|
|
6
|
+
/**
|
|
7
|
+
* Пересчёт идемпотентен: повторный запуск не трогает уже пересчитанные заказы (`unchangedCount`)
|
|
8
|
+
* и догоняет оставшиеся — например, после обрыва соединения на большом наборе.
|
|
9
|
+
*/
|
|
10
|
+
exports.OrderVatTransitionExecuteResultSchema = zod_1.z.object({
|
|
11
|
+
changedCount: zod_1.z.number().int(),
|
|
12
|
+
unchangedCount: zod_1.z.number().int(),
|
|
13
|
+
failedCount: zod_1.z.number().int(),
|
|
14
|
+
failures: zod_1.z.array(order_vat_transition_execute_failure_schema_1.OrderVatTransitionExecuteFailureSchema),
|
|
15
|
+
resetProductCount: zod_1.z.number().int(),
|
|
16
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderVatTransitionRequestSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const calendar_day_schema_1 = require("../calendar-day.schema");
|
|
6
|
+
/**
|
|
7
|
+
* Перевод компании на НДС с даты: заказы, отгруженные с `fromDate` (полночь в поясе компании)
|
|
8
|
+
* или ещё не отгруженные, пересчитываются по ставке `vat`. Цены и суммы не меняются — налог
|
|
9
|
+
* выделяется из суммы, поэтому балансы клиентов не затрагиваются.
|
|
10
|
+
*/
|
|
11
|
+
exports.OrderVatTransitionRequestSchema = zod_1.z.object({
|
|
12
|
+
fromDate: calendar_day_schema_1.CalendarDaySchema,
|
|
13
|
+
vat: zod_1.z.number().int().min(1).max(100),
|
|
14
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionRequestSchema } from '../../../schemas/order/order-vat-transition-request.schema';
|
|
3
|
+
import { OrderVatTransitionAnalyzeResponseSchema } from '../../../schemas/order/order-vat-transition-analyze-response.schema';
|
|
4
|
+
|
|
5
|
+
export namespace OrderVatTransitionAnalyzeContractCommand {
|
|
6
|
+
export const RequestSchema = OrderVatTransitionRequestSchema;
|
|
7
|
+
export type Request = z.infer<typeof RequestSchema>;
|
|
8
|
+
|
|
9
|
+
export const ResponseSchema = OrderVatTransitionAnalyzeResponseSchema;
|
|
10
|
+
export type Response = z.infer<typeof ResponseSchema>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionExecuteRequestSchema } from '../../../schemas/order/order-vat-transition-execute-request.schema';
|
|
3
|
+
import { OrderVatTransitionExecuteResponseSchema } from '../../../schemas/order/order-vat-transition-execute-response.schema';
|
|
4
|
+
|
|
5
|
+
export namespace OrderVatTransitionExecuteContractCommand {
|
|
6
|
+
export const RequestSchema = OrderVatTransitionExecuteRequestSchema;
|
|
7
|
+
export type Request = z.infer<typeof RequestSchema>;
|
|
8
|
+
|
|
9
|
+
export const ResponseSchema = OrderVatTransitionExecuteResponseSchema;
|
|
10
|
+
export type Response = z.infer<typeof ResponseSchema>;
|
|
11
|
+
}
|
package/commands/order/index.ts
CHANGED
|
@@ -19,6 +19,8 @@ export * from './group/merge-orders.command';
|
|
|
19
19
|
export * from './group/get-group-order-invoice-info.query';
|
|
20
20
|
export * from './group/send-group-order-invoice.command';
|
|
21
21
|
export * from './group/pin-group-order-planned-shipment-date.command';
|
|
22
|
+
export * from './group/order-vat-transition-analyze.command';
|
|
23
|
+
export * from './group/order-vat-transition-execute.command';
|
|
22
24
|
//webshop
|
|
23
25
|
export * from './webshop/get-order-for-client.query';
|
|
24
26
|
export * from './webshop/create-cart.command';
|
package/constant/error.ts
CHANGED
|
@@ -572,6 +572,13 @@ export const ERRORS = {
|
|
|
572
572
|
ORDER_PLANNED_SHIPMENT_DATE_NOT_UPDATED: { code: 'O062', message: 'Failed to update order planned shipment date', httpCode: 500 },
|
|
573
573
|
// Источник объединения удаляется, и его связь с документом ERP пропала бы молча.
|
|
574
574
|
ORDER_MERGE_SOURCE_HAS_EXTERNAL_NUMBER: { code: 'O064', message: 'Source order has an external number', httpCode: 400 },
|
|
575
|
+
// FC-569: заказ отгружен до даты перехода на НДС — пересчёт его не трогает.
|
|
576
|
+
ORDER_VAT_TRANSITION_NOT_ELIGIBLE: {
|
|
577
|
+
code: 'O065',
|
|
578
|
+
message: 'The order was shipped before the VAT transition date',
|
|
579
|
+
httpCode: 409,
|
|
580
|
+
},
|
|
581
|
+
ORDER_VAT_TRANSITION_FAILED: { code: 'O066', message: 'Failed to recalculate order VAT', httpCode: 500 },
|
|
575
582
|
ORDER_MERGE_BALANCE_STATUS_NOT_ALLOWED: {
|
|
576
583
|
code: 'O033',
|
|
577
584
|
message: 'Order status is balance affecting, merge not allowed',
|
|
@@ -1964,9 +1971,12 @@ export const ERRORS = {
|
|
|
1964
1971
|
},
|
|
1965
1972
|
TRANSFER_DOCUMENT_AMOUNT_INVALID: { code: 'TDOC009', message: 'Transfer document amount must be greater than zero', httpCode: 400 },
|
|
1966
1973
|
TRANSFER_DOCUMENT_EXPORT_FAILED: { code: 'TDOC010', message: 'Failed to build transfer document file', httpCode: 500 },
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1974
|
+
// FC-569: статус документа выводится из заказов — с НДС счёт-фактура (статус 1), без НДС акт (статус 2),
|
|
1975
|
+
// и заказы обоих видов в один документ не сходятся. TDOC011 («плательщики НДС не поддерживаются»)
|
|
1976
|
+
// больше не выдаётся: статус 1 выпускается.
|
|
1977
|
+
TRANSFER_DOCUMENT_VAT_MIXED: {
|
|
1978
|
+
code: 'TDOC015',
|
|
1979
|
+
message: 'Orders with and without VAT cannot be issued in one transfer document',
|
|
1970
1980
|
httpCode: 409,
|
|
1971
1981
|
},
|
|
1972
1982
|
// Реквизиты сторон проверяем до выпуска: движок считает пустое значение штатным и напечатал бы
|
|
@@ -18,4 +18,6 @@ export enum OrderUpdatedFieldEnum {
|
|
|
18
18
|
PAYMENT_DUE_AT = 'PAYMENT_DUE_AT',
|
|
19
19
|
PLANNED_SHIPMENT_DATE = 'PLANNED_SHIPMENT_DATE',
|
|
20
20
|
EXTERNAL_NUMBER = 'EXTERNAL_NUMBER',
|
|
21
|
+
// Пересчёт НДС заказа при переходе компании на НДС (FC-569): итог налога до и после.
|
|
22
|
+
VAT_AMOUNT = 'VAT_AMOUNT',
|
|
21
23
|
}
|
package/package.json
CHANGED
package/schemas/order/index.ts
CHANGED
|
@@ -16,3 +16,13 @@ export * from './update-cart-response.schema';
|
|
|
16
16
|
export * from './delivery-pricing.schema';
|
|
17
17
|
export * from './get-order-delivery-pricing-request.schema';
|
|
18
18
|
export * from './get-order-delivery-pricing-response.schema';
|
|
19
|
+
|
|
20
|
+
export * from './order-vat-transition-request.schema';
|
|
21
|
+
export * from './order-vat-transition-execute-request.schema';
|
|
22
|
+
export * from './order-vat-transition-analyze-item.schema';
|
|
23
|
+
export * from './order-vat-transition-analyze-summary.schema';
|
|
24
|
+
export * from './order-vat-transition-analyze-result.schema';
|
|
25
|
+
export * from './order-vat-transition-analyze-response.schema';
|
|
26
|
+
export * from './order-vat-transition-execute-failure.schema';
|
|
27
|
+
export * from './order-vat-transition-execute-result.schema';
|
|
28
|
+
export * from './order-vat-transition-execute-response.schema';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderStatusEnum, OrderTypeEnum } from '../../enum';
|
|
3
|
+
import { ErrorMessageSchema } from '../error-message.schema';
|
|
4
|
+
import { MoneySchema } from '../money.schema';
|
|
5
|
+
|
|
6
|
+
export const OrderVatTransitionAnalyzeItemSchema = z.object({
|
|
7
|
+
orderUUID: z.string(),
|
|
8
|
+
orderNumber: z.number(),
|
|
9
|
+
status: z.nativeEnum(OrderStatusEnum),
|
|
10
|
+
type: z.nativeEnum(OrderTypeEnum),
|
|
11
|
+
// null — заказ ещё не отгружен.
|
|
12
|
+
completedAt: z.coerce.date().nullable(),
|
|
13
|
+
totalCost: MoneySchema,
|
|
14
|
+
currentVatAmount: MoneySchema,
|
|
15
|
+
newVatAmount: MoneySchema,
|
|
16
|
+
// Строки товаров и услуг, у которых меняется ставка или сумма налога; доставка не входит.
|
|
17
|
+
changedLineCount: z.number().int(),
|
|
18
|
+
isDeliveryChanged: z.boolean(),
|
|
19
|
+
// Снимок счёта на оплату пересчёт не трогает — счёт нужно выставить заново.
|
|
20
|
+
isInPaymentInvoice: z.boolean(),
|
|
21
|
+
isSkipped: z.boolean(),
|
|
22
|
+
skipReason: ErrorMessageSchema.optional(),
|
|
23
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionAnalyzeResultSchema } from './order-vat-transition-analyze-result.schema';
|
|
3
|
+
|
|
4
|
+
export const OrderVatTransitionAnalyzeResponseSchema = z.object({
|
|
5
|
+
message: z.string().optional(),
|
|
6
|
+
data: OrderVatTransitionAnalyzeResultSchema,
|
|
7
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionAnalyzeItemSchema } from './order-vat-transition-analyze-item.schema';
|
|
3
|
+
import { OrderVatTransitionAnalyzeSummarySchema } from './order-vat-transition-analyze-summary.schema';
|
|
4
|
+
|
|
5
|
+
export const OrderVatTransitionAnalyzeResultSchema = z.object({
|
|
6
|
+
// Граница в UTC: полночь `fromDate` в поясе компании. Заказы с completedAt раньше неё не трогаются.
|
|
7
|
+
fromUtc: z.coerce.date(),
|
|
8
|
+
summary: OrderVatTransitionAnalyzeSummarySchema,
|
|
9
|
+
// Только заказы, которые пересчёт меняет или пропускает; уже пересчитанные не выводятся.
|
|
10
|
+
items: z.array(OrderVatTransitionAnalyzeItemSchema),
|
|
11
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MoneySchema } from '../money.schema';
|
|
3
|
+
|
|
4
|
+
export const OrderVatTransitionAnalyzeSummarySchema = z.object({
|
|
5
|
+
orderCount: z.number().int(),
|
|
6
|
+
changedOrderCount: z.number().int(),
|
|
7
|
+
skippedOrderCount: z.number().int(),
|
|
8
|
+
paymentInvoiceOrderCount: z.number().int(),
|
|
9
|
+
vatAmountDelta: MoneySchema,
|
|
10
|
+
// Товары с нулевой ставкой: применение сбросит её в пусто — «по ставке компании», иначе остатки
|
|
11
|
+
// продавались бы без налога и после перехода.
|
|
12
|
+
zeroVatProductCount: z.number().int(),
|
|
13
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionRequestSchema } from './order-vat-transition-request.schema';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Набор заказов сервер собирает тем же правилом, что и предпросмотр, поэтому размер запроса не
|
|
6
|
+
* зависит от числа заказов. Снять заказ из пересчёта — `excludeOrderUUIDList`.
|
|
7
|
+
*/
|
|
8
|
+
export const OrderVatTransitionExecuteRequestSchema = OrderVatTransitionRequestSchema.extend({
|
|
9
|
+
excludeOrderUUIDList: z.array(z.uuid()).optional(),
|
|
10
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionExecuteResultSchema } from './order-vat-transition-execute-result.schema';
|
|
3
|
+
|
|
4
|
+
export const OrderVatTransitionExecuteResponseSchema = z.object({
|
|
5
|
+
message: z.string().optional(),
|
|
6
|
+
data: OrderVatTransitionExecuteResultSchema,
|
|
7
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrderVatTransitionExecuteFailureSchema } from './order-vat-transition-execute-failure.schema';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Пересчёт идемпотентен: повторный запуск не трогает уже пересчитанные заказы (`unchangedCount`)
|
|
6
|
+
* и догоняет оставшиеся — например, после обрыва соединения на большом наборе.
|
|
7
|
+
*/
|
|
8
|
+
export const OrderVatTransitionExecuteResultSchema = z.object({
|
|
9
|
+
changedCount: z.number().int(),
|
|
10
|
+
unchangedCount: z.number().int(),
|
|
11
|
+
failedCount: z.number().int(),
|
|
12
|
+
failures: z.array(OrderVatTransitionExecuteFailureSchema),
|
|
13
|
+
resetProductCount: z.number().int(),
|
|
14
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CalendarDaySchema } from '../calendar-day.schema';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Перевод компании на НДС с даты: заказы, отгруженные с `fromDate` (полночь в поясе компании)
|
|
6
|
+
* или ещё не отгруженные, пересчитываются по ставке `vat`. Цены и суммы не меняются — налог
|
|
7
|
+
* выделяется из суммы, поэтому балансы клиентов не затрагиваются.
|
|
8
|
+
*/
|
|
9
|
+
export const OrderVatTransitionRequestSchema = z.object({
|
|
10
|
+
fromDate: CalendarDaySchema,
|
|
11
|
+
vat: z.number().int().min(1).max(100),
|
|
12
|
+
});
|