@fiado/type-kit 3.194.0 → 3.196.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 (247) hide show
  1. package/bin/helpers/constans/regex.d.ts +3 -0
  2. package/bin/helpers/constans/regex.js +12 -1
  3. package/bin/index.d.ts +2 -0
  4. package/bin/index.js +7 -1
  5. package/bin/places/dtos/AddressCandidate.d.ts +23 -0
  6. package/bin/places/dtos/AddressCandidate.js +11 -0
  7. package/bin/places/dtos/ReverseGeocodeRequest.d.ts +9 -0
  8. package/bin/places/dtos/ReverseGeocodeRequest.js +39 -0
  9. package/bin/places/dtos/ReverseGeocodeResponse.d.ts +5 -0
  10. package/bin/places/dtos/ReverseGeocodeResponse.js +7 -0
  11. package/bin/places/dtos/SearchAddressRequest.d.ts +10 -0
  12. package/bin/places/dtos/SearchAddressRequest.js +38 -0
  13. package/bin/places/dtos/SearchAddressResponse.d.ts +5 -0
  14. package/bin/places/dtos/SearchAddressResponse.js +7 -0
  15. package/bin/places/index.d.ts +5 -0
  16. package/bin/places/index.js +5 -0
  17. package/bin/retailCustomer/dtos/KycReview.d.ts +19 -0
  18. package/bin/retailCustomer/dtos/KycReview.js +56 -0
  19. package/bin/retailCustomer/dtos/RetailCustomer.d.ts +37 -0
  20. package/bin/retailCustomer/dtos/RetailCustomer.js +160 -0
  21. package/bin/retailCustomer/dtos/requests/AccountResultRequest.d.ts +13 -0
  22. package/bin/retailCustomer/dtos/requests/AccountResultRequest.js +48 -0
  23. package/bin/retailCustomer/dtos/requests/CreateCustomerRequest.d.ts +10 -0
  24. package/bin/retailCustomer/dtos/requests/CreateCustomerRequest.js +45 -0
  25. package/bin/retailCustomer/dtos/requests/KycReviewRequest.d.ts +10 -0
  26. package/bin/retailCustomer/dtos/requests/KycReviewRequest.js +33 -0
  27. package/bin/retailCustomer/dtos/requests/UpdateCustomerRequest.d.ts +10 -0
  28. package/bin/retailCustomer/dtos/requests/UpdateCustomerRequest.js +47 -0
  29. package/bin/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.d.ts +22 -0
  30. package/bin/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.js +97 -0
  31. package/bin/retailCustomer/dtos/responses/Customer360Response.d.ts +33 -0
  32. package/bin/retailCustomer/dtos/responses/Customer360Response.js +2 -0
  33. package/bin/retailCustomer/dtos/responses/CustomerResponse.d.ts +30 -0
  34. package/bin/retailCustomer/dtos/responses/CustomerResponse.js +2 -0
  35. package/bin/retailCustomer/enums/AccountStatusEnum.d.ts +9 -0
  36. package/bin/retailCustomer/enums/AccountStatusEnum.js +13 -0
  37. package/bin/retailCustomer/enums/KycModalityEnum.d.ts +9 -0
  38. package/bin/retailCustomer/enums/KycModalityEnum.js +13 -0
  39. package/bin/retailCustomer/enums/KycReviewResultEnum.d.ts +8 -0
  40. package/bin/retailCustomer/enums/KycReviewResultEnum.js +12 -0
  41. package/bin/retailCustomer/enums/RetailKycStatusEnum.d.ts +13 -0
  42. package/bin/retailCustomer/enums/RetailKycStatusEnum.js +17 -0
  43. package/bin/retailCustomer/events/CustomerCreatedV1.d.ts +7 -0
  44. package/bin/retailCustomer/events/CustomerCreatedV1.js +2 -0
  45. package/bin/retailCustomer/events/CustomerKycVerifiedV1.d.ts +27 -0
  46. package/bin/retailCustomer/events/CustomerKycVerifiedV1.js +2 -0
  47. package/bin/retailCustomer/events/CustomerUpdatedV1.d.ts +9 -0
  48. package/bin/retailCustomer/events/CustomerUpdatedV1.js +2 -0
  49. package/bin/retailCustomer/events/KycApprovedByComplianceV1.d.ts +12 -0
  50. package/bin/retailCustomer/events/KycApprovedByComplianceV1.js +2 -0
  51. package/bin/retailCustomer/events/KycRejectedByComplianceV1.d.ts +12 -0
  52. package/bin/retailCustomer/events/KycRejectedByComplianceV1.js +2 -0
  53. package/bin/retailCustomer/index.d.ts +18 -0
  54. package/bin/retailCustomer/index.js +39 -0
  55. package/bin/retailWizard/dtos/OtpVerification.d.ts +24 -0
  56. package/bin/retailWizard/dtos/OtpVerification.js +2 -0
  57. package/bin/retailWizard/dtos/PaginatedResult.d.ts +6 -0
  58. package/bin/retailWizard/dtos/PaginatedResult.js +2 -0
  59. package/bin/retailWizard/dtos/Prospect.d.ts +32 -0
  60. package/bin/retailWizard/dtos/Prospect.js +2 -0
  61. package/bin/retailWizard/dtos/ProspectNewCustomer.d.ts +5 -0
  62. package/bin/retailWizard/dtos/ProspectNewCustomer.js +28 -0
  63. package/bin/retailWizard/dtos/Sale.d.ts +42 -0
  64. package/bin/retailWizard/dtos/Sale.js +2 -0
  65. package/bin/retailWizard/dtos/SalePaymentDetail.d.ts +11 -0
  66. package/bin/retailWizard/dtos/SalePaymentDetail.js +51 -0
  67. package/bin/retailWizard/dtos/WizardBeneficiary.d.ts +13 -0
  68. package/bin/retailWizard/dtos/WizardBeneficiary.js +47 -0
  69. package/bin/retailWizard/dtos/WizardConsents.d.ts +8 -0
  70. package/bin/retailWizard/dtos/WizardConsents.js +47 -0
  71. package/bin/retailWizard/dtos/WizardPayment.d.ts +8 -0
  72. package/bin/retailWizard/dtos/WizardPayment.js +43 -0
  73. package/bin/retailWizard/dtos/WizardSession.d.ts +65 -0
  74. package/bin/retailWizard/dtos/WizardSession.js +2 -0
  75. package/bin/retailWizard/dtos/WizardWelcome.d.ts +9 -0
  76. package/bin/retailWizard/dtos/WizardWelcome.js +50 -0
  77. package/bin/retailWizard/dtos/requests/AddProductRequest.d.ts +10 -0
  78. package/bin/retailWizard/dtos/requests/AddProductRequest.js +38 -0
  79. package/bin/retailWizard/dtos/requests/AppInstallLinkRequest.d.ts +4 -0
  80. package/bin/retailWizard/dtos/requests/AppInstallLinkRequest.js +24 -0
  81. package/bin/retailWizard/dtos/requests/CancelSaleRequest.d.ts +8 -0
  82. package/bin/retailWizard/dtos/requests/CancelSaleRequest.js +28 -0
  83. package/bin/retailWizard/dtos/requests/CancelSessionRequest.d.ts +4 -0
  84. package/bin/retailWizard/dtos/requests/CancelSessionRequest.js +24 -0
  85. package/bin/retailWizard/dtos/requests/CompleteSaleRequest.d.ts +9 -0
  86. package/bin/retailWizard/dtos/requests/CompleteSaleRequest.js +29 -0
  87. package/bin/retailWizard/dtos/requests/ConfirmAddressRequest.d.ts +9 -0
  88. package/bin/retailWizard/dtos/requests/ConfirmAddressRequest.js +34 -0
  89. package/bin/retailWizard/dtos/requests/ConsentsRequest.d.ts +11 -0
  90. package/bin/retailWizard/dtos/requests/ConsentsRequest.js +35 -0
  91. package/bin/retailWizard/dtos/requests/CreateProspectRequest.d.ts +15 -0
  92. package/bin/retailWizard/dtos/requests/CreateProspectRequest.js +67 -0
  93. package/bin/retailWizard/dtos/requests/DeleteProductRequest.d.ts +4 -0
  94. package/bin/retailWizard/dtos/requests/DeleteProductRequest.js +23 -0
  95. package/bin/retailWizard/dtos/requests/ExternalReferralRequest.d.ts +8 -0
  96. package/bin/retailWizard/dtos/requests/ExternalReferralRequest.js +27 -0
  97. package/bin/retailWizard/dtos/requests/KycConfirmRequest.d.ts +10 -0
  98. package/bin/retailWizard/dtos/requests/KycConfirmRequest.js +35 -0
  99. package/bin/retailWizard/dtos/requests/KycManualRequest.d.ts +8 -0
  100. package/bin/retailWizard/dtos/requests/KycManualRequest.js +28 -0
  101. package/bin/retailWizard/dtos/requests/KycPrepareRequest.d.ts +10 -0
  102. package/bin/retailWizard/dtos/requests/KycPrepareRequest.js +27 -0
  103. package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.d.ts +4 -0
  104. package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.js +23 -0
  105. package/bin/retailWizard/dtos/requests/MarkProspectLostRequest.d.ts +4 -0
  106. package/bin/retailWizard/dtos/requests/MarkProspectLostRequest.js +24 -0
  107. package/bin/retailWizard/dtos/requests/OccupationRequest.d.ts +10 -0
  108. package/bin/retailWizard/dtos/requests/OccupationRequest.js +35 -0
  109. package/bin/retailWizard/dtos/requests/RegisterPaymentRequest.d.ts +12 -0
  110. package/bin/retailWizard/dtos/requests/RegisterPaymentRequest.js +42 -0
  111. package/bin/retailWizard/dtos/requests/ResendOtpRequest.d.ts +8 -0
  112. package/bin/retailWizard/dtos/requests/ResendOtpRequest.js +28 -0
  113. package/bin/retailWizard/dtos/requests/SaveBeneficiaryRequest.d.ts +5 -0
  114. package/bin/retailWizard/dtos/requests/SaveBeneficiaryRequest.js +25 -0
  115. package/bin/retailWizard/dtos/requests/SetPaymentMethodRequest.d.ts +5 -0
  116. package/bin/retailWizard/dtos/requests/SetPaymentMethodRequest.js +24 -0
  117. package/bin/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.d.ts +4 -0
  118. package/bin/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.js +23 -0
  119. package/bin/retailWizard/dtos/requests/SkipOtpRequest.d.ts +4 -0
  120. package/bin/retailWizard/dtos/requests/SkipOtpRequest.js +24 -0
  121. package/bin/retailWizard/dtos/requests/StartSessionRequest.d.ts +10 -0
  122. package/bin/retailWizard/dtos/requests/StartSessionRequest.js +35 -0
  123. package/bin/retailWizard/dtos/requests/UpdateProspectRequest.d.ts +8 -0
  124. package/bin/retailWizard/dtos/requests/UpdateProspectRequest.js +45 -0
  125. package/bin/retailWizard/dtos/requests/VerifyOtpRequest.d.ts +4 -0
  126. package/bin/retailWizard/dtos/requests/VerifyOtpRequest.js +24 -0
  127. package/bin/retailWizard/dtos/requests/WelcomeTopupRequest.d.ts +7 -0
  128. package/bin/retailWizard/dtos/requests/WelcomeTopupRequest.js +27 -0
  129. package/bin/retailWizard/enums/BeneficiaryRelationEnum.d.ts +18 -0
  130. package/bin/retailWizard/enums/BeneficiaryRelationEnum.js +22 -0
  131. package/bin/retailWizard/enums/CentralSyncStatusEnum.d.ts +14 -0
  132. package/bin/retailWizard/enums/CentralSyncStatusEnum.js +18 -0
  133. package/bin/retailWizard/enums/ExternalProviderEnum.d.ts +7 -0
  134. package/bin/retailWizard/enums/ExternalProviderEnum.js +11 -0
  135. package/bin/retailWizard/enums/FiadoPhoneStatusEnum.d.ts +15 -0
  136. package/bin/retailWizard/enums/FiadoPhoneStatusEnum.js +19 -0
  137. package/bin/retailWizard/enums/OccupationEnum.d.ts +13 -0
  138. package/bin/retailWizard/enums/OccupationEnum.js +17 -0
  139. package/bin/retailWizard/enums/OtpPurposeEnum.d.ts +10 -0
  140. package/bin/retailWizard/enums/OtpPurposeEnum.js +14 -0
  141. package/bin/retailWizard/enums/PaymentMethodEnum.d.ts +12 -0
  142. package/bin/retailWizard/enums/PaymentMethodEnum.js +16 -0
  143. package/bin/retailWizard/enums/PendingReasonEnum.d.ts +21 -0
  144. package/bin/retailWizard/enums/PendingReasonEnum.js +25 -0
  145. package/bin/retailWizard/enums/ProspectStatusEnum.d.ts +16 -0
  146. package/bin/retailWizard/enums/ProspectStatusEnum.js +20 -0
  147. package/bin/retailWizard/enums/SalePaymentMethodEnum.d.ts +6 -0
  148. package/bin/retailWizard/enums/SalePaymentMethodEnum.js +10 -0
  149. package/bin/retailWizard/enums/SaleStatusEnum.d.ts +10 -0
  150. package/bin/retailWizard/enums/SaleStatusEnum.js +14 -0
  151. package/bin/retailWizard/enums/SaleTypeEnum.d.ts +13 -0
  152. package/bin/retailWizard/enums/SaleTypeEnum.js +17 -0
  153. package/bin/retailWizard/enums/WizardStateEnum.d.ts +18 -0
  154. package/bin/retailWizard/enums/WizardStateEnum.js +22 -0
  155. package/bin/retailWizard/enums/WizardStepEnum.d.ts +13 -0
  156. package/bin/retailWizard/enums/WizardStepEnum.js +17 -0
  157. package/bin/retailWizard/events/SaleCancelledV1.d.ts +13 -0
  158. package/bin/retailWizard/events/SaleCancelledV1.js +2 -0
  159. package/bin/retailWizard/events/SaleCompletedV1.d.ts +17 -0
  160. package/bin/retailWizard/events/SaleCompletedV1.js +2 -0
  161. package/bin/retailWizard/events/SessionExpiredV1.d.ts +10 -0
  162. package/bin/retailWizard/events/SessionExpiredV1.js +2 -0
  163. package/bin/retailWizard/index.d.ts +54 -0
  164. package/bin/retailWizard/index.js +76 -0
  165. package/package.json +1 -1
  166. package/src/helpers/constans/regex.ts +16 -0
  167. package/src/index.ts +6 -0
  168. package/src/places/dtos/AddressCandidate.ts +23 -0
  169. package/src/places/dtos/ReverseGeocodeRequest.ts +23 -0
  170. package/src/places/dtos/ReverseGeocodeResponse.ts +6 -0
  171. package/src/places/dtos/SearchAddressRequest.ts +23 -0
  172. package/src/places/dtos/SearchAddressResponse.ts +6 -0
  173. package/src/places/index.ts +5 -0
  174. package/src/retailCustomer/dtos/KycReview.ts +41 -0
  175. package/src/retailCustomer/dtos/RetailCustomer.ts +132 -0
  176. package/src/retailCustomer/dtos/requests/AccountResultRequest.ts +34 -0
  177. package/src/retailCustomer/dtos/requests/CreateCustomerRequest.ts +28 -0
  178. package/src/retailCustomer/dtos/requests/KycReviewRequest.ts +18 -0
  179. package/src/retailCustomer/dtos/requests/UpdateCustomerRequest.ts +30 -0
  180. package/src/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.ts +79 -0
  181. package/src/retailCustomer/dtos/responses/Customer360Response.ts +37 -0
  182. package/src/retailCustomer/dtos/responses/CustomerResponse.ts +31 -0
  183. package/src/retailCustomer/enums/AccountStatusEnum.ts +9 -0
  184. package/src/retailCustomer/enums/KycModalityEnum.ts +9 -0
  185. package/src/retailCustomer/enums/KycReviewResultEnum.ts +8 -0
  186. package/src/retailCustomer/enums/RetailKycStatusEnum.ts +13 -0
  187. package/src/retailCustomer/events/CustomerCreatedV1.ts +7 -0
  188. package/src/retailCustomer/events/CustomerKycVerifiedV1.ts +28 -0
  189. package/src/retailCustomer/events/CustomerUpdatedV1.ts +9 -0
  190. package/src/retailCustomer/events/KycApprovedByComplianceV1.ts +12 -0
  191. package/src/retailCustomer/events/KycRejectedByComplianceV1.ts +12 -0
  192. package/src/retailCustomer/index.ts +27 -0
  193. package/src/retailWizard/dtos/OtpVerification.ts +25 -0
  194. package/src/retailWizard/dtos/PaginatedResult.ts +6 -0
  195. package/src/retailWizard/dtos/Prospect.ts +33 -0
  196. package/src/retailWizard/dtos/ProspectNewCustomer.ts +13 -0
  197. package/src/retailWizard/dtos/Sale.ts +43 -0
  198. package/src/retailWizard/dtos/SalePaymentDetail.ts +33 -0
  199. package/src/retailWizard/dtos/WizardBeneficiary.ts +31 -0
  200. package/src/retailWizard/dtos/WizardConsents.ts +29 -0
  201. package/src/retailWizard/dtos/WizardPayment.ts +26 -0
  202. package/src/retailWizard/dtos/WizardSession.ts +68 -0
  203. package/src/retailWizard/dtos/WizardWelcome.ts +31 -0
  204. package/src/retailWizard/dtos/requests/AddProductRequest.ts +22 -0
  205. package/src/retailWizard/dtos/requests/AppInstallLinkRequest.ts +10 -0
  206. package/src/retailWizard/dtos/requests/CancelSaleRequest.ts +14 -0
  207. package/src/retailWizard/dtos/requests/CancelSessionRequest.ts +10 -0
  208. package/src/retailWizard/dtos/requests/CompleteSaleRequest.ts +15 -0
  209. package/src/retailWizard/dtos/requests/ConfirmAddressRequest.ts +22 -0
  210. package/src/retailWizard/dtos/requests/ConsentsRequest.ts +21 -0
  211. package/src/retailWizard/dtos/requests/CreateProspectRequest.ts +47 -0
  212. package/src/retailWizard/dtos/requests/DeleteProductRequest.ts +9 -0
  213. package/src/retailWizard/dtos/requests/ExternalReferralRequest.ts +13 -0
  214. package/src/retailWizard/dtos/requests/KycConfirmRequest.ts +23 -0
  215. package/src/retailWizard/dtos/requests/KycManualRequest.ts +17 -0
  216. package/src/retailWizard/dtos/requests/KycPrepareRequest.ts +16 -0
  217. package/src/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.ts +9 -0
  218. package/src/retailWizard/dtos/requests/MarkProspectLostRequest.ts +10 -0
  219. package/src/retailWizard/dtos/requests/OccupationRequest.ts +20 -0
  220. package/src/retailWizard/dtos/requests/RegisterPaymentRequest.ts +26 -0
  221. package/src/retailWizard/dtos/requests/ResendOtpRequest.ts +14 -0
  222. package/src/retailWizard/dtos/requests/SaveBeneficiaryRequest.ts +11 -0
  223. package/src/retailWizard/dtos/requests/SetPaymentMethodRequest.ts +10 -0
  224. package/src/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.ts +9 -0
  225. package/src/retailWizard/dtos/requests/SkipOtpRequest.ts +10 -0
  226. package/src/retailWizard/dtos/requests/StartSessionRequest.ts +21 -0
  227. package/src/retailWizard/dtos/requests/UpdateProspectRequest.ts +28 -0
  228. package/src/retailWizard/dtos/requests/VerifyOtpRequest.ts +10 -0
  229. package/src/retailWizard/dtos/requests/WelcomeTopupRequest.ts +13 -0
  230. package/src/retailWizard/enums/BeneficiaryRelationEnum.ts +18 -0
  231. package/src/retailWizard/enums/CentralSyncStatusEnum.ts +14 -0
  232. package/src/retailWizard/enums/ExternalProviderEnum.ts +7 -0
  233. package/src/retailWizard/enums/FiadoPhoneStatusEnum.ts +15 -0
  234. package/src/retailWizard/enums/OccupationEnum.ts +13 -0
  235. package/src/retailWizard/enums/OtpPurposeEnum.ts +10 -0
  236. package/src/retailWizard/enums/PaymentMethodEnum.ts +12 -0
  237. package/src/retailWizard/enums/PendingReasonEnum.ts +21 -0
  238. package/src/retailWizard/enums/ProspectStatusEnum.ts +16 -0
  239. package/src/retailWizard/enums/SalePaymentMethodEnum.ts +6 -0
  240. package/src/retailWizard/enums/SaleStatusEnum.ts +10 -0
  241. package/src/retailWizard/enums/SaleTypeEnum.ts +13 -0
  242. package/src/retailWizard/enums/WizardStateEnum.ts +18 -0
  243. package/src/retailWizard/enums/WizardStepEnum.ts +13 -0
  244. package/src/retailWizard/events/SaleCancelledV1.ts +13 -0
  245. package/src/retailWizard/events/SaleCompletedV1.ts +17 -0
  246. package/src/retailWizard/events/SessionExpiredV1.ts +10 -0
  247. package/src/retailWizard/index.ts +65 -0
@@ -0,0 +1,34 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsIn, IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator';
3
+ import { AccountStatusEnum } from '../../enums/AccountStatusEnum';
4
+
5
+ /**
6
+ * Resultado de la apertura de cuenta async (D35) — lo escribe el consumer `account-inbound` al
7
+ * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfClabe`/`pcfAccountLevel`;
8
+ * FAILED llega con `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca
9
+ * el estado intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
10
+ */
11
+ export class AccountResultRequest {
12
+ // OPENING NO es un resultado válido del endpoint D35; solo el estado terminal OPEN/FAILED.
13
+ @Expose()
14
+ @IsIn([AccountStatusEnum.OPEN, AccountStatusEnum.FAILED])
15
+ status!: AccountStatusEnum;
16
+
17
+ // OPEN ⇒ pcfClabe obligatorio (la cuenta abierta sin CLABE es inconsistente). Para FAILED se omite
18
+ // (@ValidateIf desactiva los validators cuando status ≠ OPEN → queda opcional).
19
+ @Expose()
20
+ @ValidateIf((o: AccountResultRequest) => o.status === AccountStatusEnum.OPEN)
21
+ @IsString()
22
+ @IsNotEmpty({ message: 'pcfClabe es obligatorio cuando status es OPEN' })
23
+ pcfClabe?: string;
24
+
25
+ @Expose()
26
+ @IsOptional()
27
+ @IsIn([1, 2])
28
+ pcfAccountLevel?: 1 | 2;
29
+
30
+ @Expose()
31
+ @IsOptional()
32
+ @IsString()
33
+ failReason?: string;
34
+ }
@@ -0,0 +1,28 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsOptional, IsString, Matches } from 'class-validator';
3
+ import { regexIso8601Date } from '../../../helpers/constans/regex';
4
+
5
+ /**
6
+ * Alta básica de un cliente retail (identidad comercial mínima; el KYC la enriquece después).
7
+ * SureKeep Fase 2 — pista Retail.
8
+ */
9
+ export class CreateCustomerRequest {
10
+ @Expose()
11
+ @IsString()
12
+ name!: string;
13
+
14
+ @Expose()
15
+ @IsString()
16
+ phone!: string;
17
+
18
+ @Expose()
19
+ @IsOptional()
20
+ @IsString()
21
+ curp?: string;
22
+
23
+ @Expose()
24
+ @IsOptional()
25
+ @IsString()
26
+ @Matches(regexIso8601Date, { message: 'birthDate debe ser una fecha ISO 8601' })
27
+ birthDate?: string;
28
+ }
@@ -0,0 +1,18 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum, IsString } from 'class-validator';
3
+ import { KycReviewResultEnum } from '../../enums/KycReviewResultEnum';
4
+
5
+ /**
6
+ * Resolución de la cola de Cumplimiento (D21): `POST /customers/:id/kyc-review`. La `justification`
7
+ * es OBLIGATORIA (queda en AuditTrail). `reviewedBy`/`reviewedAt` los pone el server.
8
+ * SureKeep Fase 2 — pista Retail.
9
+ */
10
+ export class KycReviewRequest {
11
+ @Expose()
12
+ @IsEnum(KycReviewResultEnum)
13
+ result!: KycReviewResultEnum;
14
+
15
+ @Expose()
16
+ @IsString()
17
+ justification!: string;
18
+ }
@@ -0,0 +1,30 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsOptional, IsString, Matches } from 'class-validator';
3
+ import { regexIso8601Date } from '../../../helpers/constans/regex';
4
+
5
+ /**
6
+ * Edición de datos de contacto/PII del cliente (Cliente 360 del BO). Toda escritura de PII va a
7
+ * AuditTrail + PiiAccessLog en el lambda. SureKeep Fase 2 — pista Retail.
8
+ */
9
+ export class UpdateCustomerRequest {
10
+ @Expose()
11
+ @IsOptional()
12
+ @IsString()
13
+ name?: string;
14
+
15
+ @Expose()
16
+ @IsOptional()
17
+ @IsString()
18
+ phone?: string;
19
+
20
+ @Expose()
21
+ @IsOptional()
22
+ @IsString()
23
+ curp?: string;
24
+
25
+ @Expose()
26
+ @IsOptional()
27
+ @IsString()
28
+ @Matches(regexIso8601Date, { message: 'birthDate debe ser una fecha ISO 8601' })
29
+ birthDate?: string;
30
+ }
@@ -0,0 +1,79 @@
1
+ import { Expose, Transform, Type } from 'class-transformer';
2
+ import { IsEnum, IsIn, IsOptional, IsString, Matches, ValidateNested } from 'class-validator';
3
+ import { regexCurp, regexIso8601Date, regexPhoneMx } from '../../../helpers/constans/regex';
4
+ import { AddressBase } from '../../../address/dtos/AddressBase';
5
+ import { KycModalityEnum } from '../../enums/KycModalityEnum';
6
+ import { RetailKycStatusEnum } from '../../enums/RetailKycStatusEnum';
7
+
8
+ /**
9
+ * Upsert idempotente del cliente tras el KYC (paso 02f). UNIQ#PHONE + UNIQ#CURP en la misma TX.
10
+ * El endpoint setea `accountStatus=OPENING` server-side (la apertura corre en background, D35).
11
+ * SureKeep Fase 2 — pista Retail.
12
+ */
13
+ export class UpsertCustomerFromKycRequest {
14
+ @Expose()
15
+ @IsString()
16
+ name!: string;
17
+
18
+ // Normalización en el boundary: se strippean espacios/guiones para que centinela de unicidad,
19
+ // lookup y search del BO (que también strippea) usen el MISMO formato de teléfono.
20
+ @Expose()
21
+ @Transform(({ value }) => (typeof value === 'string' ? value.replace(/[\s-]/g, '') : value))
22
+ @IsString()
23
+ @Matches(regexPhoneMx, { message: 'phone debe ser 10 dígitos MX' })
24
+ phone!: string;
25
+
26
+ // Normalización en el boundary: el CURP se uppercasea para no evadir la unicidad transaccional
27
+ // (minúsculas vs mayúsculas) y para que el search del BO (que uppercasea) lo encuentre.
28
+ @Expose()
29
+ @Transform(({ value }) => (typeof value === 'string' ? value.toUpperCase() : value))
30
+ @IsString()
31
+ @Matches(regexCurp, { message: 'curp con formato inválido' })
32
+ curp!: string;
33
+
34
+ @Expose()
35
+ @IsOptional()
36
+ @IsString()
37
+ @Matches(regexIso8601Date, { message: 'birthDate debe ser una fecha ISO 8601' })
38
+ birthDate?: string;
39
+
40
+ @Expose()
41
+ @IsString()
42
+ fiadoDirectoryId!: string;
43
+
44
+ @Expose()
45
+ @IsString()
46
+ fiadoPeopleId!: string;
47
+
48
+ @Expose()
49
+ @IsOptional()
50
+ @IsString()
51
+ pcfAccountId?: string;
52
+
53
+ @Expose()
54
+ @IsOptional()
55
+ @IsString()
56
+ pcfClabe?: string;
57
+
58
+ @Expose()
59
+ @IsOptional()
60
+ @IsIn([1, 2])
61
+ pcfAccountLevel?: 1 | 2;
62
+
63
+ @Expose()
64
+ @IsEnum(RetailKycStatusEnum)
65
+ kycStatus!: RetailKycStatusEnum;
66
+
67
+ @Expose()
68
+ @IsEnum(KycModalityEnum)
69
+ kycModality!: KycModalityEnum;
70
+
71
+ // TD-ADDRESSBASE-OCR: reusa el `AddressBase` canónico por decisión de Andrés (apego al spec). El OCR
72
+ // (paso 02e) puede no traer los ~12 campos requeridos de AddressBase → posible rechazo en runtime con
73
+ // @ValidateNested. Se persiste en la MISMA TX del upsert. Ajustar después (ver RetailCustomer.address).
74
+ @Expose()
75
+ @IsOptional()
76
+ @ValidateNested()
77
+ @Type(() => AddressBase)
78
+ address?: AddressBase;
79
+ }
@@ -0,0 +1,37 @@
1
+ import { CustomerResponse } from './CustomerResponse';
2
+
3
+ /** Resumen de wallet (nivel N1/N2 + saldo) para el Cliente 360. */
4
+ export interface Customer360Wallet {
5
+ accountLevel: 1 | 2 | null;
6
+ clabe: string | null;
7
+ balanceCents: number;
8
+ }
9
+
10
+ /** Ítem de compra en el historial del Cliente 360 (del GSI customerId-soldAt). */
11
+ export interface Customer360Purchase {
12
+ saleId: string;
13
+ sku: string;
14
+ amountCents: number;
15
+ folio: string;
16
+ soldAt: string;
17
+ status: string;
18
+ }
19
+
20
+ /** Ítem de prospecto vinculado al cliente en el Cliente 360. */
21
+ export interface Customer360Prospect {
22
+ prospectId: string;
23
+ pendingReason: string;
24
+ status: string;
25
+ nextContactAt: string;
26
+ }
27
+
28
+ /**
29
+ * Ficha Cliente 360 (BO): compone KYC + wallet N1/N2 + compras + prospectos. Cada bloque se hidrata
30
+ * desde su owner (customer, transaction-processor, sale GSI, prospect GSI). SureKeep Fase 2 — pista Retail.
31
+ */
32
+ export interface Customer360Response {
33
+ customer: CustomerResponse;
34
+ wallet: Customer360Wallet;
35
+ purchases: Customer360Purchase[];
36
+ prospects: Customer360Prospect[];
37
+ }
@@ -0,0 +1,31 @@
1
+ import { AddressBase } from '../../../address/dtos/AddressBase';
2
+ import { AccountStatusEnum } from '../../enums/AccountStatusEnum';
3
+ import { KycModalityEnum } from '../../enums/KycModalityEnum';
4
+ import { RetailKycStatusEnum } from '../../enums/RetailKycStatusEnum';
5
+
6
+ /**
7
+ * Vista de un cliente retail hacia el consumidor (BO / api-invoker). SureKeep Fase 2 — pista Retail.
8
+ * `address` reusa el `AddressBase` canónico de Fiado (ver TD en RetailCustomer.address).
9
+ */
10
+ export interface CustomerResponse {
11
+ retailCustomerId: string;
12
+ retailerId: string;
13
+ name: string;
14
+ phone: string;
15
+ curp: string;
16
+ birthDate: string | null;
17
+ fiadoDirectoryId: string | null;
18
+ fiadoPeopleId: string | null;
19
+ pcfAccountId: string | null;
20
+ pcfClabe: string | null;
21
+ pcfAccountLevel: 1 | 2 | null;
22
+ accountStatus: AccountStatusEnum | null;
23
+ failReason: string | null;
24
+ welcomeAccredited: boolean;
25
+ address: AddressBase | null;
26
+ addressConfirmed: boolean;
27
+ kycStatus: RetailKycStatusEnum;
28
+ kycModality: KycModalityEnum | null;
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Estado de la apertura async de la cuenta PagoConFiado (PCF) del cliente retail (D35).
3
+ * SureKeep Fase 2 — pista Retail.
4
+ */
5
+ export enum AccountStatusEnum {
6
+ OPENING = 'OPENING',
7
+ OPEN = 'OPEN',
8
+ FAILED = 'FAILED',
9
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Modalidad con la que el cliente ejecuta el KYC en el wizard (M1 §213-329).
3
+ * SureKeep Fase 2 — pista Retail.
4
+ */
5
+ export enum KycModalityEnum {
6
+ CUSTOMER_LINK = 'CUSTOMER_LINK',
7
+ STORE_DEVICE = 'STORE_DEVICE',
8
+ MANUAL = 'MANUAL',
9
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resultado de la revisión manual del oficial de Cumplimiento (D21).
3
+ * SureKeep Fase 2 — pista Retail.
4
+ */
5
+ export enum KycReviewResultEnum {
6
+ APPROVED = 'APPROVED',
7
+ REJECTED = 'REJECTED',
8
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Estado del KYC del cliente retail (vocabulario retail; espejo operativo del KYC de Fiado).
3
+ * PENDING (sin resultado) · VERIFIED (Metamap OK) · FAILED (incluye PLD) · MANUAL (captura manual,
4
+ * cae en cola de Cumplimiento) · REVIEW (esperando resolución de Cumplimiento).
5
+ * SureKeep Fase 2 — pista Retail.
6
+ */
7
+ export enum RetailKycStatusEnum {
8
+ PENDING = 'PENDING',
9
+ VERIFIED = 'VERIFIED',
10
+ FAILED = 'FAILED',
11
+ MANUAL = 'MANUAL',
12
+ REVIEW = 'REVIEW',
13
+ }
@@ -0,0 +1,7 @@
1
+ /** Emitido cuando se da de alta un cliente retail (→ cola Central). SureKeep Fase 2 — pista Retail. */
2
+ export interface CustomerCreatedV1 {
3
+ retailCustomerId: string;
4
+ retailerId: string;
5
+ phone: string;
6
+ occurredAt: string;
7
+ }
@@ -0,0 +1,28 @@
1
+ import { KycModalityEnum } from '../enums/KycModalityEnum';
2
+ import { RetailKycStatusEnum } from '../enums/RetailKycStatusEnum';
3
+
4
+ /**
5
+ * Puente retail↔sofom (D24/D35) — emitido en la MISMA TX del `upsert-from-kyc` con el payload OCR
6
+ * completo. Lo consume `loan-credit-business` (idempotente, hidrata `LoanBorrower_GT`) y dispara la
7
+ * apertura de cuenta async. También alimenta CDC→Iceberg (atomicidad efectiva por outbox).
8
+ * SureKeep Fase 2 — pista Retail.
9
+ */
10
+ export interface CustomerKycVerifiedV1 {
11
+ retailCustomerId: string;
12
+ retailerId: string;
13
+ fiadoDirectoryId: string;
14
+ fiadoPeopleId: string;
15
+ phone: string;
16
+ curp: string;
17
+ firstName: string;
18
+ paternalLastName: string;
19
+ maternalLastName: string | null;
20
+ birthDate: string;
21
+ sex: string | null;
22
+ nationality: string | null;
23
+ documentValidUntil: string | null;
24
+ addressRaw: string | null;
25
+ kycStatus: RetailKycStatusEnum;
26
+ kycModality: KycModalityEnum;
27
+ occurredAt: string;
28
+ }
@@ -0,0 +1,9 @@
1
+ /** Emitido cuando se editan datos de contacto/PII de un cliente retail. SureKeep Fase 2 — pista Retail. */
2
+ export interface CustomerUpdatedV1 {
3
+ retailCustomerId: string;
4
+ retailerId: string;
5
+ /** Nombres de los campos modificados (sin sus valores — PII zero-tolerance). */
6
+ updatedFields: string[];
7
+ updatedBy: string;
8
+ occurredAt: string;
9
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Emitido cuando el oficial de Cumplimiento APRUEBA un KYC en revisión manual (D21). Dispara post-pasos
3
+ * idempotentes fuera de la TX (espejo a Fiado + apertura PCF N1 diferida). SureKeep Fase 2 — pista Retail.
4
+ */
5
+ export interface KycApprovedByComplianceV1 {
6
+ retailCustomerId: string;
7
+ retailerId: string;
8
+ reviewedBy: string;
9
+ justification: string;
10
+ metamapVerificationId: string;
11
+ occurredAt: string;
12
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Emitido cuando el oficial de Cumplimiento RECHAZA un KYC en revisión manual (D21).
3
+ * SureKeep Fase 2 — pista Retail.
4
+ */
5
+ export interface KycRejectedByComplianceV1 {
6
+ retailCustomerId: string;
7
+ retailerId: string;
8
+ reviewedBy: string;
9
+ justification: string;
10
+ metamapVerificationId: string;
11
+ occurredAt: string;
12
+ }
@@ -0,0 +1,27 @@
1
+ // Enums
2
+ export * from './enums/AccountStatusEnum';
3
+ export * from './enums/RetailKycStatusEnum';
4
+ export * from './enums/KycModalityEnum';
5
+ export * from './enums/KycReviewResultEnum';
6
+
7
+ // Entidades (planas, con class-validator + @Expose)
8
+ export * from './dtos/KycReview';
9
+ export * from './dtos/RetailCustomer';
10
+
11
+ // Request DTOs (input validado por endpoint)
12
+ export * from './dtos/requests/CreateCustomerRequest';
13
+ export * from './dtos/requests/UpsertCustomerFromKycRequest';
14
+ export * from './dtos/requests/UpdateCustomerRequest';
15
+ export * from './dtos/requests/AccountResultRequest';
16
+ export * from './dtos/requests/KycReviewRequest';
17
+
18
+ // Response DTOs
19
+ export * from './dtos/responses/CustomerResponse';
20
+ export * from './dtos/responses/Customer360Response';
21
+
22
+ // Contratos de eventos (PascalCase + sufijo V1)
23
+ export * from './events/CustomerCreatedV1';
24
+ export * from './events/CustomerUpdatedV1';
25
+ export * from './events/CustomerKycVerifiedV1';
26
+ export * from './events/KycApprovedByComplianceV1';
27
+ export * from './events/KycRejectedByComplianceV1';
@@ -0,0 +1,25 @@
1
+ import type { OtpPurposeEnum } from '../enums/OtpPurposeEnum';
2
+
3
+ /**
4
+ * Verificación OTP (modelo-datos §2). NO es tabla aparte: vive como ítem en
5
+ * `<T>RetailWizardSession_GT` (pk `SESSION#<sessionId>` · sk `OTP#<ulid>`) — misma partición de la
6
+ * sesión → 1 Query trae sesión + OTPs. El código lo genera/valida `messages-business` (D5); aquí
7
+ * solo trackeamos el `messagesLogId`, nunca el código. SureKeep Fase 2 — pista Retail.
8
+ */
9
+ export interface OtpVerification {
10
+ otpId: string;
11
+ sessionId: string;
12
+ purpose: OtpPurposeEnum;
13
+ /** Sustituye al `code_hash` de v0.1 (D5): tracking del envío en messages-business. */
14
+ messagesLogId: string;
15
+ channelsDispatched: string[];
16
+ /** Máx 3 → 423 OTP_MAX_TRIES. */
17
+ attempts: number;
18
+ /** 5 min. */
19
+ expiresAt: string;
20
+ verifiedAt: string | null;
21
+ createdBy: string;
22
+ updatedBy: string;
23
+ createdAt: number;
24
+ updatedAt: number;
25
+ }
@@ -0,0 +1,6 @@
1
+ /** Resultado paginado genérico (cursor opaco `nextToken`). SureKeep Fase 2 — pista Retail. */
2
+ export interface PaginatedResult<T> {
3
+ items: T[];
4
+ count: number;
5
+ nextToken?: string;
6
+ }
@@ -0,0 +1,33 @@
1
+ import type { ProspectStatusEnum } from '../enums/ProspectStatusEnum';
2
+ import type { PendingReasonEnum } from '../enums/PendingReasonEnum';
3
+ import type { ProspectNewCustomer } from './ProspectNewCustomer';
4
+
5
+ /**
6
+ * Prospecto (modelo-datos §4). pk `PROSPECT#<prospectId>` · sk `META` · GSIs
7
+ * `storeId-nextContactAt-index`, `seller-nextContactAt-index`. La reanudación lee la WizardSession
8
+ * real (no se duplica el snapshot del wizard). SureKeep Fase 2 — pista Retail.
9
+ */
10
+ export interface Prospect {
11
+ prospectId: string;
12
+ retailerId: string;
13
+ storeId: string;
14
+ sellerRetailUserId: string;
15
+ /** Identificado vs captura manual (uno de los dos). */
16
+ retailCustomerId: string | null;
17
+ newCustomer: ProspectNewCustomer | null;
18
+ productSku: string | null;
19
+ pendingReason: PendingReasonEnum;
20
+ /** Obligatorio si `pendingReason=OTHER`; ≤200. */
21
+ freeReason: string | null;
22
+ /** Agenda (default mañana); urgencia derivada OVERDUE/TODAY/UPCOMING. */
23
+ nextContactAt: string;
24
+ notes: string | null;
25
+ status: ProspectStatusEnum;
26
+ wizardSessionId: string | null;
27
+ saleId: string | null;
28
+ lastContactAt: string | null;
29
+ createdBy: string;
30
+ updatedBy: string;
31
+ createdAt: number;
32
+ updatedAt: number;
33
+ }
@@ -0,0 +1,13 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString } from 'class-validator';
3
+
4
+ /** Captura manual de un cliente no identificado en un prospecto (`Prospect.newCustomer`). SureKeep Fase 2 — pista Retail. */
5
+ export class ProspectNewCustomer {
6
+ @Expose()
7
+ @IsString()
8
+ name!: string;
9
+
10
+ @Expose()
11
+ @IsString()
12
+ phone!: string;
13
+ }
@@ -0,0 +1,43 @@
1
+ import type { SaleTypeEnum } from '../enums/SaleTypeEnum';
2
+ import type { SaleStatusEnum } from '../enums/SaleStatusEnum';
3
+ import type { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
4
+ import type { ExternalProviderEnum } from '../enums/ExternalProviderEnum';
5
+ import type { CentralSyncStatusEnum } from '../enums/CentralSyncStatusEnum';
6
+ import type { SalePaymentDetail } from './SalePaymentDetail';
7
+
8
+ /**
9
+ * Venta (modelo-datos §3). pk `SALE#<saleId>` · sk `META` · 4 GSIs (`retailerId-soldAt-index`,
10
+ * `storeId-soldAt-index`, `seller-soldAt-index`, `customerId-soldAt-index`). Unicidad de folio vía
11
+ * `UNIQ#FOLIO#<folio>` en la MISMA TransactWriteItems del cierre. SureKeep Fase 2 — pista Retail.
12
+ */
13
+ export interface Sale {
14
+ saleId: string;
15
+ retailerId: string;
16
+ storeId: string;
17
+ sellerRetailUserId: string;
18
+ retailCustomerId: string;
19
+ wizardSessionId: string;
20
+ type: SaleTypeEnum;
21
+ externalProvider: ExternalProviderEnum | null;
22
+ sku: string;
23
+ /** IMEI consumido del silo también en contado (local-first); null en EXTERNAL_REFERRAL (D15). */
24
+ imei: string | null;
25
+ /** 0 en EXTERNAL_REFERRAL. */
26
+ amountCents: number;
27
+ paymentMethod: SalePaymentMethodEnum | null;
28
+ /** `LG-T{storeCode}-VTA-{5hex}-{YYYY}W{ww}` (D11) — único vía `UNIQ#FOLIO`. */
29
+ folio: string;
30
+ paymentDetail: SalePaymentDetail | null;
31
+ soldAt: string;
32
+ cardNumberDelivered: string | null;
33
+ centralSyncStatus: CentralSyncStatusEnum;
34
+ centralTag: string | null;
35
+ status: SaleStatusEnum;
36
+ cancelledAt: string | null;
37
+ /** Reason OBLIGATORIO en cancelación (AuditTrail) — flujo C. */
38
+ cancelReason: string | null;
39
+ createdBy: string;
40
+ updatedBy: string;
41
+ createdAt: number;
42
+ updatedAt: number;
43
+ }
@@ -0,0 +1,33 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsBoolean, IsOptional, IsString } from 'class-validator';
3
+
4
+ /**
5
+ * Detalle del pago según el medio (`Sale.paymentDetail`): efectivo `{cashConfirmedInRegister}` ·
6
+ * tarjeta `{cardLast4, authCode}` · SPEI `{speiTrackingKey, senderClabe?}`. SureKeep Fase 2 — pista Retail.
7
+ */
8
+ export class SalePaymentDetail {
9
+ @Expose()
10
+ @IsOptional()
11
+ @IsBoolean()
12
+ cashConfirmedInRegister?: boolean;
13
+
14
+ @Expose()
15
+ @IsOptional()
16
+ @IsString()
17
+ cardLast4?: string;
18
+
19
+ @Expose()
20
+ @IsOptional()
21
+ @IsString()
22
+ authCode?: string;
23
+
24
+ @Expose()
25
+ @IsOptional()
26
+ @IsString()
27
+ speiTrackingKey?: string;
28
+
29
+ @Expose()
30
+ @IsOptional()
31
+ @IsString()
32
+ senderClabe?: string;
33
+ }
@@ -0,0 +1,31 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
3
+ import { BeneficiaryRelationEnum } from '../enums/BeneficiaryRelationEnum';
4
+
5
+ /**
6
+ * Beneficiario capturado en el paso 10 (bienvenida N2). Se envía a `IAccountBeneficiaryApi.create`
7
+ * (expediente wallet Fiado). El cliente puede NO dar beneficiario (opcional en régimen simplificado N1).
8
+ * SureKeep Fase 2 — pista Retail.
9
+ */
10
+ export class WizardBeneficiary {
11
+ @Expose()
12
+ @IsString()
13
+ fullName!: string;
14
+
15
+ @Expose()
16
+ @IsEnum(BeneficiaryRelationEnum)
17
+ relation!: BeneficiaryRelationEnum;
18
+
19
+ /** Porcentaje de asignación (1-100). Si hay un solo beneficiario, típicamente 100. */
20
+ @Expose()
21
+ @IsOptional()
22
+ @IsInt()
23
+ @Min(1)
24
+ @Max(100)
25
+ percentage?: number;
26
+
27
+ @Expose()
28
+ @IsOptional()
29
+ @IsString()
30
+ freeRelation?: string;
31
+ }
@@ -0,0 +1,29 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsOptional, IsString, Matches } from 'class-validator';
3
+ import { regexIso8601 } from '../../helpers/constans/regex';
4
+
5
+ /** Consentimientos aceptados en el wizard (VL + contrato PCF). SureKeep Fase 2 — pista Retail. */
6
+ export class WizardConsents {
7
+ @Expose()
8
+ @IsString()
9
+ vlTermsVersion!: string;
10
+
11
+ @Expose()
12
+ @IsString()
13
+ pcfContractVersion!: string;
14
+
15
+ @Expose()
16
+ @IsString()
17
+ @Matches(regexIso8601, { message: 'acceptedAt debe ser una fecha ISO 8601' })
18
+ acceptedAt!: string;
19
+
20
+ @Expose()
21
+ @IsOptional()
22
+ @IsString()
23
+ ip?: string;
24
+
25
+ @Expose()
26
+ @IsOptional()
27
+ @IsString()
28
+ deviceFingerprint?: string;
29
+ }
@@ -0,0 +1,26 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum, IsInt, IsOptional, IsString, Matches, Min } from 'class-validator';
3
+ import { regexIso8601 } from '../../helpers/constans/regex';
4
+ import { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
5
+
6
+ /** Registro del pago de contado dentro de la sesión (`WizardSession.payment`). SureKeep Fase 2 — pista Retail. */
7
+ export class WizardPayment {
8
+ @Expose()
9
+ @IsEnum(SalePaymentMethodEnum)
10
+ method!: SalePaymentMethodEnum;
11
+
12
+ @Expose()
13
+ @IsInt()
14
+ @Min(0)
15
+ amountCents!: number;
16
+
17
+ @Expose()
18
+ @IsOptional()
19
+ @IsString()
20
+ detail?: string;
21
+
22
+ @Expose()
23
+ @IsString()
24
+ @Matches(regexIso8601, { message: 'paidAt debe ser una fecha ISO 8601' })
25
+ paidAt!: string;
26
+ }