@fiado/type-kit 3.328.0 → 3.331.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/.github/workflows/npm-publish.yml +30 -0
- package/_test_/unit/loanCredit/dtos/loanDeviceContract.test.ts +283 -0
- package/_test_/unit/places/GetNearbyPlacesRequest.test.ts +70 -0
- package/_test_/unit/retailWizard/wizardBlocked.test.ts +3 -2
- package/bin/identity/dtos/ManualApproval.d.ts +9 -0
- package/bin/identity/dtos/PeopleResponse.d.ts +4 -0
- package/bin/identity/dtos/PeopleUpdateRequest.d.ts +2 -0
- package/bin/loanCredit/constants/LoanDeviceBatchLimits.d.ts +2 -0
- package/bin/loanCredit/constants/LoanDeviceBatchLimits.js +5 -0
- package/bin/loanCredit/dtos/LoanDeviceCreditRefItem.d.ts +4 -0
- package/bin/{retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.js → loanCredit/dtos/LoanDeviceCreditRefItem.js} +6 -6
- package/bin/loanCredit/dtos/LoanDeviceEnrollItem.d.ts +11 -0
- package/bin/loanCredit/dtos/LoanDeviceEnrollItem.js +62 -0
- package/bin/loanCredit/dtos/LoanDeviceManualLockItem.d.ts +9 -0
- package/bin/loanCredit/dtos/LoanDeviceManualLockItem.js +37 -0
- package/bin/loanCredit/dtos/LoanDeviceOperationResult.d.ts +9 -0
- package/bin/loanCredit/dtos/LoanDeviceOperationResult.js +8 -0
- package/bin/loanCredit/dtos/LoanDeviceResult.d.ts +9 -0
- package/bin/loanCredit/dtos/LoanDeviceResult.js +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceEnrollRequest.d.ts +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceEnrollRequest.js +37 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.d.ts +4 -0
- package/bin/{retailWizard/dtos/requests/CompleteSaleRequest.js → loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.js} +12 -13
- package/bin/loanCredit/dtos/requests/LoanDeviceLastSeenRequest.d.ts +4 -0
- package/bin/{retailCards/dtos/requests/CancelCardRequest.js → loanCredit/dtos/requests/LoanDeviceLastSeenRequest.js} +14 -8
- package/bin/loanCredit/dtos/requests/LoanDeviceManualLockRequest.d.ts +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceManualLockRequest.js +37 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.d.ts +7 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.js +37 -0
- package/bin/loanCredit/dtos/requests/LoanDeviceStatusRequest.d.ts +4 -0
- package/bin/{retailCards/dtos/requests/AssignCardRequest.js → loanCredit/dtos/requests/LoanDeviceStatusRequest.js} +14 -16
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResult.d.ts +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.d.ts +16 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResult.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLockResult.d.ts +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceLockResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceManualLockResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceManualLockResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceStatusResponse.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceStatusResponse.js +7 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceStatusResult.d.ts +28 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceStatusResult.js +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceUnlockResult.d.ts +8 -0
- package/bin/loanCredit/dtos/responses/LoanDeviceUnlockResult.js +8 -0
- package/bin/loanCredit/enums/LoanDeviceLockReasonEnum.d.ts +12 -0
- package/bin/loanCredit/enums/LoanDeviceLockReasonEnum.js +16 -0
- package/bin/loanCredit/enums/LoanDeviceMdmStatusEnum.d.ts +25 -0
- package/bin/loanCredit/enums/LoanDeviceMdmStatusEnum.js +29 -0
- package/bin/loanCredit/index.d.ts +34 -0
- package/bin/loanCredit/index.js +45 -1
- package/bin/places/dtos/GetNearbyPlacesRequest.d.ts +13 -0
- package/bin/places/dtos/GetNearbyPlacesRequest.js +6 -0
- package/bin/places/dtos/GetNearbyPlacesResponse.d.ts +14 -0
- package/bin/retailWizard/enums/BlockedCategoryEnum.d.ts +6 -1
- package/bin/retailWizard/enums/BlockedCategoryEnum.js +5 -0
- package/bin/retailWizard/enums/PendingReasonEnum.d.ts +4 -2
- package/bin/retailWizard/enums/PendingReasonEnum.js +4 -1
- package/package.json +2 -2
- package/src/identity/dtos/ManualApproval.ts +10 -0
- package/src/identity/dtos/PeopleResponse.ts +4 -0
- package/src/identity/dtos/PeopleUpdateRequest.ts +2 -0
- package/src/loanCredit/constants/LoanDeviceBatchLimits.ts +2 -0
- package/src/loanCredit/dtos/LoanDeviceCreditRefItem.ts +9 -0
- package/src/loanCredit/dtos/LoanDeviceEnrollItem.ts +47 -0
- package/src/loanCredit/dtos/LoanDeviceManualLockItem.ts +22 -0
- package/src/loanCredit/dtos/LoanDeviceOperationResult.ts +11 -0
- package/src/loanCredit/dtos/LoanDeviceResult.ts +12 -0
- package/src/loanCredit/dtos/requests/LoanDeviceEnrollRequest.ts +23 -0
- package/src/loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.ts +14 -0
- package/src/loanCredit/dtos/requests/LoanDeviceLastSeenRequest.ts +14 -0
- package/src/loanCredit/dtos/requests/LoanDeviceManualLockRequest.ts +23 -0
- package/src/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.ts +23 -0
- package/src/loanCredit/dtos/requests/LoanDeviceStatusRequest.ts +14 -0
- package/src/loanCredit/dtos/responses/LoanDeviceEnrollResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceEnrollResult.ts +8 -0
- package/src/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.ts +21 -0
- package/src/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceLastSeenResult.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceLockResult.ts +10 -0
- package/src/loanCredit/dtos/responses/LoanDeviceManualLockResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceStatusResponse.ts +6 -0
- package/src/loanCredit/dtos/responses/LoanDeviceStatusResult.ts +39 -0
- package/src/loanCredit/dtos/responses/LoanDeviceUnlockResult.ts +10 -0
- package/src/loanCredit/enums/LoanDeviceLockReasonEnum.ts +12 -0
- package/src/loanCredit/enums/LoanDeviceMdmStatusEnum.ts +25 -0
- package/src/loanCredit/index.ts +41 -0
- package/src/mdm/README.md +4 -10
- package/src/places/dtos/GetNearbyPlacesRequest.ts +18 -1
- package/src/places/dtos/GetNearbyPlacesResponse.ts +14 -0
- package/src/retailWizard/enums/BlockedCategoryEnum.ts +5 -0
- package/src/retailWizard/enums/PendingReasonEnum.ts +4 -1
- package/bin/benefitCenter/enums/BenefitFlowEnum.d.ts +0 -11
- package/bin/benefitCenter/enums/BenefitFlowEnum.js +0 -15
- package/bin/identity/enums/SelfieSourceEnum.d.ts +0 -10
- package/bin/identity/enums/SelfieSourceEnum.js +0 -14
- package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.d.ts +0 -11
- package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.js +0 -46
- package/bin/loanCredit/enums/ClientLevelEnum.d.ts +0 -11
- package/bin/loanCredit/enums/ClientLevelEnum.js +0 -15
- package/bin/retailCards/dtos/requests/AssignCardRequest.d.ts +0 -6
- package/bin/retailCards/dtos/requests/CancelCardRequest.d.ts +0 -5
- package/bin/retailCards/dtos/responses/RetailCardResponse.d.ts +0 -12
- package/bin/retailCards/dtos/responses/RetailCardResponse.js +0 -2
- package/bin/retailCards/enums/CardBatchStatusEnum.d.ts +0 -17
- package/bin/retailCards/enums/CardBatchStatusEnum.js +0 -21
- package/bin/retailCards/enums/CardCancelReasonEnum.d.ts +0 -13
- package/bin/retailCards/enums/CardCancelReasonEnum.js +0 -17
- package/bin/retailCards/enums/RetailCardStatusEnum.d.ts +0 -13
- package/bin/retailCards/enums/RetailCardStatusEnum.js +0 -17
- package/bin/retailCards/events/RetailCardAssignedV1.d.ts +0 -10
- package/bin/retailCards/events/RetailCardAssignedV1.js +0 -2
- package/bin/retailCards/events/RetailCardCancelledV1.d.ts +0 -9
- package/bin/retailCards/events/RetailCardCancelledV1.js +0 -2
- package/bin/retailCards/events/RetailCardReleasedV1.d.ts +0 -7
- package/bin/retailCards/events/RetailCardReleasedV1.js +0 -2
- package/bin/retailWizard/dtos/requests/CompleteSaleRequest.d.ts +0 -9
- package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.d.ts +0 -4
- package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +0 -6
- package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +0 -31
- package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +0 -7
- package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +0 -6
- package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +0 -11
- package/bin/walletFunding/dtos/CancelFundingRequest.js +0 -33
- package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +0 -14
- package/bin/walletFunding/dtos/CancelFundingResponse.js +0 -12
- package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +0 -3
- package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +0 -21
- package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +0 -7
- package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +0 -6
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: "Publish to npm"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ develop ]
|
|
6
|
+
paths-ignore:
|
|
7
|
+
- '**.md'
|
|
8
|
+
- 'docs/**'
|
|
9
|
+
- '.gitignore'
|
|
10
|
+
- '.npmignore'
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
inputs:
|
|
13
|
+
dry-run:
|
|
14
|
+
description: 'Corre build, test y npm publish --dry-run sin publicar de verdad'
|
|
15
|
+
required: false
|
|
16
|
+
default: false
|
|
17
|
+
type: boolean
|
|
18
|
+
|
|
19
|
+
concurrency:
|
|
20
|
+
group: npm-publish-${{ github.ref }}
|
|
21
|
+
cancel-in-progress: false
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
publish:
|
|
25
|
+
uses: Fiado-Today/github-workflows/.github/workflows/npm-publish.yml@develop
|
|
26
|
+
permissions:
|
|
27
|
+
contents: write
|
|
28
|
+
with:
|
|
29
|
+
dry-run: ${{ inputs.dry-run == true }}
|
|
30
|
+
secrets: inherit
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate, ValidationError } from 'class-validator';
|
|
4
|
+
import { LoanDeviceEnrollRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceEnrollRequest';
|
|
5
|
+
import { LoanDeviceEnrollStatusRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest';
|
|
6
|
+
import { LoanDeviceLastSeenRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceLastSeenRequest';
|
|
7
|
+
import { LoanDeviceStatusRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceStatusRequest';
|
|
8
|
+
import { LoanDeviceManualLockRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceManualLockRequest';
|
|
9
|
+
import { LoanDeviceManualUnlockRequest } from '../../../../src/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest';
|
|
10
|
+
import { LoanDeviceLockReasonEnum } from '../../../../src/loanCredit/enums/LoanDeviceLockReasonEnum';
|
|
11
|
+
import { LOAN_DEVICE_MAX_BATCH } from '../../../../src/loanCredit/constants/LoanDeviceBatchLimits';
|
|
12
|
+
|
|
13
|
+
const CREDIT_ID = '5f7c8a90-1234-4abc-9def-0123456789ab';
|
|
14
|
+
const OTHER_CREDIT_ID = '5f7c8a90-1234-4abc-9def-0123456789ac';
|
|
15
|
+
|
|
16
|
+
/** Genera un creditId válido y distinto por índice, para armar lotes grandes. */
|
|
17
|
+
const creditIdAt = (index: number): string =>
|
|
18
|
+
`5f7c8a90-1234-4abc-9def-${index.toString(16).padStart(12, '0')}`;
|
|
19
|
+
|
|
20
|
+
/** True si el error de `property` trae ese constraint puntual (no solo "algo falló"). */
|
|
21
|
+
const hasConstraint = (errors: ValidationError[], property: string, constraint: string): boolean =>
|
|
22
|
+
errors.some(e => e.property === property && Boolean(e.constraints?.[constraint]));
|
|
23
|
+
|
|
24
|
+
const validEnrollItem = {
|
|
25
|
+
creditId: CREDIT_ID,
|
|
26
|
+
imei: '351756051523999',
|
|
27
|
+
productSku: 'SKU-MOTO-G54-128',
|
|
28
|
+
termMonths: 6,
|
|
29
|
+
firstDueDate: '2026-09-01',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const validEnroll = {
|
|
33
|
+
items: [validEnrollItem],
|
|
34
|
+
operationReference: 'enroll-2026-08-18-0001',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const enrollWithItems = (items: unknown[]) => ({ ...validEnroll, items });
|
|
38
|
+
|
|
39
|
+
describe('LoanDeviceEnrollRequest', () => {
|
|
40
|
+
it('valida happy path (0 errores)', async () => {
|
|
41
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, validEnroll);
|
|
42
|
+
const errors = await validate(dto);
|
|
43
|
+
expect(errors).toEqual([]);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('valida con imei2 presente', async () => {
|
|
47
|
+
const items = [{ ...validEnrollItem, imei2: '351756051523998' }];
|
|
48
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
49
|
+
const errors = await validate(dto);
|
|
50
|
+
expect(errors).toEqual([]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('falla si items viene vacío', async () => {
|
|
54
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems([]));
|
|
55
|
+
const errors = await validate(dto);
|
|
56
|
+
expect(errors.some(e => e.property === 'items')).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('falla si el imei tiene 14 dígitos', async () => {
|
|
60
|
+
const items = [{ ...validEnrollItem, imei: '35175605152399' }];
|
|
61
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
62
|
+
const errors = await validate(dto);
|
|
63
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
64
|
+
expect(itemsError).toBeDefined();
|
|
65
|
+
expect(JSON.stringify(itemsError)).toContain('imei');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('falla si el imei tiene 15 caracteres pero no son dígitos', async () => {
|
|
69
|
+
const items = [{ ...validEnrollItem, imei: 'ABCDEFGHIJKLMNO' }];
|
|
70
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
71
|
+
const errors = await validate(dto);
|
|
72
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
73
|
+
expect(itemsError).toBeDefined();
|
|
74
|
+
expect(JSON.stringify(itemsError)).toContain('imei');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('falla si el imei2 tiene 15 caracteres pero no son dígitos', async () => {
|
|
78
|
+
const items = [{ ...validEnrollItem, imei2: 'ABCDEFGHIJKLMNO' }];
|
|
79
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
80
|
+
const errors = await validate(dto);
|
|
81
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
82
|
+
expect(itemsError).toBeDefined();
|
|
83
|
+
expect(JSON.stringify(itemsError)).toContain('imei2');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it(`falla si el lote supera ${LOAN_DEVICE_MAX_BATCH} ítems`, async () => {
|
|
87
|
+
const items = Array.from({ length: LOAN_DEVICE_MAX_BATCH + 1 }, (_, i) => ({
|
|
88
|
+
...validEnrollItem,
|
|
89
|
+
creditId: creditIdAt(i),
|
|
90
|
+
}));
|
|
91
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
92
|
+
const errors = await validate(dto);
|
|
93
|
+
expect(hasConstraint(errors, 'items', 'arrayMaxSize')).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('falla si dos ítems traen el mismo creditId', async () => {
|
|
97
|
+
const items = [validEnrollItem, { ...validEnrollItem }];
|
|
98
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
99
|
+
const errors = await validate(dto);
|
|
100
|
+
expect(hasConstraint(errors, 'items', 'arrayUnique')).toBe(true);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('falla si el productSku trae caracteres fuera del patrón canónico', async () => {
|
|
104
|
+
const items = [{ ...validEnrollItem, productSku: 'SKU MOTO_G54!' }];
|
|
105
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
106
|
+
const errors = await validate(dto);
|
|
107
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
108
|
+
expect(itemsError).toBeDefined();
|
|
109
|
+
expect(JSON.stringify(itemsError)).toContain('productSku');
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('falla si termMonths supera el plazo máximo', async () => {
|
|
113
|
+
const items = [{ ...validEnrollItem, termMonths: 9999 }];
|
|
114
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, enrollWithItems(items));
|
|
115
|
+
const errors = await validate(dto);
|
|
116
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
117
|
+
expect(itemsError).toBeDefined();
|
|
118
|
+
expect(JSON.stringify(itemsError)).toContain('termMonths');
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('falla si operationReference supera los 64 caracteres', async () => {
|
|
122
|
+
const dto = plainToInstance(LoanDeviceEnrollRequest, {
|
|
123
|
+
...validEnroll,
|
|
124
|
+
operationReference: 'x'.repeat(200),
|
|
125
|
+
});
|
|
126
|
+
const errors = await validate(dto);
|
|
127
|
+
expect(hasConstraint(errors, 'operationReference', 'isLength')).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe('LoanDeviceManualLockRequest', () => {
|
|
132
|
+
const validLockItem = { creditId: CREDIT_ID, reason: LoanDeviceLockReasonEnum.FRAUD };
|
|
133
|
+
const validLock = { items: [validLockItem], operationReference: 'lock-2026-08-18-0001' };
|
|
134
|
+
|
|
135
|
+
it('valida happy path (0 errores)', async () => {
|
|
136
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, validLock);
|
|
137
|
+
const errors = await validate(dto);
|
|
138
|
+
expect(errors).toEqual([]);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('valida con screenMessage bien formado', async () => {
|
|
142
|
+
const items = [{ ...validLockItem, screenMessage: { title: 'Equipo bloqueado', content: 'Ponte al corriente.' } }];
|
|
143
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, { ...validLock, items });
|
|
144
|
+
const errors = await validate(dto);
|
|
145
|
+
expect(errors).toEqual([]);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('falla si el screenMessage anidado es inválido', async () => {
|
|
149
|
+
const items = [{ ...validLockItem, screenMessage: { title: '', content: 5 } }];
|
|
150
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, { ...validLock, items });
|
|
151
|
+
const errors = await validate(dto);
|
|
152
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
153
|
+
expect(itemsError).toBeDefined();
|
|
154
|
+
expect(JSON.stringify(itemsError)).toContain('title');
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it('falla si reason está fuera del enum', async () => {
|
|
158
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, {
|
|
159
|
+
items: [{ creditId: CREDIT_ID, reason: 'PORQUE_SI' }],
|
|
160
|
+
operationReference: 'lock-2026-08-18-0002',
|
|
161
|
+
});
|
|
162
|
+
const errors = await validate(dto);
|
|
163
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
164
|
+
expect(itemsError).toBeDefined();
|
|
165
|
+
expect(JSON.stringify(itemsError)).toContain('reason');
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it(`falla si el lote supera ${LOAN_DEVICE_MAX_BATCH} ítems`, async () => {
|
|
169
|
+
const items = Array.from({ length: LOAN_DEVICE_MAX_BATCH + 1 }, (_, i) => ({
|
|
170
|
+
...validLockItem,
|
|
171
|
+
creditId: creditIdAt(i),
|
|
172
|
+
}));
|
|
173
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, { ...validLock, items });
|
|
174
|
+
const errors = await validate(dto);
|
|
175
|
+
expect(hasConstraint(errors, 'items', 'arrayMaxSize')).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it('falla si dos ítems traen el mismo creditId', async () => {
|
|
179
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, {
|
|
180
|
+
...validLock,
|
|
181
|
+
items: [validLockItem, { ...validLockItem }],
|
|
182
|
+
});
|
|
183
|
+
const errors = await validate(dto);
|
|
184
|
+
expect(hasConstraint(errors, 'items', 'arrayUnique')).toBe(true);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('falla si operationReference supera los 64 caracteres', async () => {
|
|
188
|
+
const dto = plainToInstance(LoanDeviceManualLockRequest, {
|
|
189
|
+
...validLock,
|
|
190
|
+
operationReference: 'x'.repeat(200),
|
|
191
|
+
});
|
|
192
|
+
const errors = await validate(dto);
|
|
193
|
+
expect(hasConstraint(errors, 'operationReference', 'isLength')).toBe(true);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
describe('LoanDeviceManualUnlockRequest', () => {
|
|
198
|
+
const validUnlock = {
|
|
199
|
+
items: [{ creditId: CREDIT_ID }],
|
|
200
|
+
operationReference: 'unlock-2026-08-18-0001',
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
it('valida happy path (0 errores)', async () => {
|
|
204
|
+
const dto = plainToInstance(LoanDeviceManualUnlockRequest, validUnlock);
|
|
205
|
+
const errors = await validate(dto);
|
|
206
|
+
expect(errors).toEqual([]);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('falla si algún creditId no es UUID', async () => {
|
|
210
|
+
const dto = plainToInstance(LoanDeviceManualUnlockRequest, {
|
|
211
|
+
...validUnlock,
|
|
212
|
+
items: [{ creditId: 'no-es-uuid' }],
|
|
213
|
+
});
|
|
214
|
+
const errors = await validate(dto);
|
|
215
|
+
const itemsError = errors.find(e => e.property === 'items');
|
|
216
|
+
expect(itemsError).toBeDefined();
|
|
217
|
+
expect(JSON.stringify(itemsError)).toContain('creditId');
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it(`falla si el lote supera ${LOAN_DEVICE_MAX_BATCH} ítems`, async () => {
|
|
221
|
+
const items = Array.from({ length: LOAN_DEVICE_MAX_BATCH + 1 }, (_, i) => ({
|
|
222
|
+
creditId: creditIdAt(i),
|
|
223
|
+
}));
|
|
224
|
+
const dto = plainToInstance(LoanDeviceManualUnlockRequest, { ...validUnlock, items });
|
|
225
|
+
const errors = await validate(dto);
|
|
226
|
+
expect(hasConstraint(errors, 'items', 'arrayMaxSize')).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('falla si dos ítems traen el mismo creditId', async () => {
|
|
230
|
+
const dto = plainToInstance(LoanDeviceManualUnlockRequest, {
|
|
231
|
+
...validUnlock,
|
|
232
|
+
items: [{ creditId: CREDIT_ID }, { creditId: CREDIT_ID }],
|
|
233
|
+
});
|
|
234
|
+
const errors = await validate(dto);
|
|
235
|
+
expect(hasConstraint(errors, 'items', 'arrayUnique')).toBe(true);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it('falla si operationReference supera los 64 caracteres', async () => {
|
|
239
|
+
const dto = plainToInstance(LoanDeviceManualUnlockRequest, {
|
|
240
|
+
...validUnlock,
|
|
241
|
+
operationReference: 'x'.repeat(200),
|
|
242
|
+
});
|
|
243
|
+
const errors = await validate(dto);
|
|
244
|
+
expect(hasConstraint(errors, 'operationReference', 'isLength')).toBe(true);
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe.each([
|
|
249
|
+
['LoanDeviceStatusRequest', LoanDeviceStatusRequest],
|
|
250
|
+
['LoanDeviceEnrollStatusRequest', LoanDeviceEnrollStatusRequest],
|
|
251
|
+
['LoanDeviceLastSeenRequest', LoanDeviceLastSeenRequest],
|
|
252
|
+
] as const)('%s', (_name, RequestClass) => {
|
|
253
|
+
it('valida happy path (0 errores)', async () => {
|
|
254
|
+
const dto = plainToInstance(RequestClass, { creditIds: [CREDIT_ID, OTHER_CREDIT_ID] });
|
|
255
|
+
const errors = await validate(dto);
|
|
256
|
+
expect(errors).toEqual([]);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it('falla si algún creditId no es UUID', async () => {
|
|
260
|
+
const dto = plainToInstance(RequestClass, { creditIds: [CREDIT_ID, 'no-es-uuid'] });
|
|
261
|
+
const errors = await validate(dto);
|
|
262
|
+
expect(errors.some(e => e.property === 'creditIds')).toBe(true);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
it('falla si creditIds viene vacío', async () => {
|
|
266
|
+
const dto = plainToInstance(RequestClass, { creditIds: [] });
|
|
267
|
+
const errors = await validate(dto);
|
|
268
|
+
expect(hasConstraint(errors, 'creditIds', 'arrayNotEmpty')).toBe(true);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
it(`falla si el lote supera ${LOAN_DEVICE_MAX_BATCH} creditIds`, async () => {
|
|
272
|
+
const creditIds = Array.from({ length: LOAN_DEVICE_MAX_BATCH + 1 }, (_, i) => creditIdAt(i));
|
|
273
|
+
const dto = plainToInstance(RequestClass, { creditIds });
|
|
274
|
+
const errors = await validate(dto);
|
|
275
|
+
expect(hasConstraint(errors, 'creditIds', 'arrayMaxSize')).toBe(true);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('falla si creditIds trae un id repetido', async () => {
|
|
279
|
+
const dto = plainToInstance(RequestClass, { creditIds: [CREDIT_ID, CREDIT_ID] });
|
|
280
|
+
const errors = await validate(dto);
|
|
281
|
+
expect(hasConstraint(errors, 'creditIds', 'arrayUnique')).toBe(true);
|
|
282
|
+
});
|
|
283
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { GetNearbyPlacesRequest, PlaceTypeEnum } from '../../../src/places/index';
|
|
5
|
+
|
|
6
|
+
/** El request mínimo válido: punto + al menos un tipo. */
|
|
7
|
+
const base = {
|
|
8
|
+
latitude: 19.4326,
|
|
9
|
+
longitude: -99.1332,
|
|
10
|
+
types: [PlaceTypeEnum.CashInMx],
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const instancia = (raw: Record<string, unknown>): GetNearbyPlacesRequest =>
|
|
14
|
+
plainToInstance(GetNearbyPlacesRequest, raw);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Mismo modo en que valida el consumidor real (`places-business`): `whitelist: true`.
|
|
18
|
+
* Importa que sea idéntico, ver el test del radio más abajo.
|
|
19
|
+
*/
|
|
20
|
+
const propiedadesConError = async (raw: Record<string, unknown>): Promise<string[]> =>
|
|
21
|
+
(await validate(instancia(raw) as object, { whitelist: true })).map((e) => e.property);
|
|
22
|
+
|
|
23
|
+
describe('GetNearbyPlacesRequest', () => {
|
|
24
|
+
it('valida sin radius: el radio es opcional', async () => {
|
|
25
|
+
const dto = instancia(base);
|
|
26
|
+
|
|
27
|
+
expect(await validate(dto as object, { whitelist: true })).toHaveLength(0);
|
|
28
|
+
expect(dto.radius).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('valida con radius', async () => {
|
|
32
|
+
const dto = instancia({ ...base, radius: 5 });
|
|
33
|
+
|
|
34
|
+
expect(await validate(dto as object, { whitelist: true })).toHaveLength(0);
|
|
35
|
+
expect(dto.radius).toBe(5);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* El guard que de verdad importa. El consumidor valida con `whitelist: true`, que
|
|
40
|
+
* DESCARTA toda propiedad sin decorador. Si alguien le quita los decoradores a
|
|
41
|
+
* `radius`, este contrato sigue compilando y el lambda pierde el radio en silencio:
|
|
42
|
+
* el mapa se quedaría pidiendo siempre el default. Que falle acá, no en producción.
|
|
43
|
+
*/
|
|
44
|
+
it('radius sobrevive al whitelist del validador', async () => {
|
|
45
|
+
const instancia = plainToInstance(GetNearbyPlacesRequest, { ...base, radius: 12 });
|
|
46
|
+
|
|
47
|
+
await validate(instancia as object, { whitelist: true });
|
|
48
|
+
|
|
49
|
+
expect(instancia.radius).toBe(12);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('rechaza un radius que no es positivo', async () => {
|
|
53
|
+
expect(await propiedadesConError({ ...base, radius: 0 })).toContain('radius');
|
|
54
|
+
expect(await propiedadesConError({ ...base, radius: -3 })).toContain('radius');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('rechaza un radius que no es número', async () => {
|
|
58
|
+
expect(await propiedadesConError({ ...base, radius: 'cinco' })).toContain('radius');
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/** Los campos que ya existían siguen siendo obligatorios: el cambio es aditivo. */
|
|
62
|
+
it('sigue exigiendo punto y tipos', async () => {
|
|
63
|
+
expect(await propiedadesConError({ types: [PlaceTypeEnum.CashInMx] })).toEqual(
|
|
64
|
+
expect.arrayContaining(['latitude', 'longitude']),
|
|
65
|
+
);
|
|
66
|
+
expect(await propiedadesConError({ latitude: 19.4326, longitude: -99.1332, types: [] })).toContain(
|
|
67
|
+
'types',
|
|
68
|
+
);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -12,11 +12,12 @@ describe('BlockedReasonEnum', () => {
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
describe('BlockedCategoryEnum', () => {
|
|
15
|
-
it('tiene las
|
|
15
|
+
it('tiene las cuatro categorias que dicen quien resuelve', () => {
|
|
16
16
|
expect(BlockedCategoryEnum.CUSTOMER_RECORD).toBe('CUSTOMER_RECORD');
|
|
17
17
|
expect(BlockedCategoryEnum.UNDER_REVIEW).toBe('UNDER_REVIEW');
|
|
18
18
|
expect(BlockedCategoryEnum.TEMPORARY).toBe('TEMPORARY');
|
|
19
|
-
expect(
|
|
19
|
+
expect(BlockedCategoryEnum.REJECTED).toBe('REJECTED');
|
|
20
|
+
expect(Object.keys(BlockedCategoryEnum)).toHaveLength(4);
|
|
20
21
|
});
|
|
21
22
|
|
|
22
23
|
it('ningun valor nombra listas de cumplimiento ni PLD', () => {
|
|
@@ -12,4 +12,13 @@ export interface ManualApproval {
|
|
|
12
12
|
at: string;
|
|
13
13
|
/** justificación obligatoria del override */
|
|
14
14
|
reason: string;
|
|
15
|
+
/**
|
|
16
|
+
* Conclusión del oficial. Ausente en los sellos escritos antes de este campo, que solo se
|
|
17
|
+
* estampaban al aprobar: leerlos sin `verdict` equivale a `APPROVED`.
|
|
18
|
+
*/
|
|
19
|
+
verdict?: ManualApprovalVerdict;
|
|
20
|
+
/** Alerta de PLD que se dictaminó, para rastrear el sello hasta su expediente. */
|
|
21
|
+
alertId?: string;
|
|
15
22
|
}
|
|
23
|
+
/** Conclusión del oficial de cumplimiento sobre la lista que revisó. */
|
|
24
|
+
export type ManualApprovalVerdict = 'APPROVED' | 'REJECTED';
|
|
@@ -131,6 +131,10 @@ export declare class PeopleResponse {
|
|
|
131
131
|
/** Geolocalización aprobada. `null` = no evaluada; solo `false` bloquea. */
|
|
132
132
|
geoApproved?: boolean | null;
|
|
133
133
|
cnbvManualApproval?: ManualApproval | null;
|
|
134
|
+
/** Sello del oficial sobre las listas internacionales y PEP (`blackListApproved`). */
|
|
135
|
+
blackListManualApproval?: ManualApproval | null;
|
|
136
|
+
/** Sello del oficial sobre la lista negra interna de Fiado (`fiadoListApproved`). */
|
|
137
|
+
fiadoListManualApproval?: ManualApproval | null;
|
|
134
138
|
minorManualApproval?: ManualApproval | null;
|
|
135
139
|
};
|
|
136
140
|
SIN: string | null;
|
|
@@ -55,6 +55,8 @@ export declare class PeopleUpdateRequest {
|
|
|
55
55
|
ofacListApproved?: boolean | null;
|
|
56
56
|
cnbvListApproved?: boolean | null;
|
|
57
57
|
cnbvManualApproval?: ManualApproval | null;
|
|
58
|
+
blackListManualApproval?: ManualApproval | null;
|
|
59
|
+
fiadoListManualApproval?: ManualApproval | null;
|
|
58
60
|
minorManualApproval?: ManualApproval | null;
|
|
59
61
|
blackListApproved?: boolean | null;
|
|
60
62
|
whiteList?: boolean | null;
|
|
@@ -9,15 +9,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.LoanDeviceCreditRefItem = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
-
/**
|
|
16
|
-
class
|
|
15
|
+
/** Ítem que solo referencia un crédito, para las mutaciones que no necesitan más datos. */
|
|
16
|
+
class LoanDeviceCreditRefItem {
|
|
17
17
|
}
|
|
18
|
-
exports.
|
|
18
|
+
exports.LoanDeviceCreditRefItem = LoanDeviceCreditRefItem;
|
|
19
19
|
__decorate([
|
|
20
20
|
(0, class_transformer_1.Expose)(),
|
|
21
|
-
(0, class_validator_1.
|
|
21
|
+
(0, class_validator_1.IsUUID)(),
|
|
22
22
|
__metadata("design:type", String)
|
|
23
|
-
],
|
|
23
|
+
], LoanDeviceCreditRefItem.prototype, "creditId", void 0);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Ítem de enrolamiento: un crédito con el equipo que se va a enrolar en el MDM. */
|
|
2
|
+
export declare class LoanDeviceEnrollItem {
|
|
3
|
+
creditId: string;
|
|
4
|
+
imei: string;
|
|
5
|
+
/** Segundo IMEI del equipo (dual SIM), si lo tiene. */
|
|
6
|
+
imei2?: string;
|
|
7
|
+
productSku: string;
|
|
8
|
+
termMonths: number;
|
|
9
|
+
/** En modo SCHEDULED es el primer autolock. */
|
|
10
|
+
firstDueDate: string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoanDeviceEnrollItem = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const SkuPattern_1 = require("../../retailCatalog/constants/SkuPattern");
|
|
16
|
+
/** Charset y largo del IMEI: exactamente 15 dígitos. */
|
|
17
|
+
const IMEI_PATTERN = /^\d{15}$/;
|
|
18
|
+
/** Plazo máximo del crédito en meses. */
|
|
19
|
+
const MAX_TERM_MONTHS = 60;
|
|
20
|
+
/** Ítem de enrolamiento: un crédito con el equipo que se va a enrolar en el MDM. */
|
|
21
|
+
class LoanDeviceEnrollItem {
|
|
22
|
+
}
|
|
23
|
+
exports.LoanDeviceEnrollItem = LoanDeviceEnrollItem;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
(0, class_validator_1.IsUUID)(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], LoanDeviceEnrollItem.prototype, "creditId", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
(0, class_validator_1.IsString)(),
|
|
32
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
33
|
+
(0, class_validator_1.Matches)(IMEI_PATTERN, { message: 'imei admite solo 15 dígitos' }),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], LoanDeviceEnrollItem.prototype, "imei", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, class_transformer_1.Expose)(),
|
|
38
|
+
(0, class_validator_1.IsOptional)(),
|
|
39
|
+
(0, class_validator_1.IsString)(),
|
|
40
|
+
(0, class_validator_1.Matches)(IMEI_PATTERN, { message: 'imei2 admite solo 15 dígitos' }),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], LoanDeviceEnrollItem.prototype, "imei2", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, class_transformer_1.Expose)(),
|
|
45
|
+
(0, class_validator_1.IsString)(),
|
|
46
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
47
|
+
(0, class_validator_1.MaxLength)(64),
|
|
48
|
+
(0, class_validator_1.Matches)(SkuPattern_1.SKU_PATTERN, { message: 'productSku admite solo [A-Za-z0-9-]' }),
|
|
49
|
+
__metadata("design:type", String)
|
|
50
|
+
], LoanDeviceEnrollItem.prototype, "productSku", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, class_transformer_1.Expose)(),
|
|
53
|
+
(0, class_validator_1.IsInt)(),
|
|
54
|
+
(0, class_validator_1.IsPositive)(),
|
|
55
|
+
(0, class_validator_1.Max)(MAX_TERM_MONTHS),
|
|
56
|
+
__metadata("design:type", Number)
|
|
57
|
+
], LoanDeviceEnrollItem.prototype, "termMonths", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, class_transformer_1.Expose)(),
|
|
60
|
+
(0, class_validator_1.IsISO8601)(),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], LoanDeviceEnrollItem.prototype, "firstDueDate", void 0);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LoanDeviceLockReasonEnum } from '../enums/LoanDeviceLockReasonEnum';
|
|
2
|
+
import { DeviceLockScreenMessage } from '../../mdm/dtos/DeviceLockScreenMessage';
|
|
3
|
+
/** Ítem de bloqueo manual: qué crédito se bloquea, por qué y con qué mensaje en pantalla. */
|
|
4
|
+
export declare class LoanDeviceManualLockItem {
|
|
5
|
+
creditId: string;
|
|
6
|
+
reason: LoanDeviceLockReasonEnum;
|
|
7
|
+
/** Mensaje que ve el usuario en la pantalla bloqueada; si no viene, el lambda usa el default. */
|
|
8
|
+
screenMessage?: DeviceLockScreenMessage;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoanDeviceManualLockItem = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const LoanDeviceLockReasonEnum_1 = require("../enums/LoanDeviceLockReasonEnum");
|
|
16
|
+
const DeviceLockScreenMessage_1 = require("../../mdm/dtos/DeviceLockScreenMessage");
|
|
17
|
+
/** Ítem de bloqueo manual: qué crédito se bloquea, por qué y con qué mensaje en pantalla. */
|
|
18
|
+
class LoanDeviceManualLockItem {
|
|
19
|
+
}
|
|
20
|
+
exports.LoanDeviceManualLockItem = LoanDeviceManualLockItem;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, class_transformer_1.Expose)(),
|
|
23
|
+
(0, class_validator_1.IsUUID)(),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], LoanDeviceManualLockItem.prototype, "creditId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_transformer_1.Expose)(),
|
|
28
|
+
(0, class_validator_1.IsEnum)(LoanDeviceLockReasonEnum_1.LoanDeviceLockReasonEnum),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], LoanDeviceManualLockItem.prototype, "reason", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, class_transformer_1.Expose)(),
|
|
33
|
+
(0, class_validator_1.IsOptional)(),
|
|
34
|
+
(0, class_validator_1.ValidateNested)(),
|
|
35
|
+
(0, class_transformer_1.Type)(() => DeviceLockScreenMessage_1.DeviceLockScreenMessage),
|
|
36
|
+
__metadata("design:type", DeviceLockScreenMessage_1.DeviceLockScreenMessage)
|
|
37
|
+
], LoanDeviceManualLockItem.prototype, "screenMessage", void 0);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LoanDeviceResult } from './LoanDeviceResult';
|
|
2
|
+
/** Resultado por ítem de las mutaciones (enroll, lock, unlock), que sí llevan referencia de operación. */
|
|
3
|
+
export declare class LoanDeviceOperationResult extends LoanDeviceResult {
|
|
4
|
+
/** Referencia de la operación con la que el caller correlaciona el batch. */
|
|
5
|
+
operationReference: string;
|
|
6
|
+
/** Referencia opaca del proveedor, solo para trazabilidad de soporte.
|
|
7
|
+
* El avance se consulta por `creditId` en `enroll-status` (enroll) o `status` (lock/unlock). */
|
|
8
|
+
pollingHandle?: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoanDeviceOperationResult = void 0;
|
|
4
|
+
const LoanDeviceResult_1 = require("./LoanDeviceResult");
|
|
5
|
+
/** Resultado por ítem de las mutaciones (enroll, lock, unlock), que sí llevan referencia de operación. */
|
|
6
|
+
class LoanDeviceOperationResult extends LoanDeviceResult_1.LoanDeviceResult {
|
|
7
|
+
}
|
|
8
|
+
exports.LoanDeviceOperationResult = LoanDeviceOperationResult;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MdmOperationStatusEnum } from '../../mdm/enums/MdmOperationStatusEnum';
|
|
2
|
+
import { MdmError } from '../../mdm/dtos/MdmError';
|
|
3
|
+
/** Base de todo resultado por ítem: un ítem puede fallar sin tumbar el batch completo. */
|
|
4
|
+
export declare class LoanDeviceResult {
|
|
5
|
+
creditId: string;
|
|
6
|
+
/** Solo toma SUCCESS | PENDING | ERROR; el motivo del fallo viaja en `error.code`. */
|
|
7
|
+
status: MdmOperationStatusEnum;
|
|
8
|
+
error?: MdmError;
|
|
9
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoanDeviceResult = void 0;
|
|
4
|
+
/** Base de todo resultado por ítem: un ítem puede fallar sin tumbar el batch completo. */
|
|
5
|
+
class LoanDeviceResult {
|
|
6
|
+
}
|
|
7
|
+
exports.LoanDeviceResult = LoanDeviceResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LoanDeviceEnrollItem } from '../LoanDeviceEnrollItem';
|
|
2
|
+
/** Body de `POST /private/devices/enroll` (loan-credit-business). Enrola en lote. */
|
|
3
|
+
export declare class LoanDeviceEnrollRequest {
|
|
4
|
+
items: LoanDeviceEnrollItem[];
|
|
5
|
+
/** Referencia con la que el caller correlaciona este batch; vuelve en cada resultado. */
|
|
6
|
+
operationReference: string;
|
|
7
|
+
}
|