@fiado/type-kit 3.193.0 → 3.195.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/helpers/constans/regex.d.ts +3 -0
- package/bin/helpers/constans/regex.js +12 -1
- package/bin/index.d.ts +2 -0
- package/bin/index.js +7 -1
- package/bin/retailCustomer/dtos/KycReview.d.ts +19 -0
- package/bin/retailCustomer/dtos/KycReview.js +56 -0
- package/bin/retailCustomer/dtos/RetailCustomer.d.ts +37 -0
- package/bin/retailCustomer/dtos/RetailCustomer.js +160 -0
- package/bin/retailCustomer/dtos/requests/AccountResultRequest.d.ts +13 -0
- package/bin/retailCustomer/dtos/requests/AccountResultRequest.js +48 -0
- package/bin/retailCustomer/dtos/requests/CreateCustomerRequest.d.ts +10 -0
- package/bin/retailCustomer/dtos/requests/CreateCustomerRequest.js +45 -0
- package/bin/retailCustomer/dtos/requests/KycReviewRequest.d.ts +10 -0
- package/bin/retailCustomer/dtos/requests/KycReviewRequest.js +33 -0
- package/bin/retailCustomer/dtos/requests/UpdateCustomerRequest.d.ts +10 -0
- package/bin/retailCustomer/dtos/requests/UpdateCustomerRequest.js +47 -0
- package/bin/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.d.ts +22 -0
- package/bin/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.js +97 -0
- package/bin/retailCustomer/dtos/responses/Customer360Response.d.ts +33 -0
- package/bin/retailCustomer/dtos/responses/Customer360Response.js +2 -0
- package/bin/retailCustomer/dtos/responses/CustomerResponse.d.ts +30 -0
- package/bin/retailCustomer/dtos/responses/CustomerResponse.js +2 -0
- package/bin/retailCustomer/enums/AccountStatusEnum.d.ts +9 -0
- package/bin/retailCustomer/enums/AccountStatusEnum.js +13 -0
- package/bin/retailCustomer/enums/KycModalityEnum.d.ts +9 -0
- package/bin/retailCustomer/enums/KycModalityEnum.js +13 -0
- package/bin/retailCustomer/enums/KycReviewResultEnum.d.ts +8 -0
- package/bin/retailCustomer/enums/KycReviewResultEnum.js +12 -0
- package/bin/retailCustomer/enums/RetailKycStatusEnum.d.ts +13 -0
- package/bin/retailCustomer/enums/RetailKycStatusEnum.js +17 -0
- package/bin/retailCustomer/events/CustomerCreatedV1.d.ts +7 -0
- package/bin/retailCustomer/events/CustomerCreatedV1.js +2 -0
- package/bin/retailCustomer/events/CustomerKycVerifiedV1.d.ts +27 -0
- package/bin/retailCustomer/events/CustomerKycVerifiedV1.js +2 -0
- package/bin/retailCustomer/events/CustomerUpdatedV1.d.ts +9 -0
- package/bin/retailCustomer/events/CustomerUpdatedV1.js +2 -0
- package/bin/retailCustomer/events/KycApprovedByComplianceV1.d.ts +12 -0
- package/bin/retailCustomer/events/KycApprovedByComplianceV1.js +2 -0
- package/bin/retailCustomer/events/KycRejectedByComplianceV1.d.ts +12 -0
- package/bin/retailCustomer/events/KycRejectedByComplianceV1.js +2 -0
- package/bin/retailCustomer/index.d.ts +18 -0
- package/bin/retailCustomer/index.js +39 -0
- package/bin/retailOrg/dtos/requests/ProvisionRetailUserRequest.d.ts +38 -0
- package/bin/retailOrg/dtos/requests/ProvisionRetailUserRequest.js +95 -0
- package/bin/retailOrg/index.d.ts +1 -0
- package/bin/retailOrg/index.js +1 -0
- package/bin/retailWizard/dtos/OtpVerification.d.ts +24 -0
- package/bin/retailWizard/dtos/OtpVerification.js +2 -0
- package/bin/retailWizard/dtos/PaginatedResult.d.ts +6 -0
- package/bin/retailWizard/dtos/PaginatedResult.js +2 -0
- package/bin/retailWizard/dtos/Prospect.d.ts +32 -0
- package/bin/retailWizard/dtos/Prospect.js +2 -0
- package/bin/retailWizard/dtos/ProspectNewCustomer.d.ts +5 -0
- package/bin/retailWizard/dtos/ProspectNewCustomer.js +28 -0
- package/bin/retailWizard/dtos/Sale.d.ts +42 -0
- package/bin/retailWizard/dtos/Sale.js +2 -0
- package/bin/retailWizard/dtos/SalePaymentDetail.d.ts +11 -0
- package/bin/retailWizard/dtos/SalePaymentDetail.js +51 -0
- package/bin/retailWizard/dtos/WizardBeneficiary.d.ts +13 -0
- package/bin/retailWizard/dtos/WizardBeneficiary.js +47 -0
- package/bin/retailWizard/dtos/WizardConsents.d.ts +8 -0
- package/bin/retailWizard/dtos/WizardConsents.js +47 -0
- package/bin/retailWizard/dtos/WizardPayment.d.ts +8 -0
- package/bin/retailWizard/dtos/WizardPayment.js +43 -0
- package/bin/retailWizard/dtos/WizardSession.d.ts +65 -0
- package/bin/retailWizard/dtos/WizardSession.js +2 -0
- package/bin/retailWizard/dtos/WizardWelcome.d.ts +9 -0
- package/bin/retailWizard/dtos/WizardWelcome.js +50 -0
- package/bin/retailWizard/dtos/requests/AddProductRequest.d.ts +10 -0
- package/bin/retailWizard/dtos/requests/AddProductRequest.js +38 -0
- package/bin/retailWizard/dtos/requests/AppInstallLinkRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/AppInstallLinkRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/CancelSaleRequest.d.ts +8 -0
- package/bin/retailWizard/dtos/requests/CancelSaleRequest.js +28 -0
- package/bin/retailWizard/dtos/requests/CancelSessionRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/CancelSessionRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/CompleteSaleRequest.d.ts +9 -0
- package/bin/retailWizard/dtos/requests/CompleteSaleRequest.js +29 -0
- package/bin/retailWizard/dtos/requests/ConfirmAddressRequest.d.ts +9 -0
- package/bin/retailWizard/dtos/requests/ConfirmAddressRequest.js +34 -0
- package/bin/retailWizard/dtos/requests/ConsentsRequest.d.ts +11 -0
- package/bin/retailWizard/dtos/requests/ConsentsRequest.js +35 -0
- package/bin/retailWizard/dtos/requests/CreateProspectRequest.d.ts +15 -0
- package/bin/retailWizard/dtos/requests/CreateProspectRequest.js +67 -0
- package/bin/retailWizard/dtos/requests/DeleteProductRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/DeleteProductRequest.js +23 -0
- package/bin/retailWizard/dtos/requests/ExternalReferralRequest.d.ts +8 -0
- package/bin/retailWizard/dtos/requests/ExternalReferralRequest.js +27 -0
- package/bin/retailWizard/dtos/requests/KycConfirmRequest.d.ts +10 -0
- package/bin/retailWizard/dtos/requests/KycConfirmRequest.js +35 -0
- package/bin/retailWizard/dtos/requests/KycManualRequest.d.ts +8 -0
- package/bin/retailWizard/dtos/requests/KycManualRequest.js +28 -0
- package/bin/retailWizard/dtos/requests/KycPrepareRequest.d.ts +10 -0
- package/bin/retailWizard/dtos/requests/KycPrepareRequest.js +27 -0
- package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.js +23 -0
- package/bin/retailWizard/dtos/requests/MarkProspectLostRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/MarkProspectLostRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/OccupationRequest.d.ts +10 -0
- package/bin/retailWizard/dtos/requests/OccupationRequest.js +35 -0
- package/bin/retailWizard/dtos/requests/RegisterPaymentRequest.d.ts +12 -0
- package/bin/retailWizard/dtos/requests/RegisterPaymentRequest.js +42 -0
- package/bin/retailWizard/dtos/requests/ResendOtpRequest.d.ts +8 -0
- package/bin/retailWizard/dtos/requests/ResendOtpRequest.js +28 -0
- package/bin/retailWizard/dtos/requests/SaveBeneficiaryRequest.d.ts +5 -0
- package/bin/retailWizard/dtos/requests/SaveBeneficiaryRequest.js +25 -0
- package/bin/retailWizard/dtos/requests/SetPaymentMethodRequest.d.ts +5 -0
- package/bin/retailWizard/dtos/requests/SetPaymentMethodRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.js +23 -0
- package/bin/retailWizard/dtos/requests/SkipOtpRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/SkipOtpRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/StartSessionRequest.d.ts +10 -0
- package/bin/retailWizard/dtos/requests/StartSessionRequest.js +35 -0
- package/bin/retailWizard/dtos/requests/UpdateProspectRequest.d.ts +8 -0
- package/bin/retailWizard/dtos/requests/UpdateProspectRequest.js +45 -0
- package/bin/retailWizard/dtos/requests/VerifyOtpRequest.d.ts +4 -0
- package/bin/retailWizard/dtos/requests/VerifyOtpRequest.js +24 -0
- package/bin/retailWizard/dtos/requests/WelcomeTopupRequest.d.ts +7 -0
- package/bin/retailWizard/dtos/requests/WelcomeTopupRequest.js +27 -0
- package/bin/retailWizard/enums/BeneficiaryRelationEnum.d.ts +18 -0
- package/bin/retailWizard/enums/BeneficiaryRelationEnum.js +22 -0
- package/bin/retailWizard/enums/CentralSyncStatusEnum.d.ts +14 -0
- package/bin/retailWizard/enums/CentralSyncStatusEnum.js +18 -0
- package/bin/retailWizard/enums/ExternalProviderEnum.d.ts +7 -0
- package/bin/retailWizard/enums/ExternalProviderEnum.js +11 -0
- package/bin/retailWizard/enums/FiadoPhoneStatusEnum.d.ts +15 -0
- package/bin/retailWizard/enums/FiadoPhoneStatusEnum.js +19 -0
- package/bin/retailWizard/enums/OccupationEnum.d.ts +13 -0
- package/bin/retailWizard/enums/OccupationEnum.js +17 -0
- package/bin/retailWizard/enums/OtpPurposeEnum.d.ts +10 -0
- package/bin/retailWizard/enums/OtpPurposeEnum.js +14 -0
- package/bin/retailWizard/enums/PaymentMethodEnum.d.ts +12 -0
- package/bin/retailWizard/enums/PaymentMethodEnum.js +16 -0
- package/bin/retailWizard/enums/PendingReasonEnum.d.ts +21 -0
- package/bin/retailWizard/enums/PendingReasonEnum.js +25 -0
- package/bin/retailWizard/enums/ProspectStatusEnum.d.ts +16 -0
- package/bin/retailWizard/enums/ProspectStatusEnum.js +20 -0
- package/bin/retailWizard/enums/SalePaymentMethodEnum.d.ts +6 -0
- package/bin/retailWizard/enums/SalePaymentMethodEnum.js +10 -0
- package/bin/retailWizard/enums/SaleStatusEnum.d.ts +10 -0
- package/bin/retailWizard/enums/SaleStatusEnum.js +14 -0
- package/bin/retailWizard/enums/SaleTypeEnum.d.ts +13 -0
- package/bin/retailWizard/enums/SaleTypeEnum.js +17 -0
- package/bin/retailWizard/enums/WizardStateEnum.d.ts +18 -0
- package/bin/retailWizard/enums/WizardStateEnum.js +22 -0
- package/bin/retailWizard/enums/WizardStepEnum.d.ts +13 -0
- package/bin/retailWizard/enums/WizardStepEnum.js +17 -0
- package/bin/retailWizard/events/SaleCancelledV1.d.ts +13 -0
- package/bin/retailWizard/events/SaleCancelledV1.js +2 -0
- package/bin/retailWizard/events/SaleCompletedV1.d.ts +17 -0
- package/bin/retailWizard/events/SaleCompletedV1.js +2 -0
- package/bin/retailWizard/events/SessionExpiredV1.d.ts +10 -0
- package/bin/retailWizard/events/SessionExpiredV1.js +2 -0
- package/bin/retailWizard/index.d.ts +54 -0
- package/bin/retailWizard/index.js +76 -0
- package/package.json +1 -1
- package/src/helpers/constans/regex.ts +16 -0
- package/src/index.ts +6 -0
- package/src/retailCustomer/dtos/KycReview.ts +41 -0
- package/src/retailCustomer/dtos/RetailCustomer.ts +132 -0
- package/src/retailCustomer/dtos/requests/AccountResultRequest.ts +34 -0
- package/src/retailCustomer/dtos/requests/CreateCustomerRequest.ts +28 -0
- package/src/retailCustomer/dtos/requests/KycReviewRequest.ts +18 -0
- package/src/retailCustomer/dtos/requests/UpdateCustomerRequest.ts +30 -0
- package/src/retailCustomer/dtos/requests/UpsertCustomerFromKycRequest.ts +79 -0
- package/src/retailCustomer/dtos/responses/Customer360Response.ts +37 -0
- package/src/retailCustomer/dtos/responses/CustomerResponse.ts +31 -0
- package/src/retailCustomer/enums/AccountStatusEnum.ts +9 -0
- package/src/retailCustomer/enums/KycModalityEnum.ts +9 -0
- package/src/retailCustomer/enums/KycReviewResultEnum.ts +8 -0
- package/src/retailCustomer/enums/RetailKycStatusEnum.ts +13 -0
- package/src/retailCustomer/events/CustomerCreatedV1.ts +7 -0
- package/src/retailCustomer/events/CustomerKycVerifiedV1.ts +28 -0
- package/src/retailCustomer/events/CustomerUpdatedV1.ts +9 -0
- package/src/retailCustomer/events/KycApprovedByComplianceV1.ts +12 -0
- package/src/retailCustomer/events/KycRejectedByComplianceV1.ts +12 -0
- package/src/retailCustomer/index.ts +27 -0
- package/src/retailOrg/dtos/requests/ProvisionRetailUserRequest.ts +82 -0
- package/src/retailOrg/index.ts +1 -0
- package/src/retailWizard/dtos/OtpVerification.ts +25 -0
- package/src/retailWizard/dtos/PaginatedResult.ts +6 -0
- package/src/retailWizard/dtos/Prospect.ts +33 -0
- package/src/retailWizard/dtos/ProspectNewCustomer.ts +13 -0
- package/src/retailWizard/dtos/Sale.ts +43 -0
- package/src/retailWizard/dtos/SalePaymentDetail.ts +33 -0
- package/src/retailWizard/dtos/WizardBeneficiary.ts +31 -0
- package/src/retailWizard/dtos/WizardConsents.ts +29 -0
- package/src/retailWizard/dtos/WizardPayment.ts +26 -0
- package/src/retailWizard/dtos/WizardSession.ts +68 -0
- package/src/retailWizard/dtos/WizardWelcome.ts +31 -0
- package/src/retailWizard/dtos/requests/AddProductRequest.ts +22 -0
- package/src/retailWizard/dtos/requests/AppInstallLinkRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/CancelSaleRequest.ts +14 -0
- package/src/retailWizard/dtos/requests/CancelSessionRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/CompleteSaleRequest.ts +15 -0
- package/src/retailWizard/dtos/requests/ConfirmAddressRequest.ts +22 -0
- package/src/retailWizard/dtos/requests/ConsentsRequest.ts +21 -0
- package/src/retailWizard/dtos/requests/CreateProspectRequest.ts +47 -0
- package/src/retailWizard/dtos/requests/DeleteProductRequest.ts +9 -0
- package/src/retailWizard/dtos/requests/ExternalReferralRequest.ts +13 -0
- package/src/retailWizard/dtos/requests/KycConfirmRequest.ts +23 -0
- package/src/retailWizard/dtos/requests/KycManualRequest.ts +17 -0
- package/src/retailWizard/dtos/requests/KycPrepareRequest.ts +16 -0
- package/src/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.ts +9 -0
- package/src/retailWizard/dtos/requests/MarkProspectLostRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/OccupationRequest.ts +20 -0
- package/src/retailWizard/dtos/requests/RegisterPaymentRequest.ts +26 -0
- package/src/retailWizard/dtos/requests/ResendOtpRequest.ts +14 -0
- package/src/retailWizard/dtos/requests/SaveBeneficiaryRequest.ts +11 -0
- package/src/retailWizard/dtos/requests/SetPaymentMethodRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/SignBeneficiaryAnnexRequest.ts +9 -0
- package/src/retailWizard/dtos/requests/SkipOtpRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/StartSessionRequest.ts +21 -0
- package/src/retailWizard/dtos/requests/UpdateProspectRequest.ts +28 -0
- package/src/retailWizard/dtos/requests/VerifyOtpRequest.ts +10 -0
- package/src/retailWizard/dtos/requests/WelcomeTopupRequest.ts +13 -0
- package/src/retailWizard/enums/BeneficiaryRelationEnum.ts +18 -0
- package/src/retailWizard/enums/CentralSyncStatusEnum.ts +14 -0
- package/src/retailWizard/enums/ExternalProviderEnum.ts +7 -0
- package/src/retailWizard/enums/FiadoPhoneStatusEnum.ts +15 -0
- package/src/retailWizard/enums/OccupationEnum.ts +13 -0
- package/src/retailWizard/enums/OtpPurposeEnum.ts +10 -0
- package/src/retailWizard/enums/PaymentMethodEnum.ts +12 -0
- package/src/retailWizard/enums/PendingReasonEnum.ts +21 -0
- package/src/retailWizard/enums/ProspectStatusEnum.ts +16 -0
- package/src/retailWizard/enums/SalePaymentMethodEnum.ts +6 -0
- package/src/retailWizard/enums/SaleStatusEnum.ts +10 -0
- package/src/retailWizard/enums/SaleTypeEnum.ts +13 -0
- package/src/retailWizard/enums/WizardStateEnum.ts +18 -0
- package/src/retailWizard/enums/WizardStepEnum.ts +13 -0
- package/src/retailWizard/events/SaleCancelledV1.ts +13 -0
- package/src/retailWizard/events/SaleCompletedV1.ts +17 -0
- package/src/retailWizard/events/SessionExpiredV1.ts +10 -0
- package/src/retailWizard/index.ts +65 -0
|
@@ -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,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,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,82 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsArray, IsEmail, IsEnum, IsOptional, IsString } from 'class-validator';
|
|
3
|
+
import { CollectorSeniorityEnum } from '../../enums/CollectorSeniorityEnum';
|
|
4
|
+
import { EmploymentTypeEnum } from '../../enums/EmploymentTypeEnum';
|
|
5
|
+
import { PermissionScope } from '../../../platformRbac/enums/PermissionScope';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Body de POST /retailers/:retailerId/users/provision — alta de usuario retail ORQUESTADA (SureKeep F1,
|
|
9
|
+
* scope mirror). Invierte el orden del alta clásica: en vez de recibir un `cognitoSub` ya existente,
|
|
10
|
+
* retail-org provisiona al usuario en RBAC (Cognito + SharedUser + RoleAssignment) y luego crea el
|
|
11
|
+
* `RetailUser` con el `cognitoSub` retornado. El `retailerId` sale del path.
|
|
12
|
+
*
|
|
13
|
+
* Diferencia con {@link CreateRetailUserRequest}: aquí van `email` + `roleId` + `scope` + `scopeRef`
|
|
14
|
+
* (el grant de RBAC) en lugar de `cognitoSub`. El resto de los atributos comerciales son idénticos.
|
|
15
|
+
*/
|
|
16
|
+
export class ProvisionRetailUserRequest {
|
|
17
|
+
/** Identidad de login del usuario a provisionar en Cognito/RBAC. */
|
|
18
|
+
@Expose()
|
|
19
|
+
@IsEmail()
|
|
20
|
+
email!: string;
|
|
21
|
+
|
|
22
|
+
/** Rol de RBAC a asignar (id del rol del tenant). */
|
|
23
|
+
@Expose()
|
|
24
|
+
@IsString()
|
|
25
|
+
roleId!: string;
|
|
26
|
+
|
|
27
|
+
/** Scope del grant (ej. LEVEL_1 = retailer, LEVEL_3 = tienda). */
|
|
28
|
+
@Expose()
|
|
29
|
+
@IsEnum(PermissionScope)
|
|
30
|
+
scope!: PermissionScope;
|
|
31
|
+
|
|
32
|
+
/** Referencia del scope (ej. retailerId para LEVEL_1, storeId para LEVEL_3). */
|
|
33
|
+
@Expose()
|
|
34
|
+
@IsString()
|
|
35
|
+
scopeRef!: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Nombre de display — etiqueta de conveniencia (DEC-SKF1-021). La identidad real vive en RBAC
|
|
39
|
+
* (DEC-SKF1-005); esto es solo un rótulo para reconocer al usuario en el backoffice. Opcional.
|
|
40
|
+
*/
|
|
41
|
+
@Expose()
|
|
42
|
+
@IsOptional()
|
|
43
|
+
@IsString()
|
|
44
|
+
displayName?: string;
|
|
45
|
+
|
|
46
|
+
@Expose()
|
|
47
|
+
@IsString()
|
|
48
|
+
homeStoreId!: string;
|
|
49
|
+
|
|
50
|
+
@Expose()
|
|
51
|
+
@IsEnum(EmploymentTypeEnum)
|
|
52
|
+
employmentType!: EmploymentTypeEnum;
|
|
53
|
+
|
|
54
|
+
@Expose()
|
|
55
|
+
@IsString()
|
|
56
|
+
commissionTier!: string;
|
|
57
|
+
|
|
58
|
+
/** Zona de operación del usuario; `null` si no está acotado a una zona. */
|
|
59
|
+
@Expose()
|
|
60
|
+
@IsOptional()
|
|
61
|
+
@IsString()
|
|
62
|
+
zoneId!: string | null;
|
|
63
|
+
|
|
64
|
+
/** Teléfono de contacto del usuario retail; opcional. */
|
|
65
|
+
@Expose()
|
|
66
|
+
@IsOptional()
|
|
67
|
+
@IsString()
|
|
68
|
+
phone?: string;
|
|
69
|
+
|
|
70
|
+
/** Seniority del cobrador; solo aplica a usuarios retail con rol de cobrador. */
|
|
71
|
+
@Expose()
|
|
72
|
+
@IsOptional()
|
|
73
|
+
@IsEnum(CollectorSeniorityEnum)
|
|
74
|
+
collectorSeniority?: CollectorSeniorityEnum;
|
|
75
|
+
|
|
76
|
+
/** Tiendas que cubre el cobrador (zona de cobranza); opcional. */
|
|
77
|
+
@Expose()
|
|
78
|
+
@IsOptional()
|
|
79
|
+
@IsArray()
|
|
80
|
+
@IsString({ each: true })
|
|
81
|
+
coverageStoreIds?: string[];
|
|
82
|
+
}
|
package/src/retailOrg/index.ts
CHANGED
|
@@ -35,6 +35,7 @@ export * from './dtos/requests/CreateStoreRequest';
|
|
|
35
35
|
export * from './dtos/requests/UpdateStoreRequest';
|
|
36
36
|
export * from './dtos/requests/ChangeStoreStatusRequest';
|
|
37
37
|
export * from './dtos/requests/CreateRetailUserRequest';
|
|
38
|
+
export * from './dtos/requests/ProvisionRetailUserRequest';
|
|
38
39
|
export * from './dtos/requests/UpdateRetailUserRequest';
|
|
39
40
|
export * from './dtos/requests/ChangeRetailUserStatusRequest';
|
|
40
41
|
export * from './dtos/requests/TransferRetailUserRequest';
|
|
@@ -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,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
|
+
}
|