@fiado/type-kit 3.550.0 → 3.552.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_test_/unit/retailCatalog/singlePriceFields.test.ts +48 -0
- package/_test_/unit/retailCommission/commissionPayments.test.ts +168 -0
- package/_test_/unit/retailCommission/commissionRules.test.ts +53 -0
- package/_test_/unit/retailIntegration/eventPayloads.test.ts +1 -0
- package/_test_/unit/retailOrg/dtos/RetailUser.test.ts +47 -0
- package/_test_/unit/retailOrg/dtos/requests/retailUserWalletRequests.test.ts +41 -0
- package/_test_/unit/retailOrg/dtos/responses/retailUserWalletResponses.test.ts +30 -0
- package/_test_/unit/retailOrg/enums/RetailUserWalletLinkMethodEnum.test.ts +12 -0
- package/_test_/unit/retailPromotions/giftOptionValue.test.ts +20 -0
- package/_test_/unit/retailWizard/linesWithoutListPrice.test.ts +40 -0
- package/bin/retailCatalog/dtos/Product.d.ts +2 -1
- package/bin/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.d.ts +1 -0
- package/bin/retailCatalog/dtos/requests/CreateProductRequest.d.ts +1 -0
- package/bin/retailCatalog/dtos/requests/SyncInventoryRequest.d.ts +1 -0
- package/bin/retailCatalog/dtos/requests/UpdateProductRequest.d.ts +1 -0
- package/bin/retailCatalog/dtos/responses/InventoryLensResponse.d.ts +1 -1
- package/bin/retailCatalog/dtos/responses/ReserveStockResponse.d.ts +4 -1
- package/bin/retailCatalog/dtos/responses/SkuPriceEntry.d.ts +2 -1
- package/bin/retailCatalog/dtos/responses/StoreCatalogItem.d.ts +1 -1
- package/bin/retailCommission/dtos/CommissionApi.d.ts +80 -1
- package/bin/retailCommission/dtos/CommissionLedger.d.ts +96 -0
- package/bin/retailCommission/dtos/CommissionLedger.js +2 -0
- package/bin/retailCommission/dtos/CommissionRule.d.ts +14 -1
- package/bin/retailCommission/enums/CommissionBillingPeriodEnum.d.ts +10 -0
- package/bin/retailCommission/enums/CommissionBillingPeriodEnum.js +14 -0
- package/bin/retailCommission/enums/CommissionLedgerMovementKindEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionLedgerMovementKindEnum.js +18 -0
- package/bin/retailCommission/enums/CommissionPayTimingEnum.d.ts +13 -0
- package/bin/retailCommission/enums/CommissionPayTimingEnum.js +17 -0
- package/bin/retailCommission/enums/CommissionPayTriggerEnum.d.ts +18 -0
- package/bin/retailCommission/enums/CommissionPayTriggerEnum.js +22 -0
- package/bin/retailCommission/enums/CommissionPaymentAttentionEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionPaymentAttentionEnum.js +18 -0
- package/bin/retailCommission/enums/CommissionPaymentStatusEnum.d.ts +14 -0
- package/bin/retailCommission/enums/CommissionPaymentStatusEnum.js +18 -0
- package/bin/retailCommission/index.d.ts +7 -0
- package/bin/retailCommission/index.js +7 -0
- package/bin/retailOrg/dtos/RetailUser.d.ts +13 -0
- package/bin/retailOrg/dtos/RetailUser.js +39 -0
- package/bin/retailOrg/dtos/requests/LinkRetailUserWalletRequest.d.ts +10 -0
- package/bin/retailOrg/dtos/requests/LinkRetailUserWalletRequest.js +37 -0
- package/bin/retailOrg/dtos/requests/LookupRetailUserWalletRequest.d.ts +10 -0
- package/bin/retailOrg/dtos/requests/LookupRetailUserWalletRequest.js +37 -0
- package/bin/retailOrg/dtos/responses/LookupRetailUserWalletResponse.d.ts +10 -0
- package/bin/retailOrg/dtos/responses/LookupRetailUserWalletResponse.js +2 -0
- package/bin/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.d.ts +8 -0
- package/bin/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.js +2 -0
- package/bin/retailOrg/enums/RetailUserWalletLinkMethodEnum.d.ts +11 -0
- package/bin/retailOrg/enums/RetailUserWalletLinkMethodEnum.js +15 -0
- package/bin/retailOrg/index.d.ts +6 -0
- package/bin/retailOrg/index.js +7 -0
- package/bin/retailOrg/validators/IsSingleWalletKeyConstraint.d.ts +6 -0
- package/bin/retailOrg/validators/IsSingleWalletKeyConstraint.js +24 -0
- package/bin/retailPromotions/dtos/responses/WizardSalePromotionResponses.d.ts +4 -1
- package/bin/retailWizard/dtos/SaleLine.d.ts +2 -1
- package/bin/retailWizard/dtos/WizardGiftLine.d.ts +1 -1
- package/bin/retailWizard/dtos/WizardLinePromotionFields.d.ts +1 -1
- package/bin/retailWizard/dtos/WizardReservedLine.d.ts +2 -1
- package/bin/retailWizard/events/SaleCompletedV1.d.ts +1 -1
- package/bin/retailWizard/events/SaleCompletedV2.d.ts +1 -1
- package/package.json +1 -1
- package/src/retailCatalog/dtos/Product.ts +2 -1
- package/src/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.ts +1 -0
- package/src/retailCatalog/dtos/requests/CreateProductRequest.ts +1 -0
- package/src/retailCatalog/dtos/requests/SyncInventoryRequest.ts +1 -0
- package/src/retailCatalog/dtos/requests/UpdateProductRequest.ts +1 -0
- package/src/retailCatalog/dtos/responses/InventoryLensResponse.ts +1 -1
- package/src/retailCatalog/dtos/responses/ReserveStockResponse.ts +4 -1
- package/src/retailCatalog/dtos/responses/SkuPriceEntry.ts +2 -1
- package/src/retailCatalog/dtos/responses/StoreCatalogItem.ts +1 -1
- package/src/retailCommission/dtos/CommissionApi.ts +97 -1
- package/src/retailCommission/dtos/CommissionLedger.ts +101 -0
- package/src/retailCommission/dtos/CommissionRule.ts +15 -1
- package/src/retailCommission/enums/CommissionBillingPeriodEnum.ts +10 -0
- package/src/retailCommission/enums/CommissionLedgerMovementKindEnum.ts +14 -0
- package/src/retailCommission/enums/CommissionPayTimingEnum.ts +13 -0
- package/src/retailCommission/enums/CommissionPayTriggerEnum.ts +18 -0
- package/src/retailCommission/enums/CommissionPaymentAttentionEnum.ts +14 -0
- package/src/retailCommission/enums/CommissionPaymentStatusEnum.ts +14 -0
- package/src/retailCommission/index.ts +7 -0
- package/src/retailOrg/dtos/RetailUser.ts +39 -0
- package/src/retailOrg/dtos/requests/LinkRetailUserWalletRequest.ts +24 -0
- package/src/retailOrg/dtos/requests/LookupRetailUserWalletRequest.ts +24 -0
- package/src/retailOrg/dtos/responses/LookupRetailUserWalletResponse.ts +11 -0
- package/src/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.ts +8 -0
- package/src/retailOrg/enums/RetailUserWalletLinkMethodEnum.ts +11 -0
- package/src/retailOrg/index.ts +8 -0
- package/src/retailOrg/validators/IsSingleWalletKeyConstraint.ts +18 -0
- package/src/retailPromotions/dtos/responses/WizardSalePromotionResponses.ts +4 -1
- package/src/retailWizard/dtos/SaleLine.ts +2 -1
- package/src/retailWizard/dtos/WizardGiftLine.ts +1 -1
- package/src/retailWizard/dtos/WizardLinePromotionFields.ts +1 -1
- package/src/retailWizard/dtos/WizardReservedLine.ts +2 -1
- package/src/retailWizard/events/SaleCompletedV1.ts +1 -1
- package/src/retailWizard/events/SaleCompletedV2.ts +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body de `POST /retailers/{retailerId}/users/wallet-lookup`: busca una wallet PCF por CLABE o por
|
|
3
|
+
* teléfono, exactamente uno. No escribe nada.
|
|
4
|
+
*/
|
|
5
|
+
export declare class LookupRetailUserWalletRequest {
|
|
6
|
+
/** CLABE PCF, 18 dígitos. No va a logs completa. */
|
|
7
|
+
clabe?: string | null;
|
|
8
|
+
/** Teléfono de México: 10 dígitos, con o sin `+52`; retail-org lo normaliza a E.164. No va a logs completo. */
|
|
9
|
+
phone?: string | null;
|
|
10
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LookupRetailUserWalletRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const IsSingleWalletKeyConstraint_1 = require("../../validators/IsSingleWalletKeyConstraint");
|
|
16
|
+
/**
|
|
17
|
+
* Body de `POST /retailers/{retailerId}/users/wallet-lookup`: busca una wallet PCF por CLABE o por
|
|
18
|
+
* teléfono, exactamente uno. No escribe nada.
|
|
19
|
+
*/
|
|
20
|
+
class LookupRetailUserWalletRequest {
|
|
21
|
+
}
|
|
22
|
+
exports.LookupRetailUserWalletRequest = LookupRetailUserWalletRequest;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Expose)(),
|
|
25
|
+
(0, class_validator_1.ValidateIf)((o) => o.clabe != null || o.phone == null),
|
|
26
|
+
(0, class_validator_1.Validate)(IsSingleWalletKeyConstraint_1.IsSingleWalletKeyConstraint),
|
|
27
|
+
(0, class_validator_1.IsString)({ message: 'clabe debe ser texto' }),
|
|
28
|
+
(0, class_validator_1.Matches)(/^\d{18}$/, { message: 'clabe debe tener 18 dígitos' }),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], LookupRetailUserWalletRequest.prototype, "clabe", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, class_transformer_1.Expose)(),
|
|
33
|
+
(0, class_validator_1.IsOptional)(),
|
|
34
|
+
(0, class_validator_1.IsString)({ message: 'phone debe ser texto' }),
|
|
35
|
+
(0, class_validator_1.Matches)(/^(\+52)?\d{10}$/, { message: 'phone debe tener 10 dígitos, con o sin +52' }),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], LookupRetailUserWalletRequest.prototype, "phone", void 0);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RetailUserWalletLinkMethodEnum } from '../../enums/RetailUserWalletLinkMethodEnum';
|
|
2
|
+
/** Respuesta de `POST /retailers/{retailerId}/users/wallet-lookup`. */
|
|
3
|
+
export interface LookupRetailUserWalletResponse {
|
|
4
|
+
found: boolean;
|
|
5
|
+
active: boolean;
|
|
6
|
+
/** Nombre del titular para que el administrador confirme; `null` si no se encontró. */
|
|
7
|
+
holderName: string | null;
|
|
8
|
+
/** Por dónde se buscó. */
|
|
9
|
+
method: RetailUserWalletLinkMethodEnum;
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Respuesta de `GET /private/retailers/{retailerId}/users/{retailUserId}/wallet`: la wallet del
|
|
3
|
+
* vendedor para el motor de comisiones. Ambos `null` si no tiene wallet vinculada.
|
|
4
|
+
*/
|
|
5
|
+
export interface PrivateRetailUserWalletResponse {
|
|
6
|
+
directoryId: string | null;
|
|
7
|
+
pcfAccountId: string | null;
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cómo se encontró la wallet PCF del vendedor.
|
|
3
|
+
* @enum {string}
|
|
4
|
+
*
|
|
5
|
+
* @property {string} CLABE - Por la CLABE PCF capturada en el alta.
|
|
6
|
+
* @property {string} PHONE - Por el teléfono de su usuario de Fiado.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum RetailUserWalletLinkMethodEnum {
|
|
9
|
+
CLABE = "CLABE",
|
|
10
|
+
PHONE = "PHONE"
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RetailUserWalletLinkMethodEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Cómo se encontró la wallet PCF del vendedor.
|
|
6
|
+
* @enum {string}
|
|
7
|
+
*
|
|
8
|
+
* @property {string} CLABE - Por la CLABE PCF capturada en el alta.
|
|
9
|
+
* @property {string} PHONE - Por el teléfono de su usuario de Fiado.
|
|
10
|
+
*/
|
|
11
|
+
var RetailUserWalletLinkMethodEnum;
|
|
12
|
+
(function (RetailUserWalletLinkMethodEnum) {
|
|
13
|
+
RetailUserWalletLinkMethodEnum["CLABE"] = "CLABE";
|
|
14
|
+
RetailUserWalletLinkMethodEnum["PHONE"] = "PHONE";
|
|
15
|
+
})(RetailUserWalletLinkMethodEnum || (exports.RetailUserWalletLinkMethodEnum = RetailUserWalletLinkMethodEnum = {}));
|
package/bin/retailOrg/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export * from './enums/StoreStatusEnum';
|
|
|
5
5
|
export * from './enums/RetailUserStatusEnum';
|
|
6
6
|
export * from './enums/EmploymentTypeEnum';
|
|
7
7
|
export * from './enums/CollectorSeniorityEnum';
|
|
8
|
+
export * from './enums/RetailUserWalletLinkMethodEnum';
|
|
8
9
|
export * from './enums/GoalTargetTypeEnum';
|
|
9
10
|
export * from './dtos/GeoLocation';
|
|
10
11
|
export * from './dtos/GoalAmounts';
|
|
@@ -18,6 +19,7 @@ export * from './dtos/validation/RetailUserValidationDto';
|
|
|
18
19
|
export * from './dtos/validation/CollectorValidationDto';
|
|
19
20
|
export * from './dtos/validation/PrivateSellerListResponse';
|
|
20
21
|
export * from './dtos/PaginatedResult';
|
|
22
|
+
export * from './validators/IsSingleWalletKeyConstraint';
|
|
21
23
|
export * from './dtos/requests/RetailAddressInput';
|
|
22
24
|
export * from './dtos/requests/CreateRetailerRequest';
|
|
23
25
|
export * from './dtos/requests/UpdateRetailerRequest';
|
|
@@ -34,6 +36,8 @@ export * from './dtos/requests/ProvisionRetailUserRequest';
|
|
|
34
36
|
export * from './dtos/requests/UpdateRetailUserRequest';
|
|
35
37
|
export * from './dtos/requests/ChangeRetailUserStatusRequest';
|
|
36
38
|
export * from './dtos/requests/TransferRetailUserRequest';
|
|
39
|
+
export * from './dtos/requests/LookupRetailUserWalletRequest';
|
|
40
|
+
export * from './dtos/requests/LinkRetailUserWalletRequest';
|
|
37
41
|
export * from './dtos/requests/GoalListQuery';
|
|
38
42
|
export * from './dtos/requests/GoalUpsertRequest';
|
|
39
43
|
export * from './dtos/requests/GoalPathParams';
|
|
@@ -46,3 +50,5 @@ export * from './dtos/responses/GoalUpsertResponse';
|
|
|
46
50
|
export * from './dtos/responses/PrivateGoalListResponse';
|
|
47
51
|
export * from './dtos/responses/StoreKpiResponse';
|
|
48
52
|
export * from './dtos/responses/SellerKpiResponse';
|
|
53
|
+
export * from './dtos/responses/LookupRetailUserWalletResponse';
|
|
54
|
+
export * from './dtos/responses/PrivateRetailUserWalletResponse';
|
package/bin/retailOrg/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./enums/StoreStatusEnum"), exports);
|
|
|
21
21
|
__exportStar(require("./enums/RetailUserStatusEnum"), exports);
|
|
22
22
|
__exportStar(require("./enums/EmploymentTypeEnum"), exports);
|
|
23
23
|
__exportStar(require("./enums/CollectorSeniorityEnum"), exports);
|
|
24
|
+
__exportStar(require("./enums/RetailUserWalletLinkMethodEnum"), exports);
|
|
24
25
|
// F3 — Portal Admin VentasLuga (metas de venta del periodo)
|
|
25
26
|
__exportStar(require("./enums/GoalTargetTypeEnum"), exports);
|
|
26
27
|
// Entity DTOs
|
|
@@ -38,6 +39,8 @@ __exportStar(require("./dtos/validation/CollectorValidationDto"), exports);
|
|
|
38
39
|
__exportStar(require("./dtos/validation/PrivateSellerListResponse"), exports);
|
|
39
40
|
// Paginación genérica
|
|
40
41
|
__exportStar(require("./dtos/PaginatedResult"), exports);
|
|
42
|
+
// Validadores
|
|
43
|
+
__exportStar(require("./validators/IsSingleWalletKeyConstraint"), exports);
|
|
41
44
|
// Request DTOs (input validado por endpoint)
|
|
42
45
|
__exportStar(require("./dtos/requests/RetailAddressInput"), exports);
|
|
43
46
|
__exportStar(require("./dtos/requests/CreateRetailerRequest"), exports);
|
|
@@ -55,6 +58,8 @@ __exportStar(require("./dtos/requests/ProvisionRetailUserRequest"), exports);
|
|
|
55
58
|
__exportStar(require("./dtos/requests/UpdateRetailUserRequest"), exports);
|
|
56
59
|
__exportStar(require("./dtos/requests/ChangeRetailUserStatusRequest"), exports);
|
|
57
60
|
__exportStar(require("./dtos/requests/TransferRetailUserRequest"), exports);
|
|
61
|
+
__exportStar(require("./dtos/requests/LookupRetailUserWalletRequest"), exports);
|
|
62
|
+
__exportStar(require("./dtos/requests/LinkRetailUserWalletRequest"), exports);
|
|
58
63
|
// F3 — metas y KPIs del Portal Admin VL
|
|
59
64
|
__exportStar(require("./dtos/requests/GoalListQuery"), exports);
|
|
60
65
|
__exportStar(require("./dtos/requests/GoalUpsertRequest"), exports);
|
|
@@ -69,3 +74,5 @@ __exportStar(require("./dtos/responses/GoalUpsertResponse"), exports);
|
|
|
69
74
|
__exportStar(require("./dtos/responses/PrivateGoalListResponse"), exports);
|
|
70
75
|
__exportStar(require("./dtos/responses/StoreKpiResponse"), exports);
|
|
71
76
|
__exportStar(require("./dtos/responses/SellerKpiResponse"), exports);
|
|
77
|
+
__exportStar(require("./dtos/responses/LookupRetailUserWalletResponse"), exports);
|
|
78
|
+
__exportStar(require("./dtos/responses/PrivateRetailUserWalletResponse"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ValidationArguments, type ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
+
/** Exige exactamente uno de `clabe` o `phone`. */
|
|
3
|
+
export declare class IsSingleWalletKeyConstraint implements ValidatorConstraintInterface {
|
|
4
|
+
validate(_value: unknown, args: ValidationArguments): boolean;
|
|
5
|
+
defaultMessage(): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.IsSingleWalletKeyConstraint = void 0;
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
11
|
+
/** Exige exactamente uno de `clabe` o `phone`. */
|
|
12
|
+
let IsSingleWalletKeyConstraint = class IsSingleWalletKeyConstraint {
|
|
13
|
+
validate(_value, args) {
|
|
14
|
+
const o = args.object;
|
|
15
|
+
return (o.clabe != null) !== (o.phone != null);
|
|
16
|
+
}
|
|
17
|
+
defaultMessage() {
|
|
18
|
+
return 'debe venir clabe o phone, solo uno';
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.IsSingleWalletKeyConstraint = IsSingleWalletKeyConstraint;
|
|
22
|
+
exports.IsSingleWalletKeyConstraint = IsSingleWalletKeyConstraint = __decorate([
|
|
23
|
+
(0, class_validator_1.ValidatorConstraint)({ name: 'isSingleWalletKey', async: false })
|
|
24
|
+
], IsSingleWalletKeyConstraint);
|
|
@@ -42,7 +42,10 @@ export interface ListStoreSalePromotionsResponse {
|
|
|
42
42
|
export interface GiftOption {
|
|
43
43
|
sku: string;
|
|
44
44
|
name: string;
|
|
45
|
-
|
|
45
|
+
/** Valor del regalo: su precio de venta. */
|
|
46
|
+
valueCents?: number;
|
|
47
|
+
/** @deprecated Usa `valueCents`; trae el mismo valor. */
|
|
48
|
+
listPriceCents?: number;
|
|
46
49
|
inStock: boolean;
|
|
47
50
|
}
|
|
48
51
|
/** Lo que se entrega al cerrar («Después en la venta»). `quantity`: recargas o meses de garantía. */
|
|
@@ -8,7 +8,8 @@ export interface SaleLine extends WizardLinePromotionFields {
|
|
|
8
8
|
sku: string;
|
|
9
9
|
qty: number;
|
|
10
10
|
basePriceCents: number;
|
|
11
|
-
|
|
11
|
+
/** @deprecated Ya no se escribe; el valor de un regalo vive en `originalPriceCents`. */
|
|
12
|
+
listPriceCents?: number | null;
|
|
12
13
|
/** Llave del registro PRICE# del que salió el precio. */
|
|
13
14
|
priceSk: string;
|
|
14
15
|
paymentType: LinePaymentTypeEnum;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { WizardLineRoleEnum } from '../enums/WizardLineRoleEnum';
|
|
2
2
|
import type { WizardReservedLine } from './WizardReservedLine';
|
|
3
|
-
/** Línea GIFT: ligada a un ancla, con su promo y el
|
|
3
|
+
/** Línea GIFT: ligada a un ancla, con su promo y el valor del regalo (su precio de venta). */
|
|
4
4
|
export type WizardGiftLine = WizardReservedLine & {
|
|
5
5
|
role: WizardLineRoleEnum.GIFT;
|
|
6
6
|
linkedLineId: string;
|
|
@@ -11,7 +11,7 @@ export interface WizardLinePromotionFields {
|
|
|
11
11
|
discountCode?: string;
|
|
12
12
|
/** Descuento total de la línea; neto = basePriceCents × qty − discountCents. */
|
|
13
13
|
discountCents?: number;
|
|
14
|
-
/** Precio antes del descuento; en un regalo,
|
|
14
|
+
/** Precio antes del descuento; en un regalo, su precio de venta con la línea a $0. */
|
|
15
15
|
originalPriceCents?: number;
|
|
16
16
|
/** Descuento de cada promo en la línea; sin el campo, la de `promotionId` lleva todo menos el código. */
|
|
17
17
|
promotionDiscounts?: LinePromotionAmount[];
|
|
@@ -17,7 +17,8 @@ export interface WizardReservedLine extends WizardLinePromotionFields {
|
|
|
17
17
|
expiresAt: string;
|
|
18
18
|
/** Precio fijado de la línea (el del kit si es kit). */
|
|
19
19
|
basePriceCents: number | null;
|
|
20
|
-
|
|
20
|
+
/** @deprecated Ya no se escribe; el valor de un regalo vive en `originalPriceCents`. */
|
|
21
|
+
listPriceCents?: number | null;
|
|
21
22
|
/** Llave del registro PRICE# del que salió el precio. */
|
|
22
23
|
priceSk: string | null;
|
|
23
24
|
eligibleFinanciers: string[];
|
|
@@ -23,7 +23,7 @@ export interface SaleCompletedV1 {
|
|
|
23
23
|
* sin `type` un crédito con $1,300 de enganche era indistinguible de un contado de $1,300.
|
|
24
24
|
*/
|
|
25
25
|
type?: SaleTypeEnum;
|
|
26
|
-
/** Precio
|
|
26
|
+
/** Precio neto del equipo: su precio de venta menos su descuento. Sin equipo se omite. */
|
|
27
27
|
equipmentPriceCents?: number;
|
|
28
28
|
/** Enganche cobrado (solo `type=CREDIT`). */
|
|
29
29
|
downPaymentCents?: number;
|
|
@@ -30,7 +30,7 @@ export interface SaleCompletedV2 {
|
|
|
30
30
|
imei: string | null;
|
|
31
31
|
/** Lo COBRADO en caja. En contado == precio del equipo; en CREDIT es SOLO el enganche. */
|
|
32
32
|
amountCents: number;
|
|
33
|
-
/** Precio
|
|
33
|
+
/** Precio neto del equipo (venta menos descuento), la base de comisión. `null` sin el dato. */
|
|
34
34
|
equipmentPriceCents: number | null;
|
|
35
35
|
downPaymentCents: number | null;
|
|
36
36
|
creditId: string | null;
|
package/package.json
CHANGED
|
@@ -28,7 +28,8 @@ export class Product {
|
|
|
28
28
|
/** `null` = Sin gama. */
|
|
29
29
|
tier!: ProductTierEnum | null;
|
|
30
30
|
basePriceCents!: number;
|
|
31
|
-
|
|
31
|
+
/** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
|
|
32
|
+
listPriceCents?: number | null;
|
|
32
33
|
eligibleFinanciers!: string[];
|
|
33
34
|
mdmEnabled!: boolean;
|
|
34
35
|
mdmProvider!: MdmProviderEnum | null;
|
|
@@ -22,6 +22,7 @@ import { ProductComponent } from '../ProductComponent';
|
|
|
22
22
|
|
|
23
23
|
/** Precio de un producto en la puerta de entrada; crea PRICE# solo si cambió el monto. */
|
|
24
24
|
export class SyncPrice {
|
|
25
|
+
/** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
|
|
25
26
|
@IsOptional()
|
|
26
27
|
@IsInt()
|
|
27
28
|
@Min(0)
|
|
@@ -69,7 +69,7 @@ export interface InventoryLensSkuItem {
|
|
|
69
69
|
/** Unidades de este SKU vendidas hoy en esta tienda, **financiadas por SureKeep**. */
|
|
70
70
|
soldTodayUnits: number;
|
|
71
71
|
|
|
72
|
-
/** Precio de contado en centavos (`
|
|
72
|
+
/** Precio de contado en centavos (`basePriceCents`). */
|
|
73
73
|
cashPriceCents: number;
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -16,7 +16,10 @@ export interface ReservedComponent {
|
|
|
16
16
|
export interface ReserveStockResponse {
|
|
17
17
|
expiresAt: string;
|
|
18
18
|
basePriceCents: number;
|
|
19
|
-
|
|
19
|
+
/** @deprecated Usa `giftValueCents`; en reservas GIFT trae el mismo valor, en las demás `null`. */
|
|
20
|
+
listPriceCents?: number | null;
|
|
21
|
+
/** Solo en reservas `purpose: GIFT`: valor del regalo, su precio de venta. */
|
|
22
|
+
giftValueCents?: number;
|
|
20
23
|
/** Llave del registro PRICE# del que salió el precio fijado. */
|
|
21
24
|
priceSk: string;
|
|
22
25
|
eligibleFinanciers: string[];
|
|
@@ -3,7 +3,8 @@ import type { PriceSourceEnum } from '../../enums/PriceSourceEnum';
|
|
|
3
3
|
/** Un registro del historial de precios PRICE# de un SKU. */
|
|
4
4
|
export interface SkuPriceEntry {
|
|
5
5
|
effectiveFrom: string;
|
|
6
|
-
|
|
6
|
+
/** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
|
|
7
|
+
listPriceCents?: number | null;
|
|
7
8
|
basePriceCents: number;
|
|
8
9
|
source: PriceSourceEnum;
|
|
9
10
|
createdBy: string;
|
|
@@ -38,7 +38,7 @@ export interface StoreCatalogItem {
|
|
|
38
38
|
itemType?: ItemTypeEnum;
|
|
39
39
|
/** Nombre visible para kits y servicios, que no tienen marca/modelo. */
|
|
40
40
|
description?: string;
|
|
41
|
-
/**
|
|
41
|
+
/** @deprecated Ya no se usa; el valor de un regalo es `basePriceCents`. */
|
|
42
42
|
listPriceCents?: number;
|
|
43
43
|
/** Prioridad de venta de 0 a 100; «Recomendados» ordena por ella. */
|
|
44
44
|
salePriority?: number;
|
|
@@ -23,8 +23,16 @@ import type {
|
|
|
23
23
|
CommissionRuleScope,
|
|
24
24
|
CommissionRuleSetSnapshot,
|
|
25
25
|
} from './CommissionRule';
|
|
26
|
+
import type {
|
|
27
|
+
CommissionChainStatement,
|
|
28
|
+
CommissionLedgerMovement,
|
|
29
|
+
CommissionPayment,
|
|
30
|
+
CommissionSellerBalance,
|
|
31
|
+
} from './CommissionLedger';
|
|
26
32
|
import type { CommissionWindowEnum } from '../enums/CommissionWindowEnum';
|
|
33
|
+
import type { CommissionBillingPeriodEnum } from '../enums/CommissionBillingPeriodEnum';
|
|
27
34
|
import type { CommissionCountByEnum } from '../enums/CommissionCountByEnum';
|
|
35
|
+
import type { CommissionPayTimingEnum } from '../enums/CommissionPayTimingEnum';
|
|
28
36
|
import type { CommissionAggregateByEnum } from '../enums/CommissionAggregateByEnum';
|
|
29
37
|
import type { CommissionSeriesByEnum } from '../enums/CommissionSeriesByEnum';
|
|
30
38
|
import type { CommissionAccrualStatusEnum } from '../enums/CommissionAccrualStatusEnum';
|
|
@@ -254,6 +262,8 @@ export interface CommissionRuleInput {
|
|
|
254
262
|
replacesOthers: boolean;
|
|
255
263
|
/** Si la regla cuenta piezas o ventas. Ausente = `PIECE`. */
|
|
256
264
|
countBy?: CommissionCountByEnum;
|
|
265
|
+
/** Cuándo se paga lo que gana. Ausente = `ON_CUT`. */
|
|
266
|
+
payTiming?: CommissionPayTimingEnum;
|
|
257
267
|
}
|
|
258
268
|
|
|
259
269
|
/** `POST /backoffice/commissions/rules` — la regla nace en borrador. */
|
|
@@ -297,10 +307,12 @@ export interface GetPoliciesResponse {
|
|
|
297
307
|
policies: CommissionPolicies;
|
|
298
308
|
}
|
|
299
309
|
|
|
300
|
-
/** `PUT /backoffice/commissions/policies` — las
|
|
310
|
+
/** `PUT /backoffice/commissions/policies` — las políticas se guardan juntas. */
|
|
301
311
|
export interface UpdatePoliciesRequest {
|
|
302
312
|
clawback: { cancelacionDias: number; devolucionDias: number; npiM30Dias: number };
|
|
303
313
|
commissions: { multiplicadorMaxBps: number; ventanaDefault: CommissionWindowEnum };
|
|
314
|
+
/** Opcional para que un editor que todavía no la manda siga funcionando. */
|
|
315
|
+
payouts?: { walletDeposits: boolean; chainBillingPeriod: CommissionBillingPeriodEnum };
|
|
304
316
|
}
|
|
305
317
|
|
|
306
318
|
export interface UpdatePoliciesResponse {
|
|
@@ -452,6 +464,8 @@ export interface CommissionRuleView {
|
|
|
452
464
|
effectiveTo: string | null;
|
|
453
465
|
/** Si la regla cuenta piezas o ventas. Ausente = `PIECE`. */
|
|
454
466
|
countBy?: CommissionCountByEnum;
|
|
467
|
+
/** Cuándo se paga lo que gana. Ausente = `ON_CUT`. */
|
|
468
|
+
payTiming?: CommissionPayTimingEnum;
|
|
455
469
|
}
|
|
456
470
|
|
|
457
471
|
/** Lo pagado en varios cortes. */
|
|
@@ -482,3 +496,85 @@ export interface GetMyCommissionsResponse {
|
|
|
482
496
|
/** Tope del multiplicador de la política; `null` sin política. */
|
|
483
497
|
multiplierCapBps: number | null;
|
|
484
498
|
}
|
|
499
|
+
|
|
500
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
501
|
+
// Pagos a la wallet
|
|
502
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
503
|
+
|
|
504
|
+
/** `GET /backoffice/commissions/payments/attention` — el reporte "Por pagar" de la cadena. */
|
|
505
|
+
export interface GetPaymentAttentionResponse {
|
|
506
|
+
/** Saldos con exigible sin depositar, con su motivo. */
|
|
507
|
+
pending: CommissionSellerBalance[];
|
|
508
|
+
/** Depósitos sin confirmar: "Requiere revisión". */
|
|
509
|
+
unverified: CommissionPayment[];
|
|
510
|
+
/** Saldos con exigible negativo. */
|
|
511
|
+
debts: CommissionSellerBalance[];
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/** `POST /backoffice/commissions/payments/sellers/{sellerId}/paid-outside` */
|
|
515
|
+
export interface MarkPaidOutsideRequest {
|
|
516
|
+
amountCents: number;
|
|
517
|
+
/** Obligatorio: dinero que sale sin depósito tiene que poder auditarse. */
|
|
518
|
+
reason: string;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** `POST /backoffice/commissions/payments/{paymentId}/resolve` — revisión de un depósito sin confirmar. */
|
|
522
|
+
export interface ResolvePaymentRequest {
|
|
523
|
+
/** `true` = sí se depositó; `false` = no, y el monto vuelve al exigible. */
|
|
524
|
+
accredited: boolean;
|
|
525
|
+
/** El folio, cuando sí se depositó. */
|
|
526
|
+
transactionId?: string;
|
|
527
|
+
note: string;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/** `GET /backoffice/commissions/sellers/{sellerId}/ledger` — saldo e historial de un vendedor. */
|
|
531
|
+
export interface GetSellerLedgerResponse {
|
|
532
|
+
balance: CommissionSellerBalance;
|
|
533
|
+
movements: CommissionLedgerMovement[];
|
|
534
|
+
payments: CommissionPayment[];
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/** `GET /backoffice/commissions/statements` */
|
|
538
|
+
export interface ListStatementsResponse {
|
|
539
|
+
statements: CommissionChainStatement[];
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/** `GET /backoffice/commissions/statements/{statementId}` — el estado de cuenta y sus depósitos. */
|
|
543
|
+
export interface GetStatementResponse {
|
|
544
|
+
statement: CommissionChainStatement;
|
|
545
|
+
payments: CommissionPayment[];
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/** `GET /commissions/me/payments` — los pagos del vendedor que llama. */
|
|
549
|
+
export interface GetMyPaymentsResponse {
|
|
550
|
+
/** `null` mientras no tiene nada en el libro. */
|
|
551
|
+
balance: CommissionSellerBalance | null;
|
|
552
|
+
payments: CommissionPayment[];
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/** `POST /backoffice/commissions/payments/sellers/{sellerId}/retry` (202) — el pago quedó en la cola. */
|
|
556
|
+
export interface RetrySellerPaymentView {
|
|
557
|
+
sellerId: string;
|
|
558
|
+
/** Id del disparo `RETRY` con que se encoló. */
|
|
559
|
+
triggerId: string;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/** `POST /backoffice/commissions/payments/sellers/{sellerId}/paid-outside` (201) — el saldo nuevo y el movimiento escrito. */
|
|
563
|
+
export interface MarkPaidOutsideView {
|
|
564
|
+
balance: CommissionSellerBalance;
|
|
565
|
+
movement: CommissionLedgerMovement;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/** `POST /backoffice/commissions/payments/{paymentId}/resolve` — el depósito ya resuelto. */
|
|
569
|
+
export interface ResolvePaymentView {
|
|
570
|
+
payment: CommissionPayment;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* `POST /private/retailers/{retailerId}/sellers/{sellerId}/payments/trigger?tenantId=` (202) — retail-org
|
|
575
|
+
* avisa que el vendedor vinculó su wallet. El cuerpo va vacío (`{}`).
|
|
576
|
+
*/
|
|
577
|
+
export interface PrivateTriggerSellerPaymentResponse {
|
|
578
|
+
/** `false` si la cola no lo recibió: el saldo sigue pendiente y entra en el siguiente pago. */
|
|
579
|
+
enqueued: boolean;
|
|
580
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { CommissionBillingPeriodEnum } from '../enums/CommissionBillingPeriodEnum';
|
|
2
|
+
import type { CommissionLedgerMovementKindEnum } from '../enums/CommissionLedgerMovementKindEnum';
|
|
3
|
+
import type { CommissionPayTimingEnum } from '../enums/CommissionPayTimingEnum';
|
|
4
|
+
import type { CommissionPaymentAttentionEnum } from '../enums/CommissionPaymentAttentionEnum';
|
|
5
|
+
import type { CommissionPaymentStatusEnum } from '../enums/CommissionPaymentStatusEnum';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Saldo de un vendedor en una cadena. Es parte del libro de pagos: cada peso que se le acredita, se
|
|
9
|
+
* le descuenta o se le deposita en su wallet. Montos en centavos; fechas en ISO.
|
|
10
|
+
*/
|
|
11
|
+
export interface CommissionSellerBalance {
|
|
12
|
+
retailerId: string;
|
|
13
|
+
sellerId: string;
|
|
14
|
+
/** Ganado que todavía no toca pagar (reglas al cierre del mes). */
|
|
15
|
+
retainedCents: number;
|
|
16
|
+
/** Lo que se puede depositar ya. Negativo = el vendedor debe. */
|
|
17
|
+
payableCents: number;
|
|
18
|
+
/** Apartado para un depósito en curso o sin confirmar. */
|
|
19
|
+
inTransitCents: number;
|
|
20
|
+
/** Acumulado de todo lo ganado. */
|
|
21
|
+
earnedCents: number;
|
|
22
|
+
/** Acumulado de todo lo descontado. */
|
|
23
|
+
deductedCents: number;
|
|
24
|
+
/** Acumulado de lo depositado y confirmado. */
|
|
25
|
+
accreditedCents: number;
|
|
26
|
+
/** Acumulado de lo pagado por fuera. */
|
|
27
|
+
paidOutsideCents: number;
|
|
28
|
+
/** `null` si no necesita atención. */
|
|
29
|
+
attention: CommissionPaymentAttentionEnum | null;
|
|
30
|
+
/** Código del último rechazo, p. ej. `USER_NOT_ACTIVE`. */
|
|
31
|
+
attentionCode: string | null;
|
|
32
|
+
/** Desde cuándo tiene esa atención. */
|
|
33
|
+
attentionSince: string | null;
|
|
34
|
+
updatedAt: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Lo que una regla aporta a un movimiento. */
|
|
38
|
+
export interface CommissionLedgerMovementRule {
|
|
39
|
+
ruleId: string;
|
|
40
|
+
payTiming: CommissionPayTimingEnum;
|
|
41
|
+
cents: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Un movimiento del libro. Nunca cambia. */
|
|
45
|
+
export interface CommissionLedgerMovement {
|
|
46
|
+
/** Determinista por origen: una reentrega no duplica el movimiento. */
|
|
47
|
+
movementKey: string;
|
|
48
|
+
kind: CommissionLedgerMovementKindEnum;
|
|
49
|
+
periodId: string;
|
|
50
|
+
retainedDeltaCents: number;
|
|
51
|
+
payableDeltaCents: number;
|
|
52
|
+
byRule: CommissionLedgerMovementRule[];
|
|
53
|
+
saleId: string | null;
|
|
54
|
+
adjustmentId: string | null;
|
|
55
|
+
/** `YYYY-MM` de la liberación mensual. */
|
|
56
|
+
releaseMonth: string | null;
|
|
57
|
+
/** Obligatorio en lo pagado por fuera. */
|
|
58
|
+
reason: string | null;
|
|
59
|
+
createdAt: string;
|
|
60
|
+
createdBy: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Un depósito a la wallet del vendedor. Solo cambia su estado. */
|
|
64
|
+
export interface CommissionPayment {
|
|
65
|
+
/** También es la llave de idempotencia del depósito. */
|
|
66
|
+
paymentId: string;
|
|
67
|
+
retailerId: string;
|
|
68
|
+
sellerId: string;
|
|
69
|
+
amountCents: number;
|
|
70
|
+
status: CommissionPaymentStatusEnum;
|
|
71
|
+
/** La wallet a la que se depositó. */
|
|
72
|
+
directoryId: string;
|
|
73
|
+
/** Folio del depósito; `null` mientras no se confirma. */
|
|
74
|
+
transactionId: string | null;
|
|
75
|
+
errorCode: string | null;
|
|
76
|
+
/** Lo que ve el vendedor en su wallet; máximo 120 caracteres. */
|
|
77
|
+
concept: string;
|
|
78
|
+
requestedAt: string;
|
|
79
|
+
resolvedAt: string | null;
|
|
80
|
+
resolvedBy: string | null;
|
|
81
|
+
/** Nota de quien lo revisó a mano. */
|
|
82
|
+
note: string | null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Estado de cuenta para cobrarle a la cadena: los depósitos confirmados del periodo. Lo pagado por
|
|
87
|
+
* fuera no entra. Se genera una vez y no cambia.
|
|
88
|
+
*/
|
|
89
|
+
export interface CommissionChainStatement {
|
|
90
|
+
statementId: string;
|
|
91
|
+
retailerId: string;
|
|
92
|
+
period: CommissionBillingPeriodEnum;
|
|
93
|
+
/** `YYYY-MM-DD`, inclusive. */
|
|
94
|
+
startDate: string;
|
|
95
|
+
/** `YYYY-MM-DD`, inclusive. */
|
|
96
|
+
endDate: string;
|
|
97
|
+
accreditedCents: number;
|
|
98
|
+
paymentsCount: number;
|
|
99
|
+
sellersCount: number;
|
|
100
|
+
generatedAt: string;
|
|
101
|
+
}
|