@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.
Files changed (95) hide show
  1. package/_test_/unit/retailCatalog/singlePriceFields.test.ts +48 -0
  2. package/_test_/unit/retailCommission/commissionPayments.test.ts +168 -0
  3. package/_test_/unit/retailCommission/commissionRules.test.ts +53 -0
  4. package/_test_/unit/retailIntegration/eventPayloads.test.ts +1 -0
  5. package/_test_/unit/retailOrg/dtos/RetailUser.test.ts +47 -0
  6. package/_test_/unit/retailOrg/dtos/requests/retailUserWalletRequests.test.ts +41 -0
  7. package/_test_/unit/retailOrg/dtos/responses/retailUserWalletResponses.test.ts +30 -0
  8. package/_test_/unit/retailOrg/enums/RetailUserWalletLinkMethodEnum.test.ts +12 -0
  9. package/_test_/unit/retailPromotions/giftOptionValue.test.ts +20 -0
  10. package/_test_/unit/retailWizard/linesWithoutListPrice.test.ts +40 -0
  11. package/bin/retailCatalog/dtos/Product.d.ts +2 -1
  12. package/bin/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.d.ts +1 -0
  13. package/bin/retailCatalog/dtos/requests/CreateProductRequest.d.ts +1 -0
  14. package/bin/retailCatalog/dtos/requests/SyncInventoryRequest.d.ts +1 -0
  15. package/bin/retailCatalog/dtos/requests/UpdateProductRequest.d.ts +1 -0
  16. package/bin/retailCatalog/dtos/responses/InventoryLensResponse.d.ts +1 -1
  17. package/bin/retailCatalog/dtos/responses/ReserveStockResponse.d.ts +4 -1
  18. package/bin/retailCatalog/dtos/responses/SkuPriceEntry.d.ts +2 -1
  19. package/bin/retailCatalog/dtos/responses/StoreCatalogItem.d.ts +1 -1
  20. package/bin/retailCommission/dtos/CommissionApi.d.ts +80 -1
  21. package/bin/retailCommission/dtos/CommissionLedger.d.ts +96 -0
  22. package/bin/retailCommission/dtos/CommissionLedger.js +2 -0
  23. package/bin/retailCommission/dtos/CommissionRule.d.ts +14 -1
  24. package/bin/retailCommission/enums/CommissionBillingPeriodEnum.d.ts +10 -0
  25. package/bin/retailCommission/enums/CommissionBillingPeriodEnum.js +14 -0
  26. package/bin/retailCommission/enums/CommissionLedgerMovementKindEnum.d.ts +14 -0
  27. package/bin/retailCommission/enums/CommissionLedgerMovementKindEnum.js +18 -0
  28. package/bin/retailCommission/enums/CommissionPayTimingEnum.d.ts +13 -0
  29. package/bin/retailCommission/enums/CommissionPayTimingEnum.js +17 -0
  30. package/bin/retailCommission/enums/CommissionPayTriggerEnum.d.ts +18 -0
  31. package/bin/retailCommission/enums/CommissionPayTriggerEnum.js +22 -0
  32. package/bin/retailCommission/enums/CommissionPaymentAttentionEnum.d.ts +14 -0
  33. package/bin/retailCommission/enums/CommissionPaymentAttentionEnum.js +18 -0
  34. package/bin/retailCommission/enums/CommissionPaymentStatusEnum.d.ts +14 -0
  35. package/bin/retailCommission/enums/CommissionPaymentStatusEnum.js +18 -0
  36. package/bin/retailCommission/index.d.ts +7 -0
  37. package/bin/retailCommission/index.js +7 -0
  38. package/bin/retailOrg/dtos/RetailUser.d.ts +13 -0
  39. package/bin/retailOrg/dtos/RetailUser.js +39 -0
  40. package/bin/retailOrg/dtos/requests/LinkRetailUserWalletRequest.d.ts +10 -0
  41. package/bin/retailOrg/dtos/requests/LinkRetailUserWalletRequest.js +37 -0
  42. package/bin/retailOrg/dtos/requests/LookupRetailUserWalletRequest.d.ts +10 -0
  43. package/bin/retailOrg/dtos/requests/LookupRetailUserWalletRequest.js +37 -0
  44. package/bin/retailOrg/dtos/responses/LookupRetailUserWalletResponse.d.ts +10 -0
  45. package/bin/retailOrg/dtos/responses/LookupRetailUserWalletResponse.js +2 -0
  46. package/bin/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.d.ts +8 -0
  47. package/bin/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.js +2 -0
  48. package/bin/retailOrg/enums/RetailUserWalletLinkMethodEnum.d.ts +11 -0
  49. package/bin/retailOrg/enums/RetailUserWalletLinkMethodEnum.js +15 -0
  50. package/bin/retailOrg/index.d.ts +6 -0
  51. package/bin/retailOrg/index.js +7 -0
  52. package/bin/retailOrg/validators/IsSingleWalletKeyConstraint.d.ts +6 -0
  53. package/bin/retailOrg/validators/IsSingleWalletKeyConstraint.js +24 -0
  54. package/bin/retailPromotions/dtos/responses/WizardSalePromotionResponses.d.ts +4 -1
  55. package/bin/retailWizard/dtos/SaleLine.d.ts +2 -1
  56. package/bin/retailWizard/dtos/WizardGiftLine.d.ts +1 -1
  57. package/bin/retailWizard/dtos/WizardLinePromotionFields.d.ts +1 -1
  58. package/bin/retailWizard/dtos/WizardReservedLine.d.ts +2 -1
  59. package/bin/retailWizard/events/SaleCompletedV1.d.ts +1 -1
  60. package/bin/retailWizard/events/SaleCompletedV2.d.ts +1 -1
  61. package/package.json +1 -1
  62. package/src/retailCatalog/dtos/Product.ts +2 -1
  63. package/src/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.ts +1 -0
  64. package/src/retailCatalog/dtos/requests/CreateProductRequest.ts +1 -0
  65. package/src/retailCatalog/dtos/requests/SyncInventoryRequest.ts +1 -0
  66. package/src/retailCatalog/dtos/requests/UpdateProductRequest.ts +1 -0
  67. package/src/retailCatalog/dtos/responses/InventoryLensResponse.ts +1 -1
  68. package/src/retailCatalog/dtos/responses/ReserveStockResponse.ts +4 -1
  69. package/src/retailCatalog/dtos/responses/SkuPriceEntry.ts +2 -1
  70. package/src/retailCatalog/dtos/responses/StoreCatalogItem.ts +1 -1
  71. package/src/retailCommission/dtos/CommissionApi.ts +97 -1
  72. package/src/retailCommission/dtos/CommissionLedger.ts +101 -0
  73. package/src/retailCommission/dtos/CommissionRule.ts +15 -1
  74. package/src/retailCommission/enums/CommissionBillingPeriodEnum.ts +10 -0
  75. package/src/retailCommission/enums/CommissionLedgerMovementKindEnum.ts +14 -0
  76. package/src/retailCommission/enums/CommissionPayTimingEnum.ts +13 -0
  77. package/src/retailCommission/enums/CommissionPayTriggerEnum.ts +18 -0
  78. package/src/retailCommission/enums/CommissionPaymentAttentionEnum.ts +14 -0
  79. package/src/retailCommission/enums/CommissionPaymentStatusEnum.ts +14 -0
  80. package/src/retailCommission/index.ts +7 -0
  81. package/src/retailOrg/dtos/RetailUser.ts +39 -0
  82. package/src/retailOrg/dtos/requests/LinkRetailUserWalletRequest.ts +24 -0
  83. package/src/retailOrg/dtos/requests/LookupRetailUserWalletRequest.ts +24 -0
  84. package/src/retailOrg/dtos/responses/LookupRetailUserWalletResponse.ts +11 -0
  85. package/src/retailOrg/dtos/responses/PrivateRetailUserWalletResponse.ts +8 -0
  86. package/src/retailOrg/enums/RetailUserWalletLinkMethodEnum.ts +11 -0
  87. package/src/retailOrg/index.ts +8 -0
  88. package/src/retailOrg/validators/IsSingleWalletKeyConstraint.ts +18 -0
  89. package/src/retailPromotions/dtos/responses/WizardSalePromotionResponses.ts +4 -1
  90. package/src/retailWizard/dtos/SaleLine.ts +2 -1
  91. package/src/retailWizard/dtos/WizardGiftLine.ts +1 -1
  92. package/src/retailWizard/dtos/WizardLinePromotionFields.ts +1 -1
  93. package/src/retailWizard/dtos/WizardReservedLine.ts +2 -1
  94. package/src/retailWizard/events/SaleCompletedV1.ts +1 -1
  95. 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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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 = {}));
@@ -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';
@@ -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
- listPriceCents: number;
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
- listPriceCents: number | null;
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 precio de lista que se regala. */
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, el valor de lista con la línea a $0. */
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
- listPriceCents: number | null;
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 de lista del equipo; en contado coincide con `amountCents`. Sin equipo se omite. */
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 de lista del equipo — la base de comisión. `null` en ventas sin el dato. */
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.550.0",
3
+ "version": "3.552.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -28,7 +28,8 @@ export class Product {
28
28
  /** `null` = Sin gama. */
29
29
  tier!: ProductTierEnum | null;
30
30
  basePriceCents!: number;
31
- listPriceCents!: number | null;
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;
@@ -6,6 +6,7 @@ export class BackofficeCreateSkuPriceRequest {
6
6
  @Min(0)
7
7
  basePriceCents!: number;
8
8
 
9
+ /** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
9
10
  @IsOptional()
10
11
  @IsInt()
11
12
  @Min(0)
@@ -61,6 +61,7 @@ export class CreateProductRequest {
61
61
  @Min(0)
62
62
  basePriceCents!: number;
63
63
 
64
+ /** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
64
65
  @IsOptional()
65
66
  @IsInt()
66
67
  @Min(0)
@@ -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)
@@ -60,6 +60,7 @@ export class UpdateProductRequest {
60
60
  @Min(0)
61
61
  basePriceCents?: number;
62
62
 
63
+ /** @deprecated Ya no se usa; el único precio es `basePriceCents`. */
63
64
  @IsOptional()
64
65
  @IsInt()
65
66
  @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 (`listPriceCents`, o `basePriceCents` si no hay lista). */
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
- listPriceCents: number | null;
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
- listPriceCents: number | null;
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
- /** Precio de lista de respaldo para un regalo: el precio vigente o, si no hay, product.basePriceCents. */
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 dos políticas se guardan juntas. */
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
+ }