@fiado/type-kit 3.395.0 → 3.396.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.
@@ -0,0 +1,75 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ AppliedStorePolicySnapshot,
4
+ CandidatePlanSnapshot,
5
+ EffectiveTermsSnapshot,
6
+ LoanCreditResponse,
7
+ } from '../../../src/loanCredit/index';
8
+ import { FoldableTermEnum, PromotionEffectKindEnum } from '../../../src/loanOfferings/index';
9
+
10
+ describe('snapshots de auditoría del crédito', () => {
11
+ it('congela la política especial con los términos que ganó', () => {
12
+ const policy: AppliedStorePolicySnapshot = {
13
+ policyId: 'POL#1',
14
+ name: 'Freno de riesgo Norte',
15
+ appliedTerms: [FoldableTermEnum.MAX_FINANCED_AMOUNT_CENTS],
16
+ };
17
+ expect(policy.appliedTerms[0]).toBe('maxFinancedAmountCents');
18
+ });
19
+
20
+ it('congela el plan candidato con su id y su código', () => {
21
+ const candidate: CandidatePlanSnapshot = { planId: 'PLAN#1', code: 'SK-12' };
22
+ expect(candidate.planId).toBe('PLAN#1');
23
+ });
24
+
25
+ it('admite un tope de enganche nulo: el plan puede no acotarlo', () => {
26
+ const terms: EffectiveTermsSnapshot = {
27
+ minDownPaymentPct: 0.1,
28
+ maxDownPaymentPct: null,
29
+ maxFinancedAmountCents: 2_500_000,
30
+ };
31
+ expect(terms.maxDownPaymentPct).toBeNull();
32
+ });
33
+ });
34
+
35
+ describe('LoanCreditResponse', () => {
36
+ it('deja la auditoría opcional y nullable: los créditos viejos no la tienen', () => {
37
+ const legacy: Pick<
38
+ LoanCreditResponse,
39
+ | 'appliedPromotions'
40
+ | 'appliedStorePolicies'
41
+ | 'candidatePlans'
42
+ | 'planVersionAtOrigination'
43
+ | 'segmentIdsAtQuote'
44
+ | 'effectiveTerms'
45
+ > = {
46
+ appliedPromotions: null,
47
+ appliedStorePolicies: null,
48
+ candidatePlans: null,
49
+ planVersionAtOrigination: null,
50
+ segmentIdsAtQuote: null,
51
+ effectiveTerms: null,
52
+ };
53
+ expect(Object.values(legacy).every((value) => value === null)).toBe(true);
54
+ });
55
+
56
+ it('convive con la promoción primaria singular, que no cambia', () => {
57
+ const audited: Pick<LoanCreditResponse, 'appliedPromotion' | 'appliedPromotions'> = {
58
+ appliedPromotion: {
59
+ promotionId: 'PROMO#1',
60
+ name: 'Buen Fin',
61
+ version: 2,
62
+ appliedEffects: [PromotionEffectKindEnum.DOWN_PAYMENT_DELTA],
63
+ },
64
+ appliedPromotions: [
65
+ {
66
+ promotionId: 'PROMO#1',
67
+ name: 'Buen Fin',
68
+ version: 2,
69
+ appliedEffects: [PromotionEffectKindEnum.DOWN_PAYMENT_DELTA],
70
+ },
71
+ ],
72
+ };
73
+ expect(audited.appliedPromotions?.[0].name).toBe(audited.appliedPromotion?.name);
74
+ });
75
+ });
@@ -0,0 +1,70 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ AppliedStorePolicyResponse,
4
+ CandidatePlanResponse,
5
+ FoldableTermEnum,
6
+ PromotionEffectKindEnum,
7
+ SimulationResultResponse,
8
+ } from '../../../src/loanOfferings/index';
9
+
10
+ /** Los valores del enum son las claves literales de los términos que el motor pliega. */
11
+ describe('FoldableTermEnum', () => {
12
+ it('expone exactamente los tres términos plegables con su clave literal', () => {
13
+ expect(Object.values(FoldableTermEnum).sort()).toEqual(
14
+ ['maxFinancedAmountCents', 'minDownPaymentPct', 'tnaAnnual'],
15
+ );
16
+ });
17
+ });
18
+
19
+ describe('auditoría de la simulación', () => {
20
+ it('tipa el plan candidato con su id y su código', () => {
21
+ const candidate: CandidatePlanResponse = { planId: 'PLAN#1', code: 'SK-12' };
22
+ expect(candidate.code).toBe('SK-12');
23
+ });
24
+
25
+ it('tipa la política aplicada con los términos que ganó', () => {
26
+ const policy: AppliedStorePolicyResponse = {
27
+ policyId: 'POL#1',
28
+ name: 'Freno de riesgo Norte',
29
+ appliedTerms: [FoldableTermEnum.TNA_ANNUAL, FoldableTermEnum.MIN_DOWN_PAYMENT_PCT],
30
+ };
31
+ expect(policy.appliedTerms).toHaveLength(2);
32
+ });
33
+
34
+ it('deja los tres bloques de auditoría opcionales y conviviendo con la promoción primaria', () => {
35
+ const minimal: Pick<SimulationResultResponse, 'appliedPromotion'> = { appliedPromotion: null };
36
+ expect(minimal.appliedPromotion).toBeNull();
37
+
38
+ const audited: Pick<
39
+ SimulationResultResponse,
40
+ 'appliedPromotion' | 'appliedPromotions' | 'candidatePlans' | 'appliedStorePolicies'
41
+ > = {
42
+ appliedPromotion: {
43
+ promotionId: 'PROMO#1',
44
+ name: 'Buen Fin',
45
+ version: 2,
46
+ appliedEffects: [PromotionEffectKindEnum.TNA_OVERRIDE],
47
+ },
48
+ appliedPromotions: [
49
+ {
50
+ promotionId: 'PROMO#1',
51
+ name: 'Buen Fin',
52
+ version: 2,
53
+ appliedEffects: [PromotionEffectKindEnum.TNA_OVERRIDE],
54
+ },
55
+ {
56
+ promotionId: 'PROMO#2',
57
+ name: 'Bono tarjeta',
58
+ version: 1,
59
+ appliedEffects: [PromotionEffectKindEnum.PCF_BONUS],
60
+ },
61
+ ],
62
+ candidatePlans: [{ planId: 'PLAN#1', code: 'SK-12' }],
63
+ appliedStorePolicies: [
64
+ { policyId: 'POL#1', name: 'Freno Norte', appliedTerms: [FoldableTermEnum.TNA_ANNUAL] },
65
+ ],
66
+ };
67
+ expect(audited.appliedPromotions).toHaveLength(2);
68
+ expect(audited.appliedPromotion?.promotionId).toBe(audited.appliedPromotions?.[0].promotionId);
69
+ });
70
+ });
@@ -0,0 +1,11 @@
1
+ import { FoldableTermEnum } from '../../loanOfferings/enums/FoldableTermEnum';
2
+ /**
3
+ * Política especial que ganó algún término de este crédito, congelada al cotizar. El catálogo de
4
+ * políticas es editable: sin esta copia, una edición posterior deja la cuota sin explicación.
5
+ */
6
+ export interface AppliedStorePolicySnapshot {
7
+ policyId: string;
8
+ name: string;
9
+ /** Términos del plan que esta política ganó en el pliegue final. */
10
+ appliedTerms: FoldableTermEnum[];
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `CreditPlan` que el motor consideró al cotizar este crédito, haya ganado algún término o no.
3
+ * Es lo que contesta por qué se cotizó con este plan y no con otro.
4
+ */
5
+ export interface CandidatePlanSnapshot {
6
+ planId: string;
7
+ code: string;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cotas con las que se cotizó este crédito de verdad, ya pisadas por promociones y políticas.
3
+ * NO son las del plan: una promoción puede bajar el enganche mínimo o subir el techo de monto.
4
+ */
5
+ export interface EffectiveTermsSnapshot {
6
+ /** Enganche mínimo exigible, en decimal sobre 1 (`0.10` = 10%). */
7
+ minDownPaymentPct: number;
8
+ /** Tope de enganche, o `null` si el plan no lo acota. */
9
+ maxDownPaymentPct: number | null;
10
+ /** Techo de capital financiable. */
11
+ maxFinancedAmountCents: number;
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,9 @@
1
1
  import { ClientLevelEnum } from '../../../loanScoring/enums/ClientLevelEnum';
2
2
  import { LoanCreditStatusEnum } from '../../enums/LoanCreditStatusEnum';
3
3
  import { AppliedPromotionSnapshot } from '../AppliedPromotionSnapshot';
4
+ import { AppliedStorePolicySnapshot } from '../AppliedStorePolicySnapshot';
5
+ import { CandidatePlanSnapshot } from '../CandidatePlanSnapshot';
6
+ import { EffectiveTermsSnapshot } from '../EffectiveTermsSnapshot';
4
7
  /**
5
8
  * Response de los endpoints de LoanCredit (loan-credit-business). Montos en cents; TNA decimal.
6
9
  */
@@ -31,6 +34,21 @@ export interface LoanCreditResponse {
31
34
  clientLevelAtOrigination?: ClientLevelEnum;
32
35
  /** Promoción con la que se cotizó, o `null` si ninguna alcanzaba a esta venta. */
33
36
  appliedPromotion?: AppliedPromotionSnapshot | null;
37
+ /**
38
+ * TODAS las promociones aplicadas: `appliedPromotion` es la primaria y esto es la auditoría
39
+ * completa. Los términos de arriba YA las incluyen, no son un extra a sumar.
40
+ */
41
+ appliedPromotions?: AppliedPromotionSnapshot[] | null;
42
+ /** Políticas especiales que ganaron algún término: qué frenó o aflojó la cuota. */
43
+ appliedStorePolicies?: AppliedStorePolicySnapshot[] | null;
44
+ /** Los planes que compitieron: contesta por qué este plan y no otro. */
45
+ candidatePlans?: CandidatePlanSnapshot[] | null;
46
+ /** Edición del plan al originar: contesta con qué reglas se cotizó, aunque después se edite. */
47
+ planVersionAtOrigination?: number | null;
48
+ /** Segmentos del cliente al cotizar: contesta por qué le alcanzó esa promoción. */
49
+ segmentIdsAtQuote?: string[] | null;
50
+ /** Cotas con las que se cotizó de verdad, ya pisadas por promociones y políticas. */
51
+ effectiveTerms?: EffectiveTermsSnapshot | null;
34
52
  activatedAt?: string;
35
53
  voluntaryCancelDeadline?: string;
36
54
  firstDueDate?: string;
@@ -9,6 +9,9 @@ export * from './dtos/LoanInstallment';
9
9
  export * from './dtos/LoanContract';
10
10
  export * from './dtos/ActivationChecklist';
11
11
  export * from './dtos/AppliedPromotionSnapshot';
12
+ export * from './dtos/AppliedStorePolicySnapshot';
13
+ export * from './dtos/CandidatePlanSnapshot';
14
+ export * from './dtos/EffectiveTermsSnapshot';
12
15
  export * from './dtos/requests/UpsertLoanBorrowerRequest';
13
16
  export * from './dtos/requests/OriginateLoanCreditRequest';
14
17
  export * from './dtos/requests/QuoteLoanCreditRequest';
@@ -30,6 +30,9 @@ __exportStar(require("./dtos/LoanInstallment"), exports);
30
30
  __exportStar(require("./dtos/LoanContract"), exports);
31
31
  __exportStar(require("./dtos/ActivationChecklist"), exports);
32
32
  __exportStar(require("./dtos/AppliedPromotionSnapshot"), exports);
33
+ __exportStar(require("./dtos/AppliedStorePolicySnapshot"), exports);
34
+ __exportStar(require("./dtos/CandidatePlanSnapshot"), exports);
35
+ __exportStar(require("./dtos/EffectiveTermsSnapshot"), exports);
33
36
  // Request DTOs
34
37
  __exportStar(require("./dtos/requests/UpsertLoanBorrowerRequest"), exports);
35
38
  __exportStar(require("./dtos/requests/OriginateLoanCreditRequest"), exports);
@@ -1,3 +1,4 @@
1
+ import { FoldableTermEnum } from '../../enums/FoldableTermEnum';
1
2
  import { PromotionEffectKindEnum } from '../../enums/PromotionEffectKindEnum';
2
3
  import { PlanTermProvenance } from './StorePolicyResponse';
3
4
  /**
@@ -27,6 +28,24 @@ export interface AppliedPromotionResponse {
27
28
  /** Palancas del plan que la promoción pisó. */
28
29
  appliedEffects: PromotionEffectKindEnum[];
29
30
  }
31
+ /**
32
+ * Una `CreditPlan` que el paso Base consideró para esta venta, haya ganado algún término o no.
33
+ * Es lo que contesta por qué ganó este plan y no otro.
34
+ */
35
+ export interface CandidatePlanResponse {
36
+ planId: string;
37
+ code: string;
38
+ }
39
+ /**
40
+ * Política especial que ganó al menos un término de esta cotización. Las políticas en alcance que
41
+ * no ganaron nada no se reportan: no explican la cuota.
42
+ */
43
+ export interface AppliedStorePolicyResponse {
44
+ policyId: string;
45
+ name: string;
46
+ /** Términos del plan que esta política ganó en el pliegue final. */
47
+ appliedTerms: FoldableTermEnum[];
48
+ }
30
49
  /**
31
50
  * Cotas con las que se cotizó de verdad, ya pisadas por la promoción y las políticas. NO son las
32
51
  * del plan: una promoción puede bajar el enganche mínimo o subir el techo de monto.
@@ -84,4 +103,18 @@ export interface SimulationResultResponse {
84
103
  * Las cotas efectivas de ESTA cotización. Ausente si el lambda todavía no las emite.
85
104
  */
86
105
  effectiveTerms?: EffectiveTermsResponse;
106
+ /**
107
+ * Todas las `CreditPlan` candidatas del paso Base. Ausente si el lambda todavía no lo emite.
108
+ */
109
+ candidatePlans?: CandidatePlanResponse[];
110
+ /**
111
+ * TODAS las promociones aplicadas: `appliedPromotion` es la primaria y esto es la auditoría
112
+ * completa. Los montos de arriba YA las incluyen, no son un extra a sumar. Ausente si el
113
+ * lambda todavía no lo emite.
114
+ */
115
+ appliedPromotions?: AppliedPromotionResponse[];
116
+ /**
117
+ * Políticas especiales que ganaron algún término. Ausente si el lambda todavía no lo emite.
118
+ */
119
+ appliedStorePolicies?: AppliedStorePolicyResponse[];
87
120
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Términos del plan que el motor de cotización pliega capa por capa (plan base, promociones,
3
+ * políticas especiales). El valor es la clave literal del término en el contrato.
4
+ * @enum {string}
5
+ */
6
+ export declare enum FoldableTermEnum {
7
+ MIN_DOWN_PAYMENT_PCT = "minDownPaymentPct",
8
+ TNA_ANNUAL = "tnaAnnual",
9
+ MAX_FINANCED_AMOUNT_CENTS = "maxFinancedAmountCents"
10
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FoldableTermEnum = void 0;
4
+ /**
5
+ * Términos del plan que el motor de cotización pliega capa por capa (plan base, promociones,
6
+ * políticas especiales). El valor es la clave literal del término en el contrato.
7
+ * @enum {string}
8
+ */
9
+ var FoldableTermEnum;
10
+ (function (FoldableTermEnum) {
11
+ FoldableTermEnum["MIN_DOWN_PAYMENT_PCT"] = "minDownPaymentPct";
12
+ FoldableTermEnum["TNA_ANNUAL"] = "tnaAnnual";
13
+ FoldableTermEnum["MAX_FINANCED_AMOUNT_CENTS"] = "maxFinancedAmountCents";
14
+ })(FoldableTermEnum || (exports.FoldableTermEnum = FoldableTermEnum = {}));
@@ -6,6 +6,7 @@ export * from './enums/FinancierTypeEnum';
6
6
  export * from './enums/FinancierStatusEnum';
7
7
  export * from './enums/PromotionStatusEnum';
8
8
  export * from './enums/PromotionEffectKindEnum';
9
+ export * from './enums/FoldableTermEnum';
9
10
  export * from './enums/PromotionBonusStatusEnum';
10
11
  export * from './enums/PromotionPhaseEnum';
11
12
  export * from './enums/PromotionLogEventEnum';
@@ -23,6 +23,7 @@ __exportStar(require("./enums/FinancierTypeEnum"), exports);
23
23
  __exportStar(require("./enums/FinancierStatusEnum"), exports);
24
24
  __exportStar(require("./enums/PromotionStatusEnum"), exports);
25
25
  __exportStar(require("./enums/PromotionEffectKindEnum"), exports);
26
+ __exportStar(require("./enums/FoldableTermEnum"), exports);
26
27
  __exportStar(require("./enums/PromotionBonusStatusEnum"), exports);
27
28
  __exportStar(require("./enums/PromotionPhaseEnum"), exports);
28
29
  __exportStar(require("./enums/PromotionLogEventEnum"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.395.0",
3
+ "version": "3.396.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,12 @@
1
+ import { FoldableTermEnum } from '../../loanOfferings/enums/FoldableTermEnum';
2
+
3
+ /**
4
+ * Política especial que ganó algún término de este crédito, congelada al cotizar. El catálogo de
5
+ * políticas es editable: sin esta copia, una edición posterior deja la cuota sin explicación.
6
+ */
7
+ export interface AppliedStorePolicySnapshot {
8
+ policyId: string;
9
+ name: string;
10
+ /** Términos del plan que esta política ganó en el pliegue final. */
11
+ appliedTerms: FoldableTermEnum[];
12
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `CreditPlan` que el motor consideró al cotizar este crédito, haya ganado algún término o no.
3
+ * Es lo que contesta por qué se cotizó con este plan y no con otro.
4
+ */
5
+ export interface CandidatePlanSnapshot {
6
+ planId: string;
7
+ code: string;
8
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cotas con las que se cotizó este crédito de verdad, ya pisadas por promociones y políticas.
3
+ * NO son las del plan: una promoción puede bajar el enganche mínimo o subir el techo de monto.
4
+ */
5
+ export interface EffectiveTermsSnapshot {
6
+ /** Enganche mínimo exigible, en decimal sobre 1 (`0.10` = 10%). */
7
+ minDownPaymentPct: number;
8
+ /** Tope de enganche, o `null` si el plan no lo acota. */
9
+ maxDownPaymentPct: number | null;
10
+ /** Techo de capital financiable. */
11
+ maxFinancedAmountCents: number;
12
+ }
@@ -1,6 +1,9 @@
1
1
  import { ClientLevelEnum } from '../../../loanScoring/enums/ClientLevelEnum';
2
2
  import { LoanCreditStatusEnum } from '../../enums/LoanCreditStatusEnum';
3
3
  import { AppliedPromotionSnapshot } from '../AppliedPromotionSnapshot';
4
+ import { AppliedStorePolicySnapshot } from '../AppliedStorePolicySnapshot';
5
+ import { CandidatePlanSnapshot } from '../CandidatePlanSnapshot';
6
+ import { EffectiveTermsSnapshot } from '../EffectiveTermsSnapshot';
4
7
 
5
8
  /**
6
9
  * Response de los endpoints de LoanCredit (loan-credit-business). Montos en cents; TNA decimal.
@@ -32,6 +35,21 @@ export interface LoanCreditResponse {
32
35
  clientLevelAtOrigination?: ClientLevelEnum;
33
36
  /** Promoción con la que se cotizó, o `null` si ninguna alcanzaba a esta venta. */
34
37
  appliedPromotion?: AppliedPromotionSnapshot | null;
38
+ /**
39
+ * TODAS las promociones aplicadas: `appliedPromotion` es la primaria y esto es la auditoría
40
+ * completa. Los términos de arriba YA las incluyen, no son un extra a sumar.
41
+ */
42
+ appliedPromotions?: AppliedPromotionSnapshot[] | null;
43
+ /** Políticas especiales que ganaron algún término: qué frenó o aflojó la cuota. */
44
+ appliedStorePolicies?: AppliedStorePolicySnapshot[] | null;
45
+ /** Los planes que compitieron: contesta por qué este plan y no otro. */
46
+ candidatePlans?: CandidatePlanSnapshot[] | null;
47
+ /** Edición del plan al originar: contesta con qué reglas se cotizó, aunque después se edite. */
48
+ planVersionAtOrigination?: number | null;
49
+ /** Segmentos del cliente al cotizar: contesta por qué le alcanzó esa promoción. */
50
+ segmentIdsAtQuote?: string[] | null;
51
+ /** Cotas con las que se cotizó de verdad, ya pisadas por promociones y políticas. */
52
+ effectiveTerms?: EffectiveTermsSnapshot | null;
35
53
  activatedAt?: string;
36
54
  voluntaryCancelDeadline?: string;
37
55
  firstDueDate?: string;
@@ -13,6 +13,9 @@ export * from './dtos/LoanInstallment';
13
13
  export * from './dtos/LoanContract';
14
14
  export * from './dtos/ActivationChecklist';
15
15
  export * from './dtos/AppliedPromotionSnapshot';
16
+ export * from './dtos/AppliedStorePolicySnapshot';
17
+ export * from './dtos/CandidatePlanSnapshot';
18
+ export * from './dtos/EffectiveTermsSnapshot';
16
19
 
17
20
  // Request DTOs
18
21
  export * from './dtos/requests/UpsertLoanBorrowerRequest';
@@ -1,3 +1,4 @@
1
+ import { FoldableTermEnum } from '../../enums/FoldableTermEnum';
1
2
  import { PromotionEffectKindEnum } from '../../enums/PromotionEffectKindEnum';
2
3
  import { PlanTermProvenance } from './StorePolicyResponse';
3
4
 
@@ -30,6 +31,26 @@ export interface AppliedPromotionResponse {
30
31
  appliedEffects: PromotionEffectKindEnum[];
31
32
  }
32
33
 
34
+ /**
35
+ * Una `CreditPlan` que el paso Base consideró para esta venta, haya ganado algún término o no.
36
+ * Es lo que contesta por qué ganó este plan y no otro.
37
+ */
38
+ export interface CandidatePlanResponse {
39
+ planId: string;
40
+ code: string;
41
+ }
42
+
43
+ /**
44
+ * Política especial que ganó al menos un término de esta cotización. Las políticas en alcance que
45
+ * no ganaron nada no se reportan: no explican la cuota.
46
+ */
47
+ export interface AppliedStorePolicyResponse {
48
+ policyId: string;
49
+ name: string;
50
+ /** Términos del plan que esta política ganó en el pliegue final. */
51
+ appliedTerms: FoldableTermEnum[];
52
+ }
53
+
33
54
  /**
34
55
  * Cotas con las que se cotizó de verdad, ya pisadas por la promoción y las políticas. NO son las
35
56
  * del plan: una promoción puede bajar el enganche mínimo o subir el techo de monto.
@@ -88,4 +109,18 @@ export interface SimulationResultResponse {
88
109
  * Las cotas efectivas de ESTA cotización. Ausente si el lambda todavía no las emite.
89
110
  */
90
111
  effectiveTerms?: EffectiveTermsResponse;
112
+ /**
113
+ * Todas las `CreditPlan` candidatas del paso Base. Ausente si el lambda todavía no lo emite.
114
+ */
115
+ candidatePlans?: CandidatePlanResponse[];
116
+ /**
117
+ * TODAS las promociones aplicadas: `appliedPromotion` es la primaria y esto es la auditoría
118
+ * completa. Los montos de arriba YA las incluyen, no son un extra a sumar. Ausente si el
119
+ * lambda todavía no lo emite.
120
+ */
121
+ appliedPromotions?: AppliedPromotionResponse[];
122
+ /**
123
+ * Políticas especiales que ganaron algún término. Ausente si el lambda todavía no lo emite.
124
+ */
125
+ appliedStorePolicies?: AppliedStorePolicyResponse[];
91
126
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Términos del plan que el motor de cotización pliega capa por capa (plan base, promociones,
3
+ * políticas especiales). El valor es la clave literal del término en el contrato.
4
+ * @enum {string}
5
+ */
6
+ export enum FoldableTermEnum {
7
+ MIN_DOWN_PAYMENT_PCT = 'minDownPaymentPct',
8
+ TNA_ANNUAL = 'tnaAnnual',
9
+ MAX_FINANCED_AMOUNT_CENTS = 'maxFinancedAmountCents',
10
+ }
@@ -7,6 +7,7 @@ export * from './enums/FinancierTypeEnum';
7
7
  export * from './enums/FinancierStatusEnum';
8
8
  export * from './enums/PromotionStatusEnum';
9
9
  export * from './enums/PromotionEffectKindEnum';
10
+ export * from './enums/FoldableTermEnum';
10
11
  export * from './enums/PromotionBonusStatusEnum';
11
12
  export * from './enums/PromotionPhaseEnum';
12
13
  export * from './enums/PromotionLogEventEnum';