@fiado/type-kit 3.643.0 → 3.645.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/_test_/unit/collection/disburseRequest.test.ts +30 -0
- package/_test_/unit/collection/disbursementType.test.ts +7 -1
- package/_test_/unit/loanCredit/creditLifecycleEnums.test.ts +1 -1
- package/_test_/unit/loanCredit/dtos/creditLifecycleRequests.test.ts +9 -0
- package/_test_/unit/productCatalog/rewardTopupEnums.test.ts +16 -0
- package/_test_/unit/rewards/mobileTopup.test.ts +78 -0
- package/_test_/unit/rewards/waitingLimit.test.ts +3 -3
- package/_test_/unit/transactionProcessor/authorizeRewardTopupRequest.test.ts +59 -0
- package/_test_/unit/transactionProcessor/rewardTopupCodes.test.ts +17 -0
- package/bin/collection/dtos/DisburseRequest.d.ts +3 -0
- package/bin/collection/dtos/DisburseRequest.js +9 -0
- package/bin/collection/dtos/DisburseTopupDetail.d.ts +9 -0
- package/bin/collection/dtos/DisburseTopupDetail.js +46 -0
- package/bin/collection/enums/DisbursementType.d.ts +3 -1
- package/bin/collection/enums/DisbursementType.js +2 -0
- package/bin/collection/index.d.ts +1 -0
- package/bin/collection/index.js +1 -0
- package/bin/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.d.ts +8 -0
- package/bin/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.js +29 -0
- package/bin/loanCredit/enums/LoanRestructureStatusEnum.d.ts +3 -1
- package/bin/loanCredit/enums/LoanRestructureStatusEnum.js +2 -0
- package/bin/loanCredit/index.d.ts +1 -0
- package/bin/loanCredit/index.js +1 -0
- package/bin/productCatalog/enums/ProductSubtypeEnum.d.ts +1 -0
- package/bin/productCatalog/enums/ProductSubtypeEnum.js +2 -0
- package/bin/rewards/dtos/backoffice/BackofficeGrantItemResponse.d.ts +2 -0
- package/bin/rewards/dtos/backoffice/MobileTopupConfigRequest.d.ts +10 -0
- package/bin/rewards/dtos/backoffice/MobileTopupConfigRequest.js +59 -0
- package/bin/rewards/dtos/backoffice/MobileTopupConfigResponse.d.ts +15 -0
- package/bin/rewards/dtos/backoffice/MobileTopupConfigResponse.js +2 -0
- package/bin/rewards/dtos/backoffice/MobileTopupContributionResponse.d.ts +9 -0
- package/bin/rewards/dtos/backoffice/MobileTopupContributionResponse.js +2 -0
- package/bin/rewards/dtos/backoffice/MobileTopupPlanListResponse.d.ts +5 -0
- package/bin/rewards/dtos/backoffice/MobileTopupPlanListResponse.js +2 -0
- package/bin/rewards/dtos/backoffice/MobileTopupPlanResponse.d.ts +22 -0
- package/bin/rewards/dtos/backoffice/MobileTopupPlanResponse.js +2 -0
- package/bin/rewards/dtos/backoffice/MobileTopupRechargeResponse.d.ts +8 -0
- package/bin/rewards/dtos/backoffice/MobileTopupRechargeResponse.js +2 -0
- package/bin/rewards/enums/MobileTopupPlanStatusEnum.d.ts +6 -0
- package/bin/rewards/enums/MobileTopupPlanStatusEnum.js +10 -0
- package/bin/rewards/enums/MobileTopupRechargeStatusEnum.d.ts +7 -0
- package/bin/rewards/enums/MobileTopupRechargeStatusEnum.js +11 -0
- package/bin/rewards/enums/RewardItemCodeEnum.d.ts +5 -1
- package/bin/rewards/enums/RewardItemCodeEnum.js +4 -0
- package/bin/rewards/index.d.ts +8 -0
- package/bin/rewards/index.js +8 -0
- package/bin/transactionProcessor/dtos/AuthorizeRewardTopupRequest.d.ts +21 -0
- package/bin/transactionProcessor/dtos/AuthorizeRewardTopupRequest.js +74 -0
- package/bin/transactionProcessor/enums/TransactionProcessorCodesEnum.d.ts +9 -1
- package/bin/transactionProcessor/enums/TransactionProcessorCodesEnum.js +8 -0
- package/bin/transactionProcessor/index.d.ts +1 -0
- package/bin/transactionProcessor/index.js +1 -0
- package/package.json +1 -1
- package/src/collection/dtos/DisburseRequest.ts +10 -1
- package/src/collection/dtos/DisburseTopupDetail.ts +15 -0
- package/src/collection/enums/DisbursementType.ts +2 -0
- package/src/collection/index.ts +1 -0
- package/src/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.ts +16 -0
- package/src/loanCredit/enums/LoanRestructureStatusEnum.ts +2 -0
- package/src/loanCredit/index.ts +1 -0
- package/src/productCatalog/enums/ProductSubtypeEnum.ts +2 -0
- package/src/rewards/dtos/backoffice/BackofficeGrantItemResponse.ts +2 -0
- package/src/rewards/dtos/backoffice/MobileTopupConfigRequest.ts +41 -0
- package/src/rewards/dtos/backoffice/MobileTopupConfigResponse.ts +15 -0
- package/src/rewards/dtos/backoffice/MobileTopupContributionResponse.ts +9 -0
- package/src/rewards/dtos/backoffice/MobileTopupPlanListResponse.ts +6 -0
- package/src/rewards/dtos/backoffice/MobileTopupPlanResponse.ts +23 -0
- package/src/rewards/dtos/backoffice/MobileTopupRechargeResponse.ts +9 -0
- package/src/rewards/enums/MobileTopupPlanStatusEnum.ts +6 -0
- package/src/rewards/enums/MobileTopupRechargeStatusEnum.ts +7 -0
- package/src/rewards/enums/RewardItemCodeEnum.ts +4 -0
- package/src/rewards/index.ts +8 -0
- package/src/transactionProcessor/dtos/AuthorizeRewardTopupRequest.ts +44 -0
- package/src/transactionProcessor/enums/TransactionProcessorCodesEnum.ts +8 -0
- package/src/transactionProcessor/index.ts +1 -0
|
@@ -88,6 +88,36 @@ describe('DisburseRequest', () => {
|
|
|
88
88
|
);
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
+
describe('topup (MEX_REWARD_TOPUP)', () => {
|
|
92
|
+
const TOPUP_OK = { phone: '5512345678', moduleName: 'multicenter', benefitId: 'b1', leafId: 'l1', productId: 'p1' };
|
|
93
|
+
const TOPUP_TYPE = { ...VALID, disbursementType: 'MEX_REWARD_TOPUP' };
|
|
94
|
+
|
|
95
|
+
it('acepta MEX_REWARD_TOPUP con topup válido', async () => {
|
|
96
|
+
expect(await invalidProperties({ ...TOPUP_TYPE, topup: TOPUP_OK })).toEqual([]);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('exige topup con MEX_REWARD_TOPUP', async () => {
|
|
100
|
+
expect(await invalidProperties(TOPUP_TYPE)).toContain('topup');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it.each(['551234567', '55123456789', '55123abc78', '+525512345678'])('rechaza phone %s', async (phone) => {
|
|
104
|
+
expect(await invalidProperties({ ...TOPUP_TYPE, topup: { ...TOPUP_OK, phone } })).toContain('topup');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('rechaza leafId vacío', async () => {
|
|
108
|
+
expect(await invalidProperties({ ...TOPUP_TYPE, topup: { ...TOPUP_OK, leafId: '' } })).toContain('topup');
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('no exige topup a otros tipos y lo ignora si viene', async () => {
|
|
112
|
+
expect(await invalidProperties(VALID)).toEqual([]);
|
|
113
|
+
expect(await invalidProperties({ ...VALID, topup: TOPUP_OK })).toEqual([]);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('acepta idempotencyKey de 64 caracteres (el límite de 60 lo aplica el processor)', async () => {
|
|
117
|
+
expect(await invalidProperties({ ...TOPUP_TYPE, topup: TOPUP_OK, idempotencyKey: 'k'.repeat(64) })).toEqual([]);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
91
121
|
it('sale por el index raíz', () => {
|
|
92
122
|
expect(new Collection.DisburseRequest()).toBeInstanceOf(DisburseRequest);
|
|
93
123
|
expect(new Collection.DisburseResponse()).toBeInstanceOf(DisburseResponse);
|
|
@@ -4,13 +4,18 @@ import { DisbursementType } from '../../../src/collection/index';
|
|
|
4
4
|
|
|
5
5
|
describe('DisbursementType', () => {
|
|
6
6
|
it('trae los productos de bono, comisión de vendedor y recompensa', () => {
|
|
7
|
-
expect(Object.values(DisbursementType)).toEqual(['MEX_BONUS', 'MEX_SELLER_COMMISSION', 'MEX_REWARD']);
|
|
7
|
+
expect(Object.values(DisbursementType)).toEqual(['MEX_BONUS', 'MEX_SELLER_COMMISSION', 'MEX_REWARD', 'MEX_REWARD_TOPUP']);
|
|
8
8
|
});
|
|
9
9
|
|
|
10
10
|
it('MEX_REWARD vale MEX_REWARD', () => {
|
|
11
11
|
expect(DisbursementType.MEX_REWARD).toBe('MEX_REWARD');
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
+
it('MEX_REWARD_TOPUP vale MEX_REWARD_TOPUP', () => {
|
|
15
|
+
expect(DisbursementType.MEX_REWARD_TOPUP).toBe('MEX_REWARD_TOPUP');
|
|
16
|
+
expect(Object.values(DisbursementType)).toEqual(expect.arrayContaining(['MEX_BONUS', 'MEX_SELLER_COMMISSION', 'MEX_REWARD', 'MEX_REWARD_TOPUP']));
|
|
17
|
+
});
|
|
18
|
+
|
|
14
19
|
it('cada clave es igual a su valor', () => {
|
|
15
20
|
for (const [key, value] of Object.entries(DisbursementType)) {
|
|
16
21
|
expect(key).toBe(value);
|
|
@@ -21,5 +26,6 @@ describe('DisbursementType', () => {
|
|
|
21
26
|
expect(Collection.DisbursementType.MEX_BONUS).toBe('MEX_BONUS');
|
|
22
27
|
expect(Collection.DisbursementType.MEX_SELLER_COMMISSION).toBe('MEX_SELLER_COMMISSION');
|
|
23
28
|
expect(Collection.DisbursementType.MEX_REWARD).toBe('MEX_REWARD');
|
|
29
|
+
expect(Collection.DisbursementType.MEX_REWARD_TOPUP).toBe('MEX_REWARD_TOPUP');
|
|
24
30
|
});
|
|
25
31
|
});
|
|
@@ -37,7 +37,7 @@ describe.each([
|
|
|
37
37
|
['LoanSettlementStatusEnum', LoanSettlementStatusEnum, ['PENDING']],
|
|
38
38
|
['LoanAdHocChargeKindEnum', LoanAdHocChargeKindEnum, ['SETTLEMENT', 'RECOVERY', 'PREPAYMENT', 'ADVANCE']],
|
|
39
39
|
['WrittenOffRecoveryTypeEnum', WrittenOffRecoveryTypeEnum, ['OVERDUE', 'SETTLEMENT']],
|
|
40
|
-
['LoanRestructureStatusEnum', LoanRestructureStatusEnum, ['PROPOSED', 'APPROVED', 'REJECTED', 'PENDING_REGISTRATION', 'EXECUTED']],
|
|
40
|
+
['LoanRestructureStatusEnum', LoanRestructureStatusEnum, ['PROPOSED', 'APPROVED', 'REJECTED', 'PENDING_REGISTRATION', 'EXECUTED', 'CANCELLED']],
|
|
41
41
|
['LoanChargeKindEnum', LoanChargeKindEnum, ['INSTALLMENT', 'SETTLEMENT', 'RECOVERY', 'PREPAYMENT', 'ADVANCE']],
|
|
42
42
|
[
|
|
43
43
|
'PaymentReviewReasonEnum',
|
|
@@ -3,6 +3,7 @@ import { plainToInstance } from 'class-transformer';
|
|
|
3
3
|
import { validate } from 'class-validator';
|
|
4
4
|
import {
|
|
5
5
|
BackofficeAcceptRestructureRequest,
|
|
6
|
+
BackofficeCancelRestructureRequest,
|
|
6
7
|
BackofficeApplyAdvanceRequest,
|
|
7
8
|
BackofficeApplyPrepaymentRequest,
|
|
8
9
|
BackofficeApproveRestructureRequest,
|
|
@@ -126,6 +127,14 @@ describe('BackofficeRejectRestructureRequest', () => {
|
|
|
126
127
|
});
|
|
127
128
|
});
|
|
128
129
|
|
|
130
|
+
describe('BackofficeCancelRestructureRequest', () => {
|
|
131
|
+
it('exige el motivo, con el mismo tope que el rechazo', async () => {
|
|
132
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, {})).toContain('reason');
|
|
133
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, { reason: '' })).toContain('reason');
|
|
134
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, { reason: 'El cliente no la aceptó' })).toEqual([]);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
129
138
|
describe('BackofficeAcceptRestructureRequest', () => {
|
|
130
139
|
it('acepta un OTP de 4 dígitos', async () => {
|
|
131
140
|
expect(await errorPaths(BackofficeAcceptRestructureRequest, { otpCode: '0427' })).toEqual([]);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ProductSubtypeEnum } from '../../../src/productCatalog/enums/ProductSubtypeEnum';
|
|
2
|
+
|
|
3
|
+
describe('ProductSubtypeEnum recarga de recompensa', () => {
|
|
4
|
+
it('REWARD_TOPUP_MX vale "REWARD_TOPUP_MX"', () => {
|
|
5
|
+
expect(ProductSubtypeEnum.REWARD_TOPUP_MX).toBe('REWARD_TOPUP_MX');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
it('ningún otro miembro vale "REWARD_TOPUP_MX"', () => {
|
|
9
|
+
const others = Object.entries(ProductSubtypeEnum).filter(([key, value]) => value === 'REWARD_TOPUP_MX' && key !== 'REWARD_TOPUP_MX');
|
|
10
|
+
expect(others).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('REWARD_MX no cambia', () => {
|
|
14
|
+
expect(ProductSubtypeEnum.REWARD_MX).toBe('REWARD_MX');
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import {
|
|
5
|
+
BackofficeGrantItemResponse,
|
|
6
|
+
MobileTopupConfigRequest,
|
|
7
|
+
MobileTopupPlanResponse,
|
|
8
|
+
MobileTopupPlanStatusEnum,
|
|
9
|
+
MobileTopupRechargeStatusEnum,
|
|
10
|
+
RewardItemCodeEnum,
|
|
11
|
+
} from '../../../src/rewards';
|
|
12
|
+
|
|
13
|
+
const valid = { moduleName: 'm', benefitId: 'b', leafId: 'l', productId: 'p', monthlyPrice: 99.5 };
|
|
14
|
+
|
|
15
|
+
describe('rewards mobile topup', () => {
|
|
16
|
+
it('enums con valores exactos', () => {
|
|
17
|
+
expect({ ...MobileTopupPlanStatusEnum }).toEqual({ ACTIVE: 'ACTIVE', NEEDS_ATTENTION: 'NEEDS_ATTENTION', DONE: 'DONE' });
|
|
18
|
+
expect({ ...MobileTopupRechargeStatusEnum }).toEqual({
|
|
19
|
+
PAID: 'PAID',
|
|
20
|
+
REJECTED: 'REJECTED',
|
|
21
|
+
UNCONFIRMED: 'UNCONFIRMED',
|
|
22
|
+
NOT_DELIVERED: 'NOT_DELIVERED',
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('RewardItemCodeEnum conserva los previos y agrega los nuevos', () => {
|
|
27
|
+
expect(RewardItemCodeEnum.TOPUP_REJECTED).toBe('TOPUP_REJECTED');
|
|
28
|
+
expect(RewardItemCodeEnum.ITEM_DISMISSED).toBe('ITEM_DISMISSED');
|
|
29
|
+
expect(RewardItemCodeEnum.AMOUNT_ABOVE_MAX).toBe('AMOUNT_ABOVE_MAX');
|
|
30
|
+
expect(RewardItemCodeEnum.LIMIT_WAIT_EXPIRED).toBe('LIMIT_WAIT_EXPIRED');
|
|
31
|
+
expect(RewardItemCodeEnum.OUTCOME_UNKNOWN).toBe('OUTCOME_UNKNOWN');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('MobileTopupConfigRequest válido', async () => {
|
|
35
|
+
expect(await validate(plainToInstance(MobileTopupConfigRequest, valid))).toHaveLength(0);
|
|
36
|
+
expect(await validate(plainToInstance(MobileTopupConfigRequest, { ...valid, expectedVersion: 3 }))).toHaveLength(0);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it.each([
|
|
40
|
+
['monthlyPrice 0', { monthlyPrice: 0 }],
|
|
41
|
+
['monthlyPrice -1', { monthlyPrice: -1 }],
|
|
42
|
+
['monthlyPrice 10.123', { monthlyPrice: 10.123 }],
|
|
43
|
+
['moduleName vacío', { moduleName: '' }],
|
|
44
|
+
['productId 101 chars', { productId: 'x'.repeat(101) }],
|
|
45
|
+
['expectedVersion 0', { expectedVersion: 0 }],
|
|
46
|
+
])('MobileTopupConfigRequest inválido: %s', async (_n, patch) => {
|
|
47
|
+
const errors = await validate(plainToInstance(MobileTopupConfigRequest, { ...valid, ...patch }));
|
|
48
|
+
expect(errors.length).toBeGreaterThanOrEqual(1);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('MobileTopupPlanResponse completo compila', () => {
|
|
52
|
+
const plan = {
|
|
53
|
+
phone: '5512345678',
|
|
54
|
+
status: MobileTopupPlanStatusEnum.ACTIVE,
|
|
55
|
+
promised: 3,
|
|
56
|
+
done: 1,
|
|
57
|
+
pending: 2,
|
|
58
|
+
nextDueAt: 1,
|
|
59
|
+
lastRechargeAt: 1,
|
|
60
|
+
lastFolio: 'RW-g-i-M1',
|
|
61
|
+
failedAttempts: 0,
|
|
62
|
+
lastError: 'x',
|
|
63
|
+
closedUndelivered: 0,
|
|
64
|
+
closedBy: 'op',
|
|
65
|
+
closedAt: 1,
|
|
66
|
+
contributions: [{ grantId: 'g', itemKey: 'i', months: 3, sourceService: 's', sourceReference: 'r', campaignId: 'c', addedAt: 1 }],
|
|
67
|
+
recharges: [{ folio: 'RW-g-i-M1', rechargeNumber: 1, status: MobileTopupRechargeStatusEnum.PAID, at: 1, summary: 's' }],
|
|
68
|
+
updatedAt: 1,
|
|
69
|
+
} satisfies MobileTopupPlanResponse;
|
|
70
|
+
expect(plan.pending).toBe(2);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('BackofficeGrantItemResponse acepta type opcional', () => {
|
|
74
|
+
const item = new BackofficeGrantItemResponse();
|
|
75
|
+
item.type = 'MOBILE_TOPUP';
|
|
76
|
+
expect(item.type).toBe('MOBILE_TOPUP');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -18,11 +18,11 @@ describe('espera por tope de nivel (WAITING_LIMIT)', () => {
|
|
|
18
18
|
expect(Object.values(LimitWaitReasonEnum)).toHaveLength(2);
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
-
it('RewardItemCodeEnum contiene los
|
|
21
|
+
it('RewardItemCodeEnum contiene los cinco códigos', () => {
|
|
22
22
|
expect(Object.values(RewardItemCodeEnum)).toEqual(
|
|
23
|
-
expect.arrayContaining(['AMOUNT_ABOVE_MAX', 'LIMIT_WAIT_EXPIRED', 'OUTCOME_UNKNOWN']),
|
|
23
|
+
expect.arrayContaining(['AMOUNT_ABOVE_MAX', 'LIMIT_WAIT_EXPIRED', 'OUTCOME_UNKNOWN', 'TOPUP_REJECTED', 'ITEM_DISMISSED']),
|
|
24
24
|
);
|
|
25
|
-
expect(Object.values(RewardItemCodeEnum)).toHaveLength(
|
|
25
|
+
expect(Object.values(RewardItemCodeEnum)).toHaveLength(5);
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
it('BackofficeGrantItemResponse acepta los campos de espera', () => {
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { TransactionProcessor } from '../../../src/index';
|
|
5
|
+
import { AuthorizeRewardTopupRequest } from '../../../src/transactionProcessor/index';
|
|
6
|
+
|
|
7
|
+
const VALID = {
|
|
8
|
+
idempotencyKey: 'RW-' + 'a'.repeat(32) + '-bait3m-M1',
|
|
9
|
+
directoryId: 'dir-1',
|
|
10
|
+
phone: '5512345678',
|
|
11
|
+
moduleName: 'multicenter',
|
|
12
|
+
benefitId: 'b1',
|
|
13
|
+
leafId: 'l1',
|
|
14
|
+
productId: 'p1',
|
|
15
|
+
amount: 15,
|
|
16
|
+
concept: 'Recarga Bait de recompensa',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
async function invalidProperties(body: Record<string, unknown>): Promise<string[]> {
|
|
20
|
+
const dto = plainToInstance(AuthorizeRewardTopupRequest, body);
|
|
21
|
+
return (await validate(dto as object)).map((e) => e.property);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
describe('AuthorizeRewardTopupRequest', () => {
|
|
25
|
+
it('acepta un request válido', async () => {
|
|
26
|
+
expect(await invalidProperties(VALID)).toEqual([]);
|
|
27
|
+
expect(VALID.idempotencyKey.length).toBeLessThanOrEqual(60);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('acepta idempotencyKey de exactamente 60 y rechaza 61', async () => {
|
|
31
|
+
expect(await invalidProperties({ ...VALID, idempotencyKey: 'k'.repeat(60) })).toEqual([]);
|
|
32
|
+
expect(await invalidProperties({ ...VALID, idempotencyKey: 'k'.repeat(61) })).toContain('idempotencyKey');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('rechaza idempotencyKey con #', async () => {
|
|
36
|
+
expect(await invalidProperties({ ...VALID, idempotencyKey: 'RW-a#b' })).toContain('idempotencyKey');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it.each([0, -1, 10.005])('rechaza amount %s', async (amount) => {
|
|
40
|
+
expect(await invalidProperties({ ...VALID, amount })).toContain('amount');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('acepta amount 15 y 15.5', async () => {
|
|
44
|
+
expect(await invalidProperties({ ...VALID, amount: 15 })).not.toContain('amount');
|
|
45
|
+
expect(await invalidProperties({ ...VALID, amount: 15.5 })).not.toContain('amount');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('rechaza phone de 9 dígitos', async () => {
|
|
49
|
+
expect(await invalidProperties({ ...VALID, phone: '551234567' })).toContain('phone');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('rechaza concept de 121', async () => {
|
|
53
|
+
expect(await invalidProperties({ ...VALID, concept: 'c'.repeat(121) })).toContain('concept');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('sale por el index raíz', () => {
|
|
57
|
+
expect(new TransactionProcessor.AuthorizeRewardTopupRequest()).toBeInstanceOf(AuthorizeRewardTopupRequest);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TransactionProcessorCodesEnum } from '../../../src/transactionProcessor/enums/TransactionProcessorCodesEnum';
|
|
2
|
+
|
|
3
|
+
describe('TransactionProcessorCodesEnum recarga de recompensa', () => {
|
|
4
|
+
it.each([
|
|
5
|
+
'REWARD_TOPUP_PROVIDER_REJECTED',
|
|
6
|
+
'REWARD_TOPUP_UNAVAILABLE',
|
|
7
|
+
'REWARD_TOPUP_OUTCOME_UNKNOWN',
|
|
8
|
+
'REWARD_TOPUP_IN_FLIGHT',
|
|
9
|
+
] as const)('%s vale su propio nombre', (code) => {
|
|
10
|
+
expect(TransactionProcessorCodesEnum[code]).toBe(code);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('INVALID_REQUEST y TRANSACTION_APPROVED no cambian', () => {
|
|
14
|
+
expect(TransactionProcessorCodesEnum.INVALID_REQUEST).toBe('INVALID_REQUEST');
|
|
15
|
+
expect(TransactionProcessorCodesEnum.TRANSACTION_APPROVED).toBe('TRANSACTION_APPROVED');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CurrencyId } from '../../currency/enums/CurrencyId';
|
|
2
2
|
import { DisbursementType } from '../enums/DisbursementType';
|
|
3
|
+
import { DisburseTopupDetail } from './DisburseTopupDetail';
|
|
3
4
|
/** Dispersión síncrona: el motor deposita `amount` pesos al titular por el riel de `disbursementType`. */
|
|
4
5
|
export declare class DisburseRequest {
|
|
5
6
|
tenantId: string;
|
|
@@ -17,4 +18,6 @@ export declare class DisburseRequest {
|
|
|
17
18
|
concept: string;
|
|
18
19
|
/** Id del llamador para rastreo: asiento, crédito. */
|
|
19
20
|
reference?: string;
|
|
21
|
+
/** Datos de la recarga. Obligatorio si `disbursementType` es `MEX_REWARD_TOPUP`; en otros tipos se ignora. */
|
|
22
|
+
topup?: DisburseTopupDetail;
|
|
20
23
|
}
|
|
@@ -10,9 +10,11 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DisburseRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
13
14
|
const class_validator_1 = require("class-validator");
|
|
14
15
|
const CurrencyId_1 = require("../../currency/enums/CurrencyId");
|
|
15
16
|
const DisbursementType_1 = require("../enums/DisbursementType");
|
|
17
|
+
const DisburseTopupDetail_1 = require("./DisburseTopupDetail");
|
|
16
18
|
/** Dispersión síncrona: el motor deposita `amount` pesos al titular por el riel de `disbursementType`. */
|
|
17
19
|
class DisburseRequest {
|
|
18
20
|
}
|
|
@@ -62,3 +64,10 @@ __decorate([
|
|
|
62
64
|
(0, class_validator_1.IsString)(),
|
|
63
65
|
__metadata("design:type", String)
|
|
64
66
|
], DisburseRequest.prototype, "reference", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
(0, class_validator_1.ValidateIf)((o) => o.disbursementType === DisbursementType_1.DisbursementType.MEX_REWARD_TOPUP),
|
|
69
|
+
(0, class_validator_1.IsDefined)(),
|
|
70
|
+
(0, class_validator_1.ValidateNested)(),
|
|
71
|
+
(0, class_transformer_1.Type)(() => DisburseTopupDetail_1.DisburseTopupDetail),
|
|
72
|
+
__metadata("design:type", DisburseTopupDetail_1.DisburseTopupDetail)
|
|
73
|
+
], DisburseRequest.prototype, "topup", void 0);
|
|
@@ -0,0 +1,46 @@
|
|
|
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.DisburseTopupDetail = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
/** Datos de la recarga Bait de una dispersión `MEX_REWARD_TOPUP`. */
|
|
15
|
+
class DisburseTopupDetail {
|
|
16
|
+
}
|
|
17
|
+
exports.DisburseTopupDetail = DisburseTopupDetail;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
(0, class_validator_1.Matches)(/^[0-9]{10}$/),
|
|
21
|
+
__metadata("design:type", String)
|
|
22
|
+
], DisburseTopupDetail.prototype, "phone", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsString)(),
|
|
25
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
26
|
+
(0, class_validator_1.MaxLength)(64),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], DisburseTopupDetail.prototype, "moduleName", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_validator_1.IsString)(),
|
|
31
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
32
|
+
(0, class_validator_1.MaxLength)(64),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], DisburseTopupDetail.prototype, "benefitId", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
(0, class_validator_1.MaxLength)(256),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], DisburseTopupDetail.prototype, "leafId", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
44
|
+
(0, class_validator_1.MaxLength)(64),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], DisburseTopupDetail.prototype, "productId", void 0);
|
|
@@ -8,5 +8,7 @@ export declare enum DisbursementType {
|
|
|
8
8
|
/** Comisión de vendedor. */
|
|
9
9
|
MEX_SELLER_COMMISSION = "MEX_SELLER_COMMISSION",
|
|
10
10
|
/** Abono de recompensas de `rewards-business`. */
|
|
11
|
-
MEX_REWARD = "MEX_REWARD"
|
|
11
|
+
MEX_REWARD = "MEX_REWARD",
|
|
12
|
+
/** Recarga Bait de recompensas de `rewards-business`. */
|
|
13
|
+
MEX_REWARD_TOPUP = "MEX_REWARD_TOPUP"
|
|
12
14
|
}
|
|
@@ -13,4 +13,6 @@ var DisbursementType;
|
|
|
13
13
|
DisbursementType["MEX_SELLER_COMMISSION"] = "MEX_SELLER_COMMISSION";
|
|
14
14
|
/** Abono de recompensas de `rewards-business`. */
|
|
15
15
|
DisbursementType["MEX_REWARD"] = "MEX_REWARD";
|
|
16
|
+
/** Recarga Bait de recompensas de `rewards-business`. */
|
|
17
|
+
DisbursementType["MEX_REWARD_TOPUP"] = "MEX_REWARD_TOPUP";
|
|
16
18
|
})(DisbursementType || (exports.DisbursementType = DisbursementType = {}));
|
|
@@ -30,6 +30,7 @@ export * from './dtos/RegisterCollectibleResponse';
|
|
|
30
30
|
export * from './dtos/CollectionPricingDto';
|
|
31
31
|
export * from './dtos/ResolvePendingChargesRequest';
|
|
32
32
|
export * from './dtos/MoneyInEvent';
|
|
33
|
+
export * from './dtos/DisburseTopupDetail';
|
|
33
34
|
export * from './dtos/DisburseRequest';
|
|
34
35
|
export * from './dtos/DisburseResponse';
|
|
35
36
|
export * from './dtos/CollectionIntentSummaryDto';
|
package/bin/collection/index.js
CHANGED
|
@@ -49,6 +49,7 @@ __exportStar(require("./dtos/RegisterCollectibleResponse"), exports);
|
|
|
49
49
|
__exportStar(require("./dtos/CollectionPricingDto"), exports);
|
|
50
50
|
__exportStar(require("./dtos/ResolvePendingChargesRequest"), exports);
|
|
51
51
|
__exportStar(require("./dtos/MoneyInEvent"), exports);
|
|
52
|
+
__exportStar(require("./dtos/DisburseTopupDetail"), exports);
|
|
52
53
|
__exportStar(require("./dtos/DisburseRequest"), exports);
|
|
53
54
|
__exportStar(require("./dtos/DisburseResponse"), exports);
|
|
54
55
|
// DTOs — backoffice de monitoreo
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/cancel` (loan-credit-business). Cierra
|
|
3
|
+
* una propuesta o una aprobada que el cliente todavía no acepta.
|
|
4
|
+
*/
|
|
5
|
+
export declare class BackofficeCancelRestructureRequest {
|
|
6
|
+
/** Motivo de la cancelación. Va a la auditoría y no se loguea. */
|
|
7
|
+
reason: string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
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.BackofficeCancelRestructureRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
|
|
16
|
+
/**
|
|
17
|
+
* Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/cancel` (loan-credit-business). Cierra
|
|
18
|
+
* una propuesta o una aprobada que el cliente todavía no acepta.
|
|
19
|
+
*/
|
|
20
|
+
class BackofficeCancelRestructureRequest {
|
|
21
|
+
}
|
|
22
|
+
exports.BackofficeCancelRestructureRequest = BackofficeCancelRestructureRequest;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Expose)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.MinLength)(1),
|
|
27
|
+
(0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], BackofficeCancelRestructureRequest.prototype, "reason", void 0);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
|
|
3
|
+
* `CANCELLED`: la propuesta o la aprobada sin aceptar se cerró, a mano o porque el crédito se cerró; no gasta el cupo.
|
|
3
4
|
* @enum {string}
|
|
4
5
|
*/
|
|
5
6
|
export declare enum LoanRestructureStatusEnum {
|
|
@@ -7,5 +8,6 @@ export declare enum LoanRestructureStatusEnum {
|
|
|
7
8
|
APPROVED = "APPROVED",
|
|
8
9
|
REJECTED = "REJECTED",
|
|
9
10
|
PENDING_REGISTRATION = "PENDING_REGISTRATION",
|
|
10
|
-
EXECUTED = "EXECUTED"
|
|
11
|
+
EXECUTED = "EXECUTED",
|
|
12
|
+
CANCELLED = "CANCELLED"
|
|
11
13
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LoanRestructureStatusEnum = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
|
|
6
|
+
* `CANCELLED`: la propuesta o la aprobada sin aceptar se cerró, a mano o porque el crédito se cerró; no gasta el cupo.
|
|
6
7
|
* @enum {string}
|
|
7
8
|
*/
|
|
8
9
|
var LoanRestructureStatusEnum;
|
|
@@ -12,4 +13,5 @@ var LoanRestructureStatusEnum;
|
|
|
12
13
|
LoanRestructureStatusEnum["REJECTED"] = "REJECTED";
|
|
13
14
|
LoanRestructureStatusEnum["PENDING_REGISTRATION"] = "PENDING_REGISTRATION";
|
|
14
15
|
LoanRestructureStatusEnum["EXECUTED"] = "EXECUTED";
|
|
16
|
+
LoanRestructureStatusEnum["CANCELLED"] = "CANCELLED";
|
|
15
17
|
})(LoanRestructureStatusEnum || (exports.LoanRestructureStatusEnum = LoanRestructureStatusEnum = {}));
|
|
@@ -126,6 +126,7 @@ export * from './dtos/requests/BackofficeCollectWrittenOffCreditRequest';
|
|
|
126
126
|
export * from './dtos/requests/BackofficeProposeRestructureRequest';
|
|
127
127
|
export * from './dtos/requests/BackofficeApproveRestructureRequest';
|
|
128
128
|
export * from './dtos/requests/BackofficeRejectRestructureRequest';
|
|
129
|
+
export * from './dtos/requests/BackofficeCancelRestructureRequest';
|
|
129
130
|
export * from './dtos/requests/BackofficeAcceptRestructureRequest';
|
|
130
131
|
export * from './dtos/requests/BackofficeApplyPrepaymentRequest';
|
|
131
132
|
export * from './dtos/requests/BackofficeApplyAdvanceRequest';
|
package/bin/loanCredit/index.js
CHANGED
|
@@ -168,6 +168,7 @@ __exportStar(require("./dtos/requests/BackofficeCollectWrittenOffCreditRequest")
|
|
|
168
168
|
__exportStar(require("./dtos/requests/BackofficeProposeRestructureRequest"), exports);
|
|
169
169
|
__exportStar(require("./dtos/requests/BackofficeApproveRestructureRequest"), exports);
|
|
170
170
|
__exportStar(require("./dtos/requests/BackofficeRejectRestructureRequest"), exports);
|
|
171
|
+
__exportStar(require("./dtos/requests/BackofficeCancelRestructureRequest"), exports);
|
|
171
172
|
__exportStar(require("./dtos/requests/BackofficeAcceptRestructureRequest"), exports);
|
|
172
173
|
__exportStar(require("./dtos/requests/BackofficeApplyPrepaymentRequest"), exports);
|
|
173
174
|
__exportStar(require("./dtos/requests/BackofficeApplyAdvanceRequest"), exports);
|
|
@@ -61,6 +61,7 @@ export declare enum ProductSubtypeEnum {
|
|
|
61
61
|
SUREKEEP_BONUS_MX = "BONUS_MX",
|
|
62
62
|
SUREKEEP_SELLER_COMMISSION_MX = "SELLER_COMMISSION_MX",
|
|
63
63
|
REWARD_MX = "REWARD_MX",
|
|
64
|
+
REWARD_TOPUP_MX = "REWARD_TOPUP_MX",
|
|
64
65
|
STORE_PHONE = "PHONE",
|
|
65
66
|
REFUND_PCF_DICTAMEN_PROCEDE = "DICTAMEN_PROCEDE",
|
|
66
67
|
REFUND_PCF_AUTO_T2_SIN_2FA = "AUTO_T2_SIN_2FA",
|
|
@@ -80,6 +80,8 @@ var ProductSubtypeEnum;
|
|
|
80
80
|
//REWARDS
|
|
81
81
|
// Abono de recompensas de `rewards-business`.
|
|
82
82
|
ProductSubtypeEnum["REWARD_MX"] = "REWARD_MX";
|
|
83
|
+
// Recarga Bait de recompensas de `rewards-business`.
|
|
84
|
+
ProductSubtypeEnum["REWARD_TOPUP_MX"] = "REWARD_TOPUP_MX";
|
|
83
85
|
//STORE
|
|
84
86
|
ProductSubtypeEnum["STORE_PHONE"] = "PHONE";
|
|
85
87
|
// REFUND_PCF
|
|
@@ -4,6 +4,8 @@ import { BackofficeGrantAttemptResponse } from './BackofficeGrantAttemptResponse
|
|
|
4
4
|
export declare class BackofficeGrantItemResponse extends GrantItemResponse {
|
|
5
5
|
/** Nombre de la recompensa congelada en la entrega. */
|
|
6
6
|
name: string;
|
|
7
|
+
/** Tipo de recompensa congelado en la entrega (ej. `'MOBILE_TOPUP'`). */
|
|
8
|
+
type?: string;
|
|
7
9
|
attempts: BackofficeGrantAttemptResponse[];
|
|
8
10
|
/** Motivo de la espera por tope; solo cuando el ítem está en `WAITING_LIMIT`. */
|
|
9
11
|
waitReason?: LimitWaitReasonEnum;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Guarda la configuración de la recarga Bait (producto en Multicenter y precio mensual). */
|
|
2
|
+
export declare class MobileTopupConfigRequest {
|
|
3
|
+
moduleName: string;
|
|
4
|
+
benefitId: string;
|
|
5
|
+
leafId: string;
|
|
6
|
+
productId: string;
|
|
7
|
+
monthlyPrice: number;
|
|
8
|
+
/** Candado optimista: versión que el operador vio al editar. */
|
|
9
|
+
expectedVersion?: number;
|
|
10
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
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.MobileTopupConfigRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/** Guarda la configuración de la recarga Bait (producto en Multicenter y precio mensual). */
|
|
16
|
+
class MobileTopupConfigRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.MobileTopupConfigRequest = MobileTopupConfigRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_transformer_1.Expose)(),
|
|
21
|
+
(0, class_validator_1.IsString)(),
|
|
22
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
23
|
+
(0, class_validator_1.MaxLength)(100),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], MobileTopupConfigRequest.prototype, "moduleName", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_transformer_1.Expose)(),
|
|
28
|
+
(0, class_validator_1.IsString)(),
|
|
29
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
30
|
+
(0, class_validator_1.MaxLength)(100),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], MobileTopupConfigRequest.prototype, "benefitId", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, class_transformer_1.Expose)(),
|
|
35
|
+
(0, class_validator_1.IsString)(),
|
|
36
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
37
|
+
(0, class_validator_1.MaxLength)(100),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], MobileTopupConfigRequest.prototype, "leafId", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
44
|
+
(0, class_validator_1.MaxLength)(100),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], MobileTopupConfigRequest.prototype, "productId", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_transformer_1.Expose)(),
|
|
49
|
+
(0, class_validator_1.IsNumber)({ maxDecimalPlaces: 2 }),
|
|
50
|
+
(0, class_validator_1.IsPositive)(),
|
|
51
|
+
__metadata("design:type", Number)
|
|
52
|
+
], MobileTopupConfigRequest.prototype, "monthlyPrice", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, class_transformer_1.Expose)(),
|
|
55
|
+
(0, class_validator_1.IsOptional)(),
|
|
56
|
+
(0, class_validator_1.IsInt)(),
|
|
57
|
+
(0, class_validator_1.Min)(1),
|
|
58
|
+
__metadata("design:type", Number)
|
|
59
|
+
], MobileTopupConfigRequest.prototype, "expectedVersion", void 0);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface MobileTopupConfigResponse {
|
|
2
|
+
moduleName: string;
|
|
3
|
+
benefitId: string;
|
|
4
|
+
leafId: string;
|
|
5
|
+
productId: string;
|
|
6
|
+
monthlyPrice: number;
|
|
7
|
+
currency: 'MXN';
|
|
8
|
+
version: number;
|
|
9
|
+
updatedBy: string;
|
|
10
|
+
updatedAt: number;
|
|
11
|
+
/** Ítems del catálogo `MOBILE_TOPUP` recalculados al guardar. */
|
|
12
|
+
repricedItems?: number;
|
|
13
|
+
/** Ítems omitidos por conflicto de versión. */
|
|
14
|
+
skippedItems?: number;
|
|
15
|
+
}
|