@fiado/type-kit 3.494.0 → 3.496.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 (205) hide show
  1. package/_test_/unit/loanCredit/dtos/createSellerPaymentRequest.test.ts +63 -0
  2. package/_test_/unit/loanCredit/dtos/originateLoanCreditRequest.test.ts +56 -0
  3. package/_test_/unit/loanCredit/inStorePaymentDtos.test.ts +141 -0
  4. package/_test_/unit/loanCredit/sellerCreditDtos.test.ts +119 -0
  5. package/_test_/unit/retailIntegration/applyRetailEventRequest.test.ts +43 -0
  6. package/_test_/unit/retailIntegration/isIsoDateTimeWithZone.test.ts +85 -0
  7. package/_test_/unit/retailIntegration/receiveRetailEventRequest.test.ts +93 -0
  8. package/_test_/unit/retailIntegration/retailOutboundRequests.test.ts +69 -0
  9. package/_test_/unit/retailIntegration/retailSystemEnums.test.ts +42 -0
  10. package/bin/index.d.ts +1 -0
  11. package/bin/index.js +3 -1
  12. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.d.ts +15 -0
  13. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.js +56 -0
  14. package/bin/loanCredit/dtos/requests/InStorePaymentDetail.d.ts +12 -0
  15. package/bin/loanCredit/dtos/requests/InStorePaymentDetail.js +40 -0
  16. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.d.ts +7 -3
  17. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.js +8 -1
  18. package/bin/loanCredit/dtos/responses/CreditCustomerListItem.d.ts +46 -0
  19. package/bin/loanCredit/dtos/responses/CreditCustomerListItem.js +2 -0
  20. package/bin/loanCredit/dtos/responses/CreditSaleContext.d.ts +2 -0
  21. package/bin/loanCredit/dtos/responses/InStorePaymentListItem.d.ts +19 -0
  22. package/bin/loanCredit/dtos/responses/InStorePaymentListItem.js +2 -0
  23. package/bin/loanCredit/dtos/responses/LoanPaymentListItem.d.ts +14 -1
  24. package/bin/loanCredit/dtos/responses/SellerCreditDetailResponse.d.ts +10 -0
  25. package/bin/loanCredit/dtos/responses/SellerCreditDetailResponse.js +2 -0
  26. package/bin/loanCredit/dtos/responses/SellerCreditListResponse.d.ts +7 -0
  27. package/bin/loanCredit/dtos/responses/SellerCreditListResponse.js +2 -0
  28. package/bin/loanCredit/dtos/responses/SellerCreditLookupResult.d.ts +10 -0
  29. package/bin/loanCredit/dtos/responses/SellerCreditLookupResult.js +2 -0
  30. package/bin/loanCredit/dtos/responses/SellerCreditRow.d.ts +25 -0
  31. package/bin/loanCredit/dtos/responses/SellerCreditRow.js +2 -0
  32. package/bin/loanCredit/dtos/responses/SellerPaymentOptions.d.ts +36 -0
  33. package/bin/loanCredit/dtos/responses/SellerPaymentOptions.js +2 -0
  34. package/bin/loanCredit/dtos/responses/SellerPaymentResult.d.ts +39 -0
  35. package/bin/loanCredit/dtos/responses/SellerPaymentResult.js +2 -0
  36. package/bin/loanCredit/enums/CreditCustomerStateEnum.d.ts +6 -0
  37. package/bin/loanCredit/enums/CreditCustomerStateEnum.js +10 -0
  38. package/bin/loanCredit/enums/InStorePaymentMethodEnum.d.ts +6 -0
  39. package/bin/loanCredit/enums/InStorePaymentMethodEnum.js +10 -0
  40. package/bin/loanCredit/enums/LoanPaymentOriginEnum.d.ts +5 -0
  41. package/bin/loanCredit/enums/LoanPaymentOriginEnum.js +9 -0
  42. package/bin/loanCredit/index.d.ts +13 -0
  43. package/bin/loanCredit/index.js +15 -0
  44. package/bin/retailIntegration/constants/retailIntegrationLimits.d.ts +7 -0
  45. package/bin/retailIntegration/constants/retailIntegrationLimits.js +10 -0
  46. package/bin/retailIntegration/dtos/ApplyRetailEventRequest.d.ts +29 -0
  47. package/bin/retailIntegration/dtos/ApplyRetailEventRequest.js +54 -0
  48. package/bin/retailIntegration/dtos/GetRetailInventoryRequest.d.ts +5 -0
  49. package/bin/retailIntegration/dtos/GetRetailInventoryRequest.js +23 -0
  50. package/bin/retailIntegration/dtos/ListRetailCatalogRequest.d.ts +4 -0
  51. package/bin/retailIntegration/dtos/ListRetailCatalogRequest.js +8 -0
  52. package/bin/retailIntegration/dtos/ListRetailStoresRequest.d.ts +4 -0
  53. package/bin/retailIntegration/dtos/ListRetailStoresRequest.js +8 -0
  54. package/bin/retailIntegration/dtos/ListRetailUsersRequest.d.ts +5 -0
  55. package/bin/retailIntegration/dtos/ListRetailUsersRequest.js +24 -0
  56. package/bin/retailIntegration/dtos/ReceiveInventoryEventRequest.d.ts +6 -0
  57. package/bin/retailIntegration/dtos/ReceiveInventoryEventRequest.js +23 -0
  58. package/bin/retailIntegration/dtos/ReceiveProductEventRequest.d.ts +6 -0
  59. package/bin/retailIntegration/dtos/ReceiveProductEventRequest.js +23 -0
  60. package/bin/retailIntegration/dtos/ReceiveRetailEventRequest.d.ts +12 -0
  61. package/bin/retailIntegration/dtos/ReceiveRetailEventRequest.js +2 -0
  62. package/bin/retailIntegration/dtos/ReceiveRetailUserEventRequest.d.ts +6 -0
  63. package/bin/retailIntegration/dtos/ReceiveRetailUserEventRequest.js +23 -0
  64. package/bin/retailIntegration/dtos/ReceiveStoreEventRequest.d.ts +6 -0
  65. package/bin/retailIntegration/dtos/ReceiveStoreEventRequest.js +23 -0
  66. package/bin/retailIntegration/dtos/RegisterRetailSaleRequest.d.ts +4 -0
  67. package/bin/retailIntegration/dtos/RegisterRetailSaleRequest.js +8 -0
  68. package/bin/retailIntegration/dtos/RetailEventEnvelope.d.ts +8 -0
  69. package/bin/retailIntegration/dtos/RetailEventEnvelope.js +33 -0
  70. package/bin/retailIntegration/dtos/RetailEventResult.d.ts +12 -0
  71. package/bin/retailIntegration/dtos/RetailEventResult.js +2 -0
  72. package/bin/retailIntegration/dtos/RetailOutboundResponses.d.ts +30 -0
  73. package/bin/retailIntegration/dtos/RetailOutboundResponses.js +2 -0
  74. package/bin/retailIntegration/dtos/RetailPagedQuery.d.ts +6 -0
  75. package/bin/retailIntegration/dtos/RetailPagedQuery.js +34 -0
  76. package/bin/retailIntegration/dtos/RetailTenantQuery.d.ts +4 -0
  77. package/bin/retailIntegration/dtos/RetailTenantQuery.js +23 -0
  78. package/bin/retailIntegration/enums/InventoryEventTypeEnum.d.ts +4 -0
  79. package/bin/retailIntegration/enums/InventoryEventTypeEnum.js +8 -0
  80. package/bin/retailIntegration/enums/ProductEventTypeEnum.d.ts +6 -0
  81. package/bin/retailIntegration/enums/ProductEventTypeEnum.js +10 -0
  82. package/bin/retailIntegration/enums/RetailCurrencyEnum.d.ts +5 -0
  83. package/bin/retailIntegration/enums/RetailCurrencyEnum.js +9 -0
  84. package/bin/retailIntegration/enums/RetailEventResultEnum.d.ts +6 -0
  85. package/bin/retailIntegration/enums/RetailEventResultEnum.js +10 -0
  86. package/bin/retailIntegration/enums/RetailFinancierEnum.d.ts +8 -0
  87. package/bin/retailIntegration/enums/RetailFinancierEnum.js +12 -0
  88. package/bin/retailIntegration/enums/RetailLinePaymentTypeEnum.d.ts +5 -0
  89. package/bin/retailIntegration/enums/RetailLinePaymentTypeEnum.js +9 -0
  90. package/bin/retailIntegration/enums/RetailMdmProviderEnum.d.ts +5 -0
  91. package/bin/retailIntegration/enums/RetailMdmProviderEnum.js +9 -0
  92. package/bin/retailIntegration/enums/RetailPaymentMethodEnum.d.ts +6 -0
  93. package/bin/retailIntegration/enums/RetailPaymentMethodEnum.js +10 -0
  94. package/bin/retailIntegration/enums/RetailPieceReasonEnum.d.ts +6 -0
  95. package/bin/retailIntegration/enums/RetailPieceReasonEnum.js +10 -0
  96. package/bin/retailIntegration/enums/RetailPieceStatusEnum.d.ts +7 -0
  97. package/bin/retailIntegration/enums/RetailPieceStatusEnum.js +11 -0
  98. package/bin/retailIntegration/enums/RetailProductCategoryEnum.d.ts +7 -0
  99. package/bin/retailIntegration/enums/RetailProductCategoryEnum.js +11 -0
  100. package/bin/retailIntegration/enums/RetailProductStatusEnum.d.ts +6 -0
  101. package/bin/retailIntegration/enums/RetailProductStatusEnum.js +10 -0
  102. package/bin/retailIntegration/enums/RetailProductTierEnum.d.ts +7 -0
  103. package/bin/retailIntegration/enums/RetailProductTierEnum.js +11 -0
  104. package/bin/retailIntegration/enums/RetailSaleFinancierEnum.d.ts +9 -0
  105. package/bin/retailIntegration/enums/RetailSaleFinancierEnum.js +13 -0
  106. package/bin/retailIntegration/enums/RetailSaleTypeEnum.d.ts +6 -0
  107. package/bin/retailIntegration/enums/RetailSaleTypeEnum.js +10 -0
  108. package/bin/retailIntegration/enums/RetailStoreStatusEnum.d.ts +6 -0
  109. package/bin/retailIntegration/enums/RetailStoreStatusEnum.js +10 -0
  110. package/bin/retailIntegration/enums/RetailTrackingModeEnum.d.ts +6 -0
  111. package/bin/retailIntegration/enums/RetailTrackingModeEnum.js +10 -0
  112. package/bin/retailIntegration/enums/RetailUserAccessStatusEnum.d.ts +6 -0
  113. package/bin/retailIntegration/enums/RetailUserAccessStatusEnum.js +10 -0
  114. package/bin/retailIntegration/enums/RetailUserEventTypeEnum.d.ts +7 -0
  115. package/bin/retailIntegration/enums/RetailUserEventTypeEnum.js +11 -0
  116. package/bin/retailIntegration/enums/RetailUserRoleEnum.d.ts +7 -0
  117. package/bin/retailIntegration/enums/RetailUserRoleEnum.js +11 -0
  118. package/bin/retailIntegration/enums/StoreEventTypeEnum.d.ts +6 -0
  119. package/bin/retailIntegration/enums/StoreEventTypeEnum.js +10 -0
  120. package/bin/retailIntegration/enums/index.d.ts +21 -0
  121. package/bin/retailIntegration/enums/index.js +37 -0
  122. package/bin/retailIntegration/index.d.ts +25 -0
  123. package/bin/retailIntegration/index.js +41 -0
  124. package/bin/retailIntegration/models/RetailPageMeta.d.ts +10 -0
  125. package/bin/retailIntegration/models/RetailPageMeta.js +2 -0
  126. package/bin/retailIntegration/models/RetailSystemInventory.d.ts +17 -0
  127. package/bin/retailIntegration/models/RetailSystemInventory.js +2 -0
  128. package/bin/retailIntegration/models/RetailSystemProduct.d.ts +32 -0
  129. package/bin/retailIntegration/models/RetailSystemProduct.js +2 -0
  130. package/bin/retailIntegration/models/RetailSystemSale.d.ts +46 -0
  131. package/bin/retailIntegration/models/RetailSystemSale.js +2 -0
  132. package/bin/retailIntegration/models/RetailSystemStore.d.ts +29 -0
  133. package/bin/retailIntegration/models/RetailSystemStore.js +2 -0
  134. package/bin/retailIntegration/models/RetailSystemUser.d.ts +14 -0
  135. package/bin/retailIntegration/models/RetailSystemUser.js +2 -0
  136. package/bin/retailIntegration/validators/IsIsoDateTimeWithZone.d.ts +6 -0
  137. package/bin/retailIntegration/validators/IsIsoDateTimeWithZone.js +29 -0
  138. package/bin/retailWizard/dtos/WizardSessionLookupEntry.d.ts +2 -0
  139. package/package.json +1 -1
  140. package/src/index.ts +2 -0
  141. package/src/loanCredit/dtos/requests/CreateSellerPaymentRequest.ts +40 -0
  142. package/src/loanCredit/dtos/requests/InStorePaymentDetail.ts +27 -0
  143. package/src/loanCredit/dtos/requests/OriginateLoanCreditRequest.ts +12 -3
  144. package/src/loanCredit/dtos/responses/CreditCustomerListItem.ts +51 -0
  145. package/src/loanCredit/dtos/responses/CreditSaleContext.ts +2 -0
  146. package/src/loanCredit/dtos/responses/InStorePaymentListItem.ts +21 -0
  147. package/src/loanCredit/dtos/responses/LoanPaymentListItem.ts +11 -1
  148. package/src/loanCredit/dtos/responses/SellerCreditDetailResponse.ts +11 -0
  149. package/src/loanCredit/dtos/responses/SellerCreditListResponse.ts +8 -0
  150. package/src/loanCredit/dtos/responses/SellerCreditLookupResult.ts +11 -0
  151. package/src/loanCredit/dtos/responses/SellerCreditRow.ts +26 -0
  152. package/src/loanCredit/dtos/responses/SellerPaymentOptions.ts +29 -0
  153. package/src/loanCredit/dtos/responses/SellerPaymentResult.ts +43 -0
  154. package/src/loanCredit/enums/CreditCustomerStateEnum.ts +6 -0
  155. package/src/loanCredit/enums/InStorePaymentMethodEnum.ts +6 -0
  156. package/src/loanCredit/enums/LoanPaymentOriginEnum.ts +5 -0
  157. package/src/loanCredit/index.ts +16 -0
  158. package/src/retailIntegration/constants/retailIntegrationLimits.ts +9 -0
  159. package/src/retailIntegration/dtos/ApplyRetailEventRequest.ts +49 -0
  160. package/src/retailIntegration/dtos/GetRetailInventoryRequest.ts +9 -0
  161. package/src/retailIntegration/dtos/ListRetailCatalogRequest.ts +4 -0
  162. package/src/retailIntegration/dtos/ListRetailStoresRequest.ts +4 -0
  163. package/src/retailIntegration/dtos/ListRetailUsersRequest.ts +10 -0
  164. package/src/retailIntegration/dtos/ReceiveInventoryEventRequest.ts +9 -0
  165. package/src/retailIntegration/dtos/ReceiveProductEventRequest.ts +9 -0
  166. package/src/retailIntegration/dtos/ReceiveRetailEventRequest.ts +18 -0
  167. package/src/retailIntegration/dtos/ReceiveRetailUserEventRequest.ts +9 -0
  168. package/src/retailIntegration/dtos/ReceiveStoreEventRequest.ts +9 -0
  169. package/src/retailIntegration/dtos/RegisterRetailSaleRequest.ts +4 -0
  170. package/src/retailIntegration/dtos/RetailEventEnvelope.ts +20 -0
  171. package/src/retailIntegration/dtos/RetailEventResult.ts +14 -0
  172. package/src/retailIntegration/dtos/RetailOutboundResponses.ts +35 -0
  173. package/src/retailIntegration/dtos/RetailPagedQuery.ts +19 -0
  174. package/src/retailIntegration/dtos/RetailTenantQuery.ts +9 -0
  175. package/src/retailIntegration/enums/InventoryEventTypeEnum.ts +4 -0
  176. package/src/retailIntegration/enums/ProductEventTypeEnum.ts +6 -0
  177. package/src/retailIntegration/enums/RetailCurrencyEnum.ts +5 -0
  178. package/src/retailIntegration/enums/RetailEventResultEnum.ts +6 -0
  179. package/src/retailIntegration/enums/RetailFinancierEnum.ts +8 -0
  180. package/src/retailIntegration/enums/RetailLinePaymentTypeEnum.ts +5 -0
  181. package/src/retailIntegration/enums/RetailMdmProviderEnum.ts +5 -0
  182. package/src/retailIntegration/enums/RetailPaymentMethodEnum.ts +6 -0
  183. package/src/retailIntegration/enums/RetailPieceReasonEnum.ts +6 -0
  184. package/src/retailIntegration/enums/RetailPieceStatusEnum.ts +7 -0
  185. package/src/retailIntegration/enums/RetailProductCategoryEnum.ts +7 -0
  186. package/src/retailIntegration/enums/RetailProductStatusEnum.ts +6 -0
  187. package/src/retailIntegration/enums/RetailProductTierEnum.ts +7 -0
  188. package/src/retailIntegration/enums/RetailSaleFinancierEnum.ts +9 -0
  189. package/src/retailIntegration/enums/RetailSaleTypeEnum.ts +6 -0
  190. package/src/retailIntegration/enums/RetailStoreStatusEnum.ts +6 -0
  191. package/src/retailIntegration/enums/RetailTrackingModeEnum.ts +6 -0
  192. package/src/retailIntegration/enums/RetailUserAccessStatusEnum.ts +6 -0
  193. package/src/retailIntegration/enums/RetailUserEventTypeEnum.ts +7 -0
  194. package/src/retailIntegration/enums/RetailUserRoleEnum.ts +7 -0
  195. package/src/retailIntegration/enums/StoreEventTypeEnum.ts +6 -0
  196. package/src/retailIntegration/enums/index.ts +21 -0
  197. package/src/retailIntegration/index.ts +25 -0
  198. package/src/retailIntegration/models/RetailPageMeta.ts +11 -0
  199. package/src/retailIntegration/models/RetailSystemInventory.ts +20 -0
  200. package/src/retailIntegration/models/RetailSystemProduct.ts +43 -0
  201. package/src/retailIntegration/models/RetailSystemSale.ts +51 -0
  202. package/src/retailIntegration/models/RetailSystemStore.ts +33 -0
  203. package/src/retailIntegration/models/RetailSystemUser.ts +16 -0
  204. package/src/retailIntegration/validators/IsIsoDateTimeWithZone.ts +21 -0
  205. package/src/retailWizard/dtos/WizardSessionLookupEntry.ts +2 -0
@@ -0,0 +1,14 @@
1
+ import { RetailUserAccessStatusEnum, RetailUserRoleEnum } from '../enums';
2
+ export type RetailUserRole = `${RetailUserRoleEnum}`;
3
+ export type RetailUserAccessStatus = `${RetailUserAccessStatusEnum}`;
4
+ /** Usuario de la operación del retailer, tal como lo define la doc de integración. */
5
+ export interface RetailSystemUser {
6
+ retailUserId: string;
7
+ displayName: string;
8
+ email: string;
9
+ phone: string | null;
10
+ homeStoreId: string;
11
+ zoneId: string | null;
12
+ role: RetailUserRole;
13
+ status: RetailUserAccessStatus;
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { ValidatorConstraintInterface } from 'class-validator';
2
+ /** Acepta fecha y hora ISO-8601 con segundos y zona; sin zona se rechaza, como dice la doc. */
3
+ export declare class IsIsoDateTimeWithZone implements ValidatorConstraintInterface {
4
+ validate(value: unknown): boolean;
5
+ defaultMessage(): string;
6
+ }
@@ -0,0 +1,29 @@
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.IsIsoDateTimeWithZone = void 0;
10
+ const class_validator_1 = require("class-validator");
11
+ const ISO_DATE_TIME_WITH_ZONE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$/;
12
+ /** Descarta fechas que `Date` recorre en silencio, como el 31 de febrero. */
13
+ function isRealCalendarDate(value) {
14
+ const [year, month, day] = value.slice(0, 10).split('-').map(Number);
15
+ return !Number.isNaN(Date.parse(value)) && new Date(Date.UTC(year, month - 1, day)).getUTCDate() === day;
16
+ }
17
+ /** Acepta fecha y hora ISO-8601 con segundos y zona; sin zona se rechaza, como dice la doc. */
18
+ let IsIsoDateTimeWithZone = class IsIsoDateTimeWithZone {
19
+ validate(value) {
20
+ return typeof value === 'string' && ISO_DATE_TIME_WITH_ZONE.test(value) && isRealCalendarDate(value);
21
+ }
22
+ defaultMessage() {
23
+ return 'debe ser fecha y hora ISO-8601 con zona, por ejemplo 2026-08-17T20:32:05Z';
24
+ }
25
+ };
26
+ exports.IsIsoDateTimeWithZone = IsIsoDateTimeWithZone;
27
+ exports.IsIsoDateTimeWithZone = IsIsoDateTimeWithZone = __decorate([
28
+ (0, class_validator_1.ValidatorConstraint)({ name: 'isIsoDateTimeWithZone', async: false })
29
+ ], IsIsoDateTimeWithZone);
@@ -24,4 +24,6 @@ export interface WizardSessionLookupEntry {
24
24
  /** La venta que cerro esta sesion; `null` si todavia no cerro. */
25
25
  saleId?: string | null;
26
26
  folio?: string | null;
27
+ /** Vendedor de la sesión (`retailUserId` de retail-org). `null` si la sesión no lo tiene. */
28
+ sellerRetailUserId?: string | null;
27
29
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.494.0",
3
+ "version": "3.496.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
package/src/index.ts CHANGED
@@ -125,6 +125,8 @@ export * as RetailWizard from './retailWizard';
125
125
  // RetailPromotions: DTOs/enums de retail-promotions-business (promos de venta, códigos de descuento y
126
126
  // cupones de VentasLuga). Porcentajes en puntos base, dinero en centavos.
127
127
  export * as RetailPromotions from './retailPromotions';
128
+ // RetailIntegration: DTOs del retail-integration-connector (webhooks del retailer y salida hacia su sistema).
129
+ export * as RetailIntegration from './retailIntegration';
128
130
  export * as DatalakeQuery from './datalakeQuery';
129
131
  // LoanConfig: DTOs/enums del lambda loan-config-business (comp 09 — parámetros operativos del SOFOM).
130
132
  export * as LoanConfig from './loanConfig';
@@ -0,0 +1,40 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsEnum, IsInt, IsOptional, IsUUID, Min, ValidateNested } from 'class-validator';
3
+ import { InStorePaymentMethodEnum } from '../../enums/InStorePaymentMethodEnum';
4
+ import { LoanCustomerPaymentTypeEnum } from '../../enums/LoanCustomerPaymentTypeEnum';
5
+ import { InStorePaymentDetail } from './InStorePaymentDetail';
6
+
7
+ /** Body de `POST /seller/credits/{creditId}/payments`: el vendedor anota un pago recibido en tienda. */
8
+ export class CreateSellerPaymentRequest {
9
+ @Expose()
10
+ @IsEnum(LoanCustomerPaymentTypeEnum)
11
+ type!: LoanCustomerPaymentTypeEnum;
12
+
13
+ /** El monto que vio el vendedor en las opciones; distinto al de hoy → 409 CUSTOMER_PAYMENT_AMOUNT_CHANGED. */
14
+ @Expose()
15
+ @IsInt()
16
+ @Min(1)
17
+ expectedAmountCents!: number;
18
+
19
+ /** Solo ADVANCE: cuántas cuotas adelanta. */
20
+ @Expose()
21
+ @IsOptional()
22
+ @IsInt()
23
+ @Min(2)
24
+ installmentCount?: number;
25
+
26
+ @Expose()
27
+ @IsEnum(InStorePaymentMethodEnum)
28
+ method!: InStorePaymentMethodEnum;
29
+
30
+ /** Tarjeta: `cardLast4` + `authCode`; SPEI: `speiTrackingKey`; efectivo: sin detalle. */
31
+ @Expose()
32
+ @IsOptional()
33
+ @ValidateNested()
34
+ @Type(() => InStorePaymentDetail)
35
+ detail?: InStorePaymentDetail;
36
+
37
+ @Expose()
38
+ @IsUUID()
39
+ idempotencyKey!: string;
40
+ }
@@ -0,0 +1,27 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString, Length, Matches, ValidateIf } from 'class-validator';
3
+
4
+ /**
5
+ * Dato de la forma de pago anotada en tienda; solo valida la forma, nunca lleva CLABE.
6
+ * Qué campo exige cada método lo decide loan-credit (400 INVALID_PAYMENT_DETAIL).
7
+ */
8
+ export class InStorePaymentDetail {
9
+ /** Tarjeta: últimos 4 dígitos. */
10
+ @Expose()
11
+ @ValidateIf((detail: InStorePaymentDetail) => detail.cardLast4 !== undefined)
12
+ @Matches(/^\d{4}$/)
13
+ cardLast4?: string;
14
+
15
+ /** Tarjeta: número de autorización del voucher. */
16
+ @Expose()
17
+ @ValidateIf((detail: InStorePaymentDetail) => detail.authCode !== undefined)
18
+ @Matches(/^[A-Za-z0-9]{1,12}$/)
19
+ authCode?: string;
20
+
21
+ /** SPEI: clave de rastreo. */
22
+ @Expose()
23
+ @ValidateIf((detail: InStorePaymentDetail) => detail.speiTrackingKey !== undefined)
24
+ @IsString()
25
+ @Length(1, 30)
26
+ speiTrackingKey?: string;
27
+ }
@@ -84,13 +84,22 @@ export class OriginateLoanCreditRequest {
84
84
 
85
85
  /**
86
86
  * Tienda donde se vende. El motor la persiste y la reenvía al simulador del catálogo en cada
87
- * cotización — al RE-cotizar el wizard no la vuelve a mandar, así que sin guardarla la venta
88
- * perdería su promoción a mitad del paso 06.
87
+ * cotización. Obligatoria: sin ella el crédito no tiene tienda en su cartera.
88
+ */
89
+ @Expose()
90
+ @IsString()
91
+ @IsNotEmpty()
92
+ storeId!: string;
93
+
94
+ /**
95
+ * Vendedor que origina: el `retailUserId` de retail-org que la sesión del wizard guarda como
96
+ * `sellerRetailUserId`. Llave de la cartera del vendedor en loan-credit.
89
97
  */
90
98
  @Expose()
91
99
  @IsOptional()
92
100
  @IsString()
93
- storeId?: string;
101
+ @IsNotEmpty()
102
+ sellerId?: string;
94
103
 
95
104
  /** SKU del equipo, por el mismo motivo que `storeId`: resuelve promociones acotadas por producto. */
96
105
  @Expose()
@@ -0,0 +1,51 @@
1
+ import type { PaginatedResult } from '../../../retailOrg';
2
+ import type { CreditCustomerStateEnum } from '../../enums/CreditCustomerStateEnum';
3
+ import type { LoanPaymentOriginEnum } from '../../enums/LoanPaymentOriginEnum';
4
+
5
+ /** Segmento del catálogo al que pertenece el cliente. */
6
+ export interface CreditCustomerSegment {
7
+ segmentId: string;
8
+ name: string;
9
+ }
10
+
11
+ /** Último pago que entró al crédito: cuándo y por dónde. */
12
+ export interface CreditLastPayment {
13
+ at: string;
14
+ origin: LoanPaymentOriginEnum;
15
+ storeId?: string;
16
+ storeName?: string;
17
+ }
18
+
19
+ /** Bloque de crédito de la fila de Clientes; sin lectura todo va en null. */
20
+ export interface CreditCustomerCredit {
21
+ state: CreditCustomerStateEnum;
22
+ clientLevel: string | null;
23
+ sciScore: number | null;
24
+ /** Si el SCI es el vivo del acreditado o el congelado al originar. */
25
+ sciSource: string | null;
26
+ creditsCount: number | null;
27
+ activeCreditsCount: number | null;
28
+ settledCreditsCount: number | null;
29
+ writtenOffCreditsCount: number | null;
30
+ outstandingBalanceCents: number | null;
31
+ arrearsDays: number | null;
32
+ lastPaymentAt: string | null;
33
+ /** Ausente en créditos sin pago desde que existe el campo: el front cae a `lastPaymentAt`. */
34
+ lastPayment?: CreditLastPayment;
35
+ /** Crédito vigente; si hubiera más de uno vivo, el más reciente. */
36
+ activeCreditId: string | null;
37
+ }
38
+
39
+ /** Fila de la tabla Clientes del backoffice. */
40
+ export interface CreditCustomerListItem {
41
+ retailCustomerId: string;
42
+ fullName: string | null;
43
+ phone: string | null;
44
+ originStoreId: string | null;
45
+ segments: CreditCustomerSegment[];
46
+ /** `false` = la consulta de segmentos falló: la celda dice «sin leer», no «ninguno». */
47
+ segmentsRead: boolean;
48
+ credit: CreditCustomerCredit;
49
+ }
50
+
51
+ export type CreditCustomerPage = PaginatedResult<CreditCustomerListItem>;
@@ -41,4 +41,6 @@ export interface CreditSaleContext {
41
41
  storeName: string | null;
42
42
  storeNameStatus: WizardSessionLookupStatusEnum;
43
43
  storeNameReason?: SaleContextReason;
44
+ /** Venta que cerró la sesión. `null` si no cerró; ausente si el lote al wizard no respondió. */
45
+ saleId?: string | null;
44
46
  }
@@ -0,0 +1,21 @@
1
+ import type { InStorePaymentMethodEnum } from '../../enums/InStorePaymentMethodEnum';
2
+ import type { LoanChargeKindEnum } from '../../enums/LoanChargeKindEnum';
3
+ import type { NamedRef } from './SellerPaymentResult';
4
+
5
+ /** Un cobro en tienda en la conciliación de la cadena. */
6
+ export interface InStorePaymentListItem {
7
+ receipt: string;
8
+ creditId: string;
9
+ paymentId: string;
10
+ chargeKind: LoanChargeKindEnum;
11
+ amountCents: number;
12
+ method: InStorePaymentMethodEnum;
13
+ collectedBySeller: NamedRef;
14
+ appliedAt: string;
15
+ }
16
+
17
+ /** `GET /seller/stores/{storeId}/in-store-payments`; `nextToken` ausente = última página. */
18
+ export interface InStorePaymentListResponse {
19
+ items: InStorePaymentListItem[];
20
+ nextToken?: string;
21
+ }
@@ -1,7 +1,10 @@
1
1
  import { CollectionResultStatus } from '../../../collection/enums/CollectionResultStatus';
2
2
  import { MechanismType } from '../../../collection/enums/MechanismType';
3
3
  import { CurrencyId } from '../../../currency/enums/CurrencyId';
4
+ import type { InStorePaymentMethodEnum } from '../../enums/InStorePaymentMethodEnum';
4
5
  import { LoanChargeKindEnum } from '../../enums/LoanChargeKindEnum';
6
+ import type { LoanPaymentOriginEnum } from '../../enums/LoanPaymentOriginEnum';
7
+ import type { NamedRef } from './SellerPaymentResult';
5
8
 
6
9
  /** Un pago del historial de un crédito, tal como lo asentó el motor de cobro en `LoanPayment_GT`. */
7
10
  export interface LoanPaymentListItem {
@@ -10,7 +13,8 @@ export interface LoanPaymentListItem {
10
13
  receipt: string;
11
14
  installmentNumber: number;
12
15
  attemptId: string;
13
- mechanism: MechanismType;
16
+ /** Ausente en los pagos en tienda: ahí no hubo motor. */
17
+ mechanism?: MechanismType;
14
18
  result: CollectionResultStatus;
15
19
  currency: CurrencyId;
16
20
  collectedCents: number;
@@ -30,6 +34,12 @@ export interface LoanPaymentListItem {
30
34
  chargeKind?: LoanChargeKindEnum;
31
35
  /** Saldo de capital del crédito después de este pago. Ausente en pagos viejos. */
32
36
  creditPrincipalBalanceAfterCents?: number;
37
+ /** Ausente en filas viejas = COLLECTION_ENGINE. */
38
+ origin?: LoanPaymentOriginEnum;
39
+ inStoreMethod?: InStorePaymentMethodEnum;
40
+ /** Tienda y vendedor con el nombre congelado al cobrar; el cliente nunca recibe `collectedBySeller.id`. */
41
+ collectedAtStore?: NamedRef;
42
+ collectedBySeller?: { id?: string; name: string | null };
33
43
  }
34
44
 
35
45
  /** Página del historial. El fin lo marca la AUSENCIA de `nextToken`, nunca una página corta. */
@@ -0,0 +1,11 @@
1
+ import { LoanCreditDetail } from './LoanCreditDetail';
2
+ import { LoanInstallmentResponse } from './LoanInstallmentResponse';
3
+ import { LoanPaymentListItem } from './LoanPaymentListItem';
4
+
5
+ /** Detalle de un crédito propio del vendedor (`GET /seller/credits/{creditId}`): crédito, plan y últimos cobros. */
6
+ export interface SellerCreditDetailResponse {
7
+ credit: LoanCreditDetail;
8
+ installments: LoanInstallmentResponse[];
9
+ /** Los últimos cobros asentados, del más reciente al más viejo (máximo 3). */
10
+ recentPayments: LoanPaymentListItem[];
11
+ }
@@ -0,0 +1,8 @@
1
+ import { SellerCreditRow } from './SellerCreditRow';
2
+
3
+ /** La cartera viva COMPLETA del vendedor, sin paginar. `truncated` = se alcanzó el tope de lectura. */
4
+ export interface SellerCreditListResponse {
5
+ items: SellerCreditRow[];
6
+ count: number;
7
+ truncated: boolean;
8
+ }
@@ -0,0 +1,11 @@
1
+ import type { SellerNextInstallment } from './SellerPaymentResult';
2
+
3
+ /** Respuesta de `GET /seller/credits/lookup`: lo mínimo para confirmar que es el crédito correcto. */
4
+ export interface SellerCreditLookupResult {
5
+ creditId: string;
6
+ /** PII: nunca se loguea. */
7
+ customerName: string | null;
8
+ productBrand: string | null;
9
+ productModel: string | null;
10
+ nextInstallment: SellerNextInstallment | null;
11
+ }
@@ -0,0 +1,26 @@
1
+ import { LoanCreditStatusEnum } from '../../enums/LoanCreditStatusEnum';
2
+ import { ClientLevelEnum } from '../../../loanScoring/enums/ClientLevelEnum';
3
+ import { CreditSaleContext } from './CreditSaleContext';
4
+ import { LoanInstallmentResponse } from './LoanInstallmentResponse';
5
+
6
+ /**
7
+ * Una fila de la cartera del vendedor (`GET /seller/credits`, loan-credit-business). Montos en
8
+ * cents · instantes ISO-8601. Con `summaryUnavailable` las cifras del plan llegan en `null`, nunca en cero.
9
+ */
10
+ export interface SellerCreditRow {
11
+ creditId: string;
12
+ status: LoanCreditStatusEnum;
13
+ termWeeks: number;
14
+ equipmentPriceCents: number;
15
+ clientLevelAtOrigination?: ClientLevelEnum;
16
+ imei?: string;
17
+ createdAt: string;
18
+ summaryUnavailable: boolean;
19
+ paidInstallments: number | null;
20
+ outstandingBalanceCents: number | null;
21
+ overdueDays: number | null;
22
+ overdueAmountCents: number | null;
23
+ /** Primera cuota que todavía se debe; `null` si ya no debe nada o si el plan no se leyó. */
24
+ currentInstallment: LoanInstallmentResponse | null;
25
+ saleContext: CreditSaleContext;
26
+ }
@@ -0,0 +1,29 @@
1
+ import type { LoanPaymentOptionUnavailableReasonEnum } from '../../enums/LoanPaymentOptionUnavailableReasonEnum';
2
+ import type { SellerNextInstallment } from './SellerPaymentResult';
3
+
4
+ /** Una opción de cobro en tienda: disponible con su monto o rango, o no con su razón. */
5
+ export interface SellerPaymentOption {
6
+ available: boolean;
7
+ unavailableReason?: LoanPaymentOptionUnavailableReasonEnum;
8
+ amountCents?: number;
9
+ }
10
+
11
+ /** Resumen del crédito de la opción A del canvas. */
12
+ export interface SellerCreditPaymentSummary {
13
+ totalCents: number;
14
+ paidCents: number;
15
+ remainingCents: number;
16
+ nextInstallment: SellerNextInstallment | null;
17
+ }
18
+
19
+ /** Respuesta de `GET /seller/credits/{creditId}/payment-options`: fuente de `expectedAmountCents`. */
20
+ export interface SellerPaymentOptions {
21
+ creditId: string;
22
+ summary: SellerCreditPaymentSummary;
23
+ /** Su cuota: las exigibles hoy (vencidas y la de hoy) o, sin nada exigible, la siguiente. */
24
+ nextInstallment: SellerPaymentOption & { installmentNumbers?: number[]; overdueCount?: number };
25
+ advance: SellerPaymentOption & { minInstallments?: number; maxInstallments?: number; installmentAmountsCents?: number[] };
26
+ prepayment: SellerPaymentOption & { minAmountCents?: number; maxAmountCents?: number };
27
+ /** Liquidar: el neto de la cotización de hoy. */
28
+ settlement: SellerPaymentOption;
29
+ }
@@ -0,0 +1,43 @@
1
+ import type { InStorePaymentMethodEnum } from '../../enums/InStorePaymentMethodEnum';
2
+ import type { LoanCustomerPaymentTypeEnum } from '../../enums/LoanCustomerPaymentTypeEnum';
3
+ import type { LoanInstallmentStatusEnum } from '../../enums/LoanInstallmentStatusEnum';
4
+
5
+ /** Algo con id y el nombre congelado al cobrar. */
6
+ export interface NamedRef {
7
+ id: string;
8
+ name: string | null;
9
+ }
10
+
11
+ /** La cuota que sigue después del pago; null si ya no queda ninguna abierta. */
12
+ export interface SellerNextInstallment {
13
+ installmentNumber: number;
14
+ dueDate: string | null;
15
+ amountCents: number;
16
+ status: LoanInstallmentStatusEnum;
17
+ }
18
+
19
+ /** El crédito con su equipo, para que el comprobante diga qué se pagó. */
20
+ export interface SellerPaymentCredit {
21
+ creditId: string;
22
+ imei: string | null;
23
+ productBrand: string | null;
24
+ productModel: string | null;
25
+ }
26
+
27
+ /** Respuesta 200 de `POST /seller/credits/{creditId}/payments`: el comprobante en pantalla. */
28
+ export interface SellerPaymentResult {
29
+ creditId: string;
30
+ /** Folio `SK-TD-…`. */
31
+ receipt: string;
32
+ amountCents: number;
33
+ type: LoanCustomerPaymentTypeEnum;
34
+ method: InStorePaymentMethodEnum;
35
+ appliedAt: string;
36
+ outstandingBalanceAfterCents: number;
37
+ /** Solo si el pago emitió documento (comprobante de adelanto o constancia de liquidación). */
38
+ documentId?: string;
39
+ collectedAtStore: NamedRef;
40
+ collectedBySeller: NamedRef;
41
+ nextInstallment: SellerNextInstallment | null;
42
+ credit: SellerPaymentCredit;
43
+ }
@@ -0,0 +1,6 @@
1
+ /** Estado del bloque de crédito de la fila de Clientes: leído, sin acreditado o sin leer. */
2
+ export enum CreditCustomerStateEnum {
3
+ READ = 'READ',
4
+ NO_BORROWER = 'NO_BORROWER',
5
+ UNAVAILABLE = 'UNAVAILABLE',
6
+ }
@@ -0,0 +1,6 @@
1
+ /** Forma en que el cliente pagó en tienda. Solo se anota: no se verifica contra banco ni terminal. */
2
+ export enum InStorePaymentMethodEnum {
3
+ CASH = 'CASH',
4
+ CARD = 'CARD',
5
+ WIRE = 'WIRE',
6
+ }
@@ -0,0 +1,5 @@
1
+ /** Por dónde entró el pago al crédito. Ausente en filas viejas = COLLECTION_ENGINE. */
2
+ export enum LoanPaymentOriginEnum {
3
+ COLLECTION_ENGINE = 'COLLECTION_ENGINE',
4
+ IN_STORE = 'IN_STORE',
5
+ }
@@ -49,6 +49,10 @@ export * from './dtos/responses/OriginateLoanCreditResponse';
49
49
  export * from './dtos/responses/QuoteLoanCreditResponse';
50
50
  export * from './dtos/responses/SignLoanCreditResponse';
51
51
  export * from './dtos/responses/ActivationCheckResponse';
52
+ // Cartera del vendedor (pantalla Cobro del Portal Vendedor)
53
+ export * from './dtos/responses/SellerCreditRow';
54
+ export * from './dtos/responses/SellerCreditListResponse';
55
+ export * from './dtos/responses/SellerCreditDetailResponse';
52
56
 
53
57
  // Device / MDM — contrato hacia los callers de loan-credit
54
58
  export * from './enums/LoanDeviceMdmStatusEnum';
@@ -163,3 +167,15 @@ export * from './enums/LoanPaymentOptionUnavailableReasonEnum';
163
167
  export * from './dtos/requests/CreateCustomerPaymentRequest';
164
168
  export * from './dtos/responses/LoanCustomerPaymentOptions';
165
169
  export * from './dtos/responses/LoanCustomerPaymentResult';
170
+
171
+ // Cobro en tienda del Portal del Vendedor
172
+ export * from './enums/InStorePaymentMethodEnum';
173
+ export * from './enums/LoanPaymentOriginEnum';
174
+ export * from './enums/CreditCustomerStateEnum';
175
+ export * from './dtos/requests/InStorePaymentDetail';
176
+ export * from './dtos/requests/CreateSellerPaymentRequest';
177
+ export * from './dtos/responses/SellerPaymentResult';
178
+ export * from './dtos/responses/SellerPaymentOptions';
179
+ export * from './dtos/responses/SellerCreditLookupResult';
180
+ export * from './dtos/responses/InStorePaymentListItem';
181
+ export * from './dtos/responses/CreditCustomerListItem';
@@ -0,0 +1,9 @@
1
+ /** Tope de `eventId`: el límite seguro de una llave de DynamoDB. */
2
+ export const RETAIL_EVENT_ID_MAX_LENGTH = 1024;
3
+
4
+ /** Rango de `limit` en las listas paginadas del retailer. */
5
+ export const RETAIL_LIST_LIMIT_MIN = 1;
6
+ export const RETAIL_LIST_LIMIT_MAX = 200;
7
+
8
+ /** Forma válida de un `tenantId`; también arma el nombre del secreto del retailer. */
9
+ export const RETAIL_TENANT_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
@@ -0,0 +1,49 @@
1
+ import { IsString, Matches } from 'class-validator';
2
+ import { RETAIL_TENANT_ID_PATTERN } from '../constants/retailIntegrationLimits';
3
+ import { ReceiveInventoryEventRequest } from './ReceiveInventoryEventRequest';
4
+ import { ReceiveProductEventRequest } from './ReceiveProductEventRequest';
5
+ import { ReceiveRetailUserEventRequest } from './ReceiveRetailUserEventRequest';
6
+ import { ReceiveStoreEventRequest } from './ReceiveStoreEventRequest';
7
+ import { RetailEventResult } from './RetailEventResult';
8
+
9
+ /** Evento de tienda que el connector manda a retail-org-business, con el tenant de la credencial. */
10
+ export class ApplyStoreEventRequest extends ReceiveStoreEventRequest {
11
+ @IsString()
12
+ @Matches(RETAIL_TENANT_ID_PATTERN)
13
+ tenantId!: string;
14
+ }
15
+
16
+ /** Evento de usuario que el connector manda a retail-org-business, con el tenant de la credencial. */
17
+ export class ApplyRetailUserEventRequest extends ReceiveRetailUserEventRequest {
18
+ @IsString()
19
+ @Matches(RETAIL_TENANT_ID_PATTERN)
20
+ tenantId!: string;
21
+ }
22
+
23
+ /** Evento de producto que el connector manda a retail-catalog-business, con el tenant de la credencial. */
24
+ export class ApplyProductEventRequest extends ReceiveProductEventRequest {
25
+ @IsString()
26
+ @Matches(RETAIL_TENANT_ID_PATTERN)
27
+ tenantId!: string;
28
+ }
29
+
30
+ /** Evento de inventario que el connector manda a retail-catalog-business, con el tenant de la credencial. */
31
+ export class ApplyInventoryEventRequest extends ReceiveInventoryEventRequest {
32
+ @IsString()
33
+ @Matches(RETAIL_TENANT_ID_PATTERN)
34
+ tenantId!: string;
35
+ }
36
+
37
+ /** Cualquiera de los cuatro eventos que el connector manda a un destino. */
38
+ export type ApplyRetailEventRequest =
39
+ | ApplyStoreEventRequest
40
+ | ApplyRetailUserEventRequest
41
+ | ApplyProductEventRequest
42
+ | ApplyInventoryEventRequest;
43
+
44
+ /** El destino contesta `200` con `result`; un rechazo de negocio es `REJECTED`, nunca 4xx. */
45
+ export type ApplyRetailEventResponse = RetailEventResult;
46
+ export type ApplyStoreEventResponse = RetailEventResult;
47
+ export type ApplyRetailUserEventResponse = RetailEventResult;
48
+ export type ApplyProductEventResponse = RetailEventResult;
49
+ export type ApplyInventoryEventResponse = RetailEventResult;
@@ -0,0 +1,9 @@
1
+ import { IsString, Matches } from 'class-validator';
2
+ import { RetailTenantQuery } from './RetailTenantQuery';
3
+
4
+ /** Query de `GET /private/retail/inventory`; el inventario es por tienda y no pagina. */
5
+ export class GetRetailInventoryRequest extends RetailTenantQuery {
6
+ @IsString()
7
+ @Matches(/\S/)
8
+ storeId!: string;
9
+ }
@@ -0,0 +1,4 @@
1
+ import { RetailPagedQuery } from './RetailPagedQuery';
2
+
3
+ /** Query de `GET /private/retail/catalog`. */
4
+ export class ListRetailCatalogRequest extends RetailPagedQuery {}
@@ -0,0 +1,4 @@
1
+ import { RetailPagedQuery } from './RetailPagedQuery';
2
+
3
+ /** Query de `GET /private/retail/stores`. */
4
+ export class ListRetailStoresRequest extends RetailPagedQuery {}
@@ -0,0 +1,10 @@
1
+ import { IsOptional, IsString, Matches } from 'class-validator';
2
+ import { RetailPagedQuery } from './RetailPagedQuery';
3
+
4
+ /** Query de `GET /private/retail/users`; sin `storeId` trae todos los usuarios. */
5
+ export class ListRetailUsersRequest extends RetailPagedQuery {
6
+ @IsOptional()
7
+ @IsString()
8
+ @Matches(/\S/)
9
+ storeId?: string;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { IsIn } from 'class-validator';
2
+ import { InventoryEventTypeEnum } from '../enums/InventoryEventTypeEnum';
3
+ import { RetailEventEnvelope } from './RetailEventEnvelope';
4
+
5
+ /** Sobre de `POST /webhooks/inventory`. */
6
+ export class ReceiveInventoryEventRequest extends RetailEventEnvelope {
7
+ @IsIn(Object.values(InventoryEventTypeEnum))
8
+ eventType!: InventoryEventTypeEnum;
9
+ }
@@ -0,0 +1,9 @@
1
+ import { IsIn } from 'class-validator';
2
+ import { ProductEventTypeEnum } from '../enums/ProductEventTypeEnum';
3
+ import { RetailEventEnvelope } from './RetailEventEnvelope';
4
+
5
+ /** Sobre de `POST /webhooks/catalog`. */
6
+ export class ReceiveProductEventRequest extends RetailEventEnvelope {
7
+ @IsIn(Object.values(ProductEventTypeEnum))
8
+ eventType!: ProductEventTypeEnum;
9
+ }
@@ -0,0 +1,18 @@
1
+ import { InventoryEventTypeEnum } from '../enums/InventoryEventTypeEnum';
2
+ import { ProductEventTypeEnum } from '../enums/ProductEventTypeEnum';
3
+ import { RetailUserEventTypeEnum } from '../enums/RetailUserEventTypeEnum';
4
+ import { StoreEventTypeEnum } from '../enums/StoreEventTypeEnum';
5
+ import { ReceiveInventoryEventRequest } from './ReceiveInventoryEventRequest';
6
+ import { ReceiveProductEventRequest } from './ReceiveProductEventRequest';
7
+ import { ReceiveRetailUserEventRequest } from './ReceiveRetailUserEventRequest';
8
+ import { ReceiveStoreEventRequest } from './ReceiveStoreEventRequest';
9
+
10
+ /** Cualquier `eventType` aceptado por alguno de los cuatro webhooks. */
11
+ export type RetailEventType = StoreEventTypeEnum | RetailUserEventTypeEnum | ProductEventTypeEnum | InventoryEventTypeEnum;
12
+
13
+ /** Sobre ya validado de cualquiera de los cuatro webhooks. */
14
+ export type ReceiveRetailEventRequest =
15
+ | ReceiveStoreEventRequest
16
+ | ReceiveRetailUserEventRequest
17
+ | ReceiveProductEventRequest
18
+ | ReceiveInventoryEventRequest;
@@ -0,0 +1,9 @@
1
+ import { IsIn } from 'class-validator';
2
+ import { RetailUserEventTypeEnum } from '../enums/RetailUserEventTypeEnum';
3
+ import { RetailEventEnvelope } from './RetailEventEnvelope';
4
+
5
+ /** Sobre de `POST /webhooks/users`. */
6
+ export class ReceiveRetailUserEventRequest extends RetailEventEnvelope {
7
+ @IsIn(Object.values(RetailUserEventTypeEnum))
8
+ eventType!: RetailUserEventTypeEnum;
9
+ }
@@ -0,0 +1,9 @@
1
+ import { IsIn } from 'class-validator';
2
+ import { StoreEventTypeEnum } from '../enums/StoreEventTypeEnum';
3
+ import { RetailEventEnvelope } from './RetailEventEnvelope';
4
+
5
+ /** Sobre de `POST /webhooks/stores`. */
6
+ export class ReceiveStoreEventRequest extends RetailEventEnvelope {
7
+ @IsIn(Object.values(StoreEventTypeEnum))
8
+ eventType!: StoreEventTypeEnum;
9
+ }