@fiado/type-kit 3.152.0 → 3.154.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bin/cognitoBackofficeConnector/dtos/MfaPoolConfig.d.ts +7 -0
  2. package/bin/cognitoBackofficeConnector/dtos/MfaPoolConfig.js +36 -0
  3. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.d.ts +20 -0
  4. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.js +11 -0
  5. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.d.ts +4 -0
  6. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.js +6 -0
  7. package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.d.ts +17 -0
  8. package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.js +39 -0
  9. package/bin/rbac/enums/PoolKind.d.ts +16 -0
  10. package/bin/rbac/enums/PoolKind.js +20 -0
  11. package/bin/rbac/index.d.ts +1 -0
  12. package/bin/rbac/index.js +17 -0
  13. package/bin/remittance/dtos/RemittancePricing.d.ts +93 -0
  14. package/bin/remittance/dtos/RemittancePricing.js +165 -0
  15. package/bin/remittance/dtos/RemittancePromotion.d.ts +90 -0
  16. package/bin/remittance/dtos/RemittancePromotion.js +150 -0
  17. package/bin/remittance/dtos/index.d.ts +2 -0
  18. package/bin/remittance/dtos/index.js +2 -0
  19. package/bin/remittance/dtos/internal/RemittancePricingBridge.d.ts +26 -0
  20. package/bin/remittance/dtos/internal/RemittancePricingBridge.js +47 -0
  21. package/bin/remittance/dtos/internal/RemittancePromotionReach.d.ts +17 -0
  22. package/bin/remittance/dtos/internal/RemittancePromotionReach.js +44 -0
  23. package/bin/remittance/enums/FeeEffectMode.d.ts +7 -0
  24. package/bin/remittance/enums/FeeEffectMode.js +11 -0
  25. package/bin/remittance/enums/FxEffectMode.d.ts +6 -0
  26. package/bin/remittance/enums/FxEffectMode.js +10 -0
  27. package/bin/remittance/enums/PromotionActivation.d.ts +7 -0
  28. package/bin/remittance/enums/PromotionActivation.js +11 -0
  29. package/bin/remittance/enums/PromotionKind.d.ts +9 -0
  30. package/bin/remittance/enums/PromotionKind.js +13 -0
  31. package/bin/remittance/enums/PromotionStatus.d.ts +7 -0
  32. package/bin/remittance/enums/PromotionStatus.js +11 -0
  33. package/bin/remittance/enums/RemittanceCorridor.d.ts +19 -0
  34. package/bin/remittance/enums/RemittanceCorridor.js +25 -0
  35. package/bin/remittance/enums/index.d.ts +6 -0
  36. package/bin/remittance/enums/index.js +6 -0
  37. package/bin/remittance/index.d.ts +2 -0
  38. package/bin/remittance/index.js +2 -0
  39. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +1 -10
  40. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +3 -13
  41. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +1 -9
  42. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +0 -7
  43. package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +11 -0
  44. package/bin/{platformRbac/dtos/CompleteMyProfileRequest.js → walletFunding/dtos/CancelFundingRequest.js} +14 -15
  45. package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +14 -0
  46. package/bin/walletFunding/dtos/CancelFundingResponse.js +12 -0
  47. package/package.json +1 -1
  48. package/src/remittance/dtos/RemittancePricing.ts +184 -0
  49. package/src/remittance/dtos/RemittancePromotion.ts +162 -0
  50. package/src/remittance/dtos/index.ts +2 -0
  51. package/src/remittance/dtos/internal/RemittancePricingBridge.ts +36 -0
  52. package/src/remittance/dtos/internal/RemittancePromotionReach.ts +31 -0
  53. package/src/remittance/enums/FeeEffectMode.ts +7 -0
  54. package/src/remittance/enums/FxEffectMode.ts +6 -0
  55. package/src/remittance/enums/PromotionActivation.ts +7 -0
  56. package/src/remittance/enums/PromotionKind.ts +9 -0
  57. package/src/remittance/enums/PromotionStatus.ts +7 -0
  58. package/src/remittance/enums/RemittanceCorridor.ts +22 -0
  59. package/src/remittance/enums/index.ts +6 -0
  60. package/src/remittance/index.ts +2 -0
  61. package/bin/platformRbac/dtos/CompleteMyProfileRequest.d.ts +0 -9
@@ -0,0 +1,14 @@
1
+ import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
2
+ import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
3
+ /**
4
+ * Response del cancel via Centro de Beneficios (spec 13 v2.0).
5
+ * `status` reusa `BenefitPaymentStatusEnum` (APPROVED = cancel aceptado;
6
+ * REJECTED = no se pudo) para consistencia con `CancelFundingReferenceResponse`
7
+ * (marketplace ↔ connector). Idempotente: re-cancelar devuelve APPROVED.
8
+ */
9
+ export declare class CancelFundingResponse {
10
+ fundingId: string;
11
+ status: BenefitPaymentStatusEnum;
12
+ errorCode?: WalletFundingErrorCodeEnum;
13
+ message?: string;
14
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CancelFundingResponse = void 0;
4
+ /**
5
+ * Response del cancel via Centro de Beneficios (spec 13 v2.0).
6
+ * `status` reusa `BenefitPaymentStatusEnum` (APPROVED = cancel aceptado;
7
+ * REJECTED = no se pudo) para consistencia con `CancelFundingReferenceResponse`
8
+ * (marketplace ↔ connector). Idempotente: re-cancelar devuelve APPROVED.
9
+ */
10
+ class CancelFundingResponse {
11
+ }
12
+ exports.CancelFundingResponse = CancelFundingResponse;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.152.0",
3
+ "version": "3.154.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,184 @@
1
+ import { Type } from "class-transformer";
2
+ import {
3
+ ArrayMaxSize,
4
+ ArrayMinSize,
5
+ IsArray,
6
+ IsEnum,
7
+ IsInt,
8
+ IsNumber,
9
+ IsOptional,
10
+ IsString,
11
+ Length,
12
+ Max,
13
+ MaxLength,
14
+ Min,
15
+ ValidateNested,
16
+ } from "class-validator";
17
+ import { RemittanceCorridor } from "../enums/RemittanceCorridor";
18
+
19
+ /**
20
+ * DTOs de Precio Base (Dashboard Ops · Variables Operativas §1).
21
+ *
22
+ * Una combinación (corridor × segmento) define el markup FX (bps CON SIGNO:
23
+ * + Fiado gana spread; − Fiado subsidia, retail > wholesale) y los service fees
24
+ * escalonados por tramo de monto. Dueño de la tabla: remittance-business
25
+ * (RemittancePricing_GT). Cambios inmediatos al guardar; lo temporal vive en
26
+ * Promociones. retail = wholesale × (1 − markupBps/10000), SIN clampear
27
+ * (el tope ≤ base de UNIR es transitorio).
28
+ */
29
+
30
+ /** Tramo de service fee. Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
31
+ export class PricingTier {
32
+ @IsNumber()
33
+ @Min(1)
34
+ amountMin!: number;
35
+
36
+ /** Display ("$1–$49"); null/ausente = sin tope (último tramo). El matching NO lo usa. */
37
+ @IsOptional()
38
+ @IsNumber()
39
+ amountMax?: number | null;
40
+
41
+ @IsNumber()
42
+ @Min(0)
43
+ @Max(100)
44
+ serviceFee!: number;
45
+
46
+ /** ISO date (YYYY-MM-DD) "FEE DESDE" — informativo. */
47
+ @IsString()
48
+ @Length(10, 10)
49
+ effectiveFrom!: string;
50
+ }
51
+
52
+ /** Body de POST /backoffice/pricing/base. */
53
+ export class CreatePricingRequest {
54
+ @IsEnum(RemittanceCorridor)
55
+ corridor!: RemittanceCorridor;
56
+
57
+ @IsString()
58
+ @Length(1, 100)
59
+ segmentId!: string;
60
+
61
+ /** CON SIGNO: + Fiado gana spread; − Fiado subsidia (retail > wholesale). */
62
+ @IsInt()
63
+ @Min(-500)
64
+ @Max(500)
65
+ markupBps!: number;
66
+
67
+ @IsArray()
68
+ @ArrayMinSize(1)
69
+ @ArrayMaxSize(20)
70
+ @ValidateNested({ each: true })
71
+ @Type(() => PricingTier)
72
+ tramos!: PricingTier[];
73
+
74
+ @IsOptional()
75
+ @IsString()
76
+ @MaxLength(100)
77
+ name?: string;
78
+
79
+ @IsOptional()
80
+ @IsString()
81
+ @MaxLength(500)
82
+ notes?: string;
83
+ }
84
+
85
+ /** Body de PUT /backoffice/pricing/base/{id} (reemplazo completo; corridor/segmentId inmutables). */
86
+ export class UpdatePricingRequest {
87
+ @IsInt()
88
+ @Min(-500)
89
+ @Max(500)
90
+ markupBps!: number;
91
+
92
+ @IsArray()
93
+ @ArrayMinSize(1)
94
+ @ArrayMaxSize(20)
95
+ @ValidateNested({ each: true })
96
+ @Type(() => PricingTier)
97
+ tramos!: PricingTier[];
98
+
99
+ @IsOptional()
100
+ @IsString()
101
+ @MaxLength(100)
102
+ name?: string;
103
+
104
+ @IsOptional()
105
+ @IsString()
106
+ @MaxLength(500)
107
+ notes?: string;
108
+ }
109
+
110
+ /** Combinación completa (response de list/create/update). */
111
+ export class PricingCombination {
112
+ id!: string;
113
+ corridor!: RemittanceCorridor;
114
+ segmentId!: string;
115
+ /** Display resuelto contra RemittanceSegments_GT ("Premium"); segmentId si no resoluble. */
116
+ segmentName!: string;
117
+ markupBps!: number;
118
+ tramos!: PricingTier[];
119
+ /** # promos activas que aplican a la combinación. 0 hasta que exista Promociones. */
120
+ promosCount!: number;
121
+ name!: string | null;
122
+ notes!: string | null;
123
+ createdAt!: string;
124
+ updatedAt!: string;
125
+ createdBy!: string;
126
+ updatedBy!: string;
127
+ }
128
+
129
+ /** Response de GET /backoffice/pricing/base. */
130
+ export class PricingListResponse {
131
+ items!: PricingCombination[];
132
+ }
133
+
134
+ /** Response de GET /backoffice/pricing/base/{id}/metrics. */
135
+ export class PricingCombinationMetrics {
136
+ /** Miembros del segmento con ≥1 tx no-cancelada al corredor (histórica). */
137
+ clientCount!: number;
138
+ /** Σ amountUSD del mes calendario (UTC) de esas tx al corredor, sin CANCELLED/REFUND. */
139
+ volMonthUSD!: number;
140
+ }
141
+
142
+ /** Body de POST /backoffice/pricing/simulate (valores del panel — pueden NO estar guardados). */
143
+ export class SimulatePricingRequest {
144
+ @IsEnum(RemittanceCorridor)
145
+ corridor!: RemittanceCorridor;
146
+
147
+ @IsNumber()
148
+ @Min(1)
149
+ amountUSD!: number;
150
+
151
+ @IsInt()
152
+ @Min(-500)
153
+ @Max(500)
154
+ markupBps!: number;
155
+
156
+ @IsArray()
157
+ @ArrayMinSize(1)
158
+ @ArrayMaxSize(20)
159
+ @ValidateNested({ each: true })
160
+ @Type(() => PricingTier)
161
+ tramos!: PricingTier[];
162
+ }
163
+
164
+ export class SimulatePricingResponse {
165
+ /** ExternalQuickQuotes (vivo). */
166
+ wholesale!: number;
167
+ /** round4(wholesale × (1 − markupBps/10000)) — SIN clampear (markup negativo ⇒ retail > wholesale). */
168
+ retail!: number;
169
+ /** Del tramo matcheado (mayor amountMin ≤ amountUSD). */
170
+ serviceFee!: number;
171
+ /** round2(amountUSD × retail), en moneda destino. */
172
+ receives!: number;
173
+ /** amountUSD + serviceFee (el stateFee lo calcula UNIR; prod US = 0). */
174
+ totalToPay!: number;
175
+ /** ISO del quote. */
176
+ asOf!: string;
177
+ }
178
+
179
+ /** Response de GET /backoffice/pricing/wholesale?corridor= (rb passthrough del connector). */
180
+ export class WholesaleRateResponse {
181
+ corridor!: RemittanceCorridor;
182
+ wholesale!: number;
183
+ asOf!: string;
184
+ }
@@ -0,0 +1,162 @@
1
+ import { Type } from "class-transformer";
2
+ import {
3
+ IsEnum,
4
+ IsInt,
5
+ IsNumber,
6
+ IsOptional,
7
+ IsString,
8
+ Length,
9
+ Matches,
10
+ Max,
11
+ MaxLength,
12
+ Min,
13
+ ValidateNested,
14
+ } from "class-validator";
15
+ import { FeeEffectMode } from "../enums/FeeEffectMode";
16
+ import { FxEffectMode } from "../enums/FxEffectMode";
17
+ import { PromotionActivation } from "../enums/PromotionActivation";
18
+ import { PromotionKind } from "../enums/PromotionKind";
19
+ import { PromotionStatus } from "../enums/PromotionStatus";
20
+ import { RemittanceCorridor } from "../enums/RemittanceCorridor";
21
+
22
+ /**
23
+ * DTOs de Promociones (Dashboard Ops · Variables Operativas §2).
24
+ *
25
+ * UniTeller NO participa (no hay motor de promos en API Lite): toda la lógica
26
+ * vive en Fiado. Una promo es un OVERRIDE de Precio Base (markup y/o fee) para
27
+ * una audiencia (corridor × segmento × cohort, null = Cualquiera) y vigencia.
28
+ * Dueño de la tabla: remittance-business (RemittancePromotions_GT). La
29
+ * resolución en send-time (capas: base → PRICE_CHANGE → mejor-para-el-cliente)
30
+ * es Fase B — estos DTOs cubren la config.
31
+ */
32
+
33
+ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
34
+
35
+ /** Audiencia: null en una dimensión = "Cualquiera". */
36
+ export class PromotionAudience {
37
+ @IsOptional()
38
+ @IsEnum(RemittanceCorridor)
39
+ corridor?: RemittanceCorridor | null;
40
+
41
+ @IsOptional()
42
+ @IsString()
43
+ @Length(1, 100)
44
+ segmentId?: string | null;
45
+
46
+ @IsOptional()
47
+ @IsString()
48
+ @Length(1, 100)
49
+ cohortId?: string | null;
50
+ }
51
+
52
+ /** Efecto FX (spread): DELTA suma bps CON SIGNO al markup base; ABSOLUTE lo reemplaza. */
53
+ export class FxEffect {
54
+ @IsEnum(FxEffectMode)
55
+ mode!: FxEffectMode;
56
+
57
+ /** bps con signo. Ignorado si mode=NONE (mandar 0). */
58
+ @IsInt()
59
+ @Min(-500)
60
+ @Max(500)
61
+ valueBps!: number;
62
+ }
63
+
64
+ /** Efecto fee: ABSOLUTE = $; DELTA = ±$; PERCENTAGE = −% del fee (0-100). */
65
+ export class FeeEffect {
66
+ @IsEnum(FeeEffectMode)
67
+ mode!: FeeEffectMode;
68
+
69
+ @IsNumber()
70
+ @Min(-100)
71
+ @Max(100)
72
+ value!: number;
73
+ }
74
+
75
+ export class CreatePromotionRequest {
76
+ @IsString()
77
+ @Length(3, 100)
78
+ name!: string;
79
+
80
+ @IsEnum(PromotionKind)
81
+ kind!: PromotionKind;
82
+
83
+ @IsEnum(PromotionActivation)
84
+ activation!: PromotionActivation;
85
+
86
+ /** Requerido si activation=CODE (regla en manager); único case-insensitive. */
87
+ @IsOptional()
88
+ @IsString()
89
+ @Length(3, 30)
90
+ @Matches(/^[A-Z0-9_-]+$/i)
91
+ code?: string | null;
92
+
93
+ @ValidateNested()
94
+ @Type(() => PromotionAudience)
95
+ audience!: PromotionAudience;
96
+
97
+ /** ISO date (YYYY-MM-DD). */
98
+ @IsString()
99
+ @Matches(ISO_DATE)
100
+ effectiveFrom!: string;
101
+
102
+ /** ISO date; null/ausente = permanente (∞). */
103
+ @IsOptional()
104
+ @IsString()
105
+ @Matches(ISO_DATE)
106
+ effectiveTo?: string | null;
107
+
108
+ @ValidateNested()
109
+ @Type(() => FxEffect)
110
+ fxEffect!: FxEffect;
111
+
112
+ @ValidateNested()
113
+ @Type(() => FeeEffect)
114
+ feeEffect!: FeeEffect;
115
+
116
+ @IsOptional()
117
+ @IsString()
118
+ @MaxLength(500)
119
+ notes?: string | null;
120
+ }
121
+
122
+ /** PUT — reemplazo completo (mismos campos que create). */
123
+ export class UpdatePromotionRequest extends CreatePromotionRequest {
124
+ }
125
+
126
+ /** Promoción completa (response de list/create/update). */
127
+ export class Promotion {
128
+ id!: string;
129
+ name!: string;
130
+ kind!: PromotionKind;
131
+ activation!: PromotionActivation;
132
+ code!: string | null;
133
+ audience!: { corridor: RemittanceCorridor | null; segmentId: string | null; cohortId: string | null };
134
+ /** Display: nombres resueltos de segmento/cohort (null = "Cualquiera" o no resoluble). */
135
+ audienceDisplay!: { corridor: string | null; segmentName: string | null; cohortName: string | null };
136
+ effectiveFrom!: string;
137
+ effectiveTo!: string | null;
138
+ fxEffect!: { mode: FxEffectMode; valueBps: number };
139
+ feeEffect!: { mode: FeeEffectMode; value: number };
140
+ /** Derivado de la vigencia vs hoy (UTC). */
141
+ status!: PromotionStatus;
142
+ /** Legible para la columna EFECTO: "MU −30 bps + Fee = $0". */
143
+ effectSummary!: string;
144
+ notes!: string | null;
145
+ createdAt!: string;
146
+ updatedAt!: string;
147
+ createdBy!: string;
148
+ updatedBy!: string;
149
+ }
150
+
151
+ /** Response de GET /backoffice/pricing/promotions. */
152
+ export class PromotionListResponse {
153
+ items!: Promotion[];
154
+ }
155
+
156
+ /** Response de GET /backoffice/pricing/promotions/reach. */
157
+ export class PromotionReachResponse {
158
+ /** Clientes en la intersección corridor × segmento × cohort. */
159
+ reach!: number;
160
+ /** Universo (todos los RemittanceUsers) — para el % del picker. */
161
+ total!: number;
162
+ }
@@ -40,3 +40,5 @@ export * from "./RemittanceCohort";
40
40
  export * from "./RemittanceAuditLog";
41
41
  export * from "./RemittanceSegment";
42
42
  export * from "./RemittanceCommittee";
43
+ export * from "./RemittancePricing";
44
+ export * from "./RemittancePromotion";
@@ -0,0 +1,36 @@
1
+ import { IsArray, IsEnum, IsUUID } from "class-validator";
2
+ import { RemittanceCorridor } from "../../enums/RemittanceCorridor";
3
+
4
+ /**
5
+ * Contratos internos del puente de Precio Base (Opción A, como
6
+ * RemittanceSegmentMetrics): remittance-business resuelve la membresía del
7
+ * segmento y el uniteller-connector (dueño de RemittanceUsers_GT /
8
+ * RemittanceTransactions_GT y de la integración UNIR) computa.
9
+ */
10
+
11
+ /** POST /backoffice/pricing/wholesale (privado connector): wholesale vivo de ExternalQuickQuotes. */
12
+ export class WholesaleRateRequest {
13
+ @IsEnum(RemittanceCorridor)
14
+ corridor!: RemittanceCorridor;
15
+ }
16
+
17
+ /**
18
+ * POST /backoffice/config/pricing/metrics (privado connector). El filtro de
19
+ * corredor se hace por countryISO (CORRIDOR_INFO — no ambiguo con USD-SVC).
20
+ */
21
+ export class PricingMetricsRequest {
22
+ /** Miembros del segmento ya resueltos por rb. `[]` → { clientCount: 0, volMonthUSD: 0 }. */
23
+ @IsArray()
24
+ @IsUUID("4", { each: true })
25
+ directoryIds!: string[];
26
+
27
+ @IsEnum(RemittanceCorridor)
28
+ corridor!: RemittanceCorridor;
29
+ }
30
+
31
+ export class PricingMetricsResponse {
32
+ /** ids del request con ≥1 tx no-cancelada al corredor (histórica). */
33
+ clientCount!: number;
34
+ /** Σ amountUSD del mes calendario corriente (UTC) de esas tx al corredor, sin CANCELLED/REFUND. */
35
+ volMonthUSD!: number;
36
+ }
@@ -0,0 +1,31 @@
1
+ import { Type } from "class-transformer";
2
+ import { IsArray, IsEnum, IsOptional, IsUUID, ValidateNested } from "class-validator";
3
+ import { CohortCondition } from "../RemittanceCohort";
4
+ import { RemittanceCorridor } from "../../enums/RemittanceCorridor";
5
+
6
+ /**
7
+ * Contrato interno del reach de Promociones (puente Opción A):
8
+ * POST /backoffice/config/promotions/reach (privado connector). rb resuelve las
9
+ * dimensiones a datos crudos — segmento → directoryIds; cohort → conditions;
10
+ * corredor → corridor — y el connector computa la intersección sobre el universo
11
+ * de RemittanceUsers. Toda dimensión AUSENTE = no filtra ("Cualquiera").
12
+ */
13
+ export class PromotionReachRequest {
14
+ /** Miembros del segmento (resueltos por rb). Ausente = todos los usuarios. */
15
+ @IsOptional()
16
+ @IsArray()
17
+ @IsUUID("4", { each: true })
18
+ directoryIds?: string[];
19
+
20
+ /** Condiciones del cohort (AND, evaluadas como en cohortCount). Ausente = sin filtro. */
21
+ @IsOptional()
22
+ @IsArray()
23
+ @ValidateNested({ each: true })
24
+ @Type(() => CohortCondition)
25
+ conditions?: CohortCondition[];
26
+
27
+ /** Filtro por corredor (countryISO de CORRIDOR_INFO, ≥1 tx no-cancelada histórica). Ausente = sin filtro. */
28
+ @IsOptional()
29
+ @IsEnum(RemittanceCorridor)
30
+ corridor?: RemittanceCorridor;
31
+ }
@@ -0,0 +1,7 @@
1
+ /** Efecto de la promo sobre el service fee (relativo a la base efectiva). */
2
+ export enum FeeEffectMode {
3
+ NONE = "NONE", // sin cambio
4
+ ABSOLUTE = "ABSOLUTE", // fee = value (USD)
5
+ DELTA = "DELTA", // baseFee + value (CON SIGNO)
6
+ PERCENTAGE = "PERCENTAGE", // baseFee × (1 − value/100), value 0-100
7
+ }
@@ -0,0 +1,6 @@
1
+ /** Efecto de la promo sobre el spread FX (relativo a la base efectiva). */
2
+ export enum FxEffectMode {
3
+ NONE = "NONE", // sin cambio
4
+ DELTA = "DELTA", // baseMarkup + valueBps (CON SIGNO)
5
+ ABSOLUTE = "ABSOLUTE", // markup = valueBps
6
+ }
@@ -0,0 +1,7 @@
1
+ /** Cómo se activa la promo para el cliente. */
2
+ export enum PromotionActivation {
3
+ /** Auto-aplica a toda la audiencia. */
4
+ AUTOMATIC = "AUTOMATIC",
5
+ /** El cliente teclea el código en la app (habilita SOLO esa promo). */
6
+ CODE = "CODE",
7
+ }
@@ -0,0 +1,9 @@
1
+ /** Tipo de promoción (Variables Operativas › Promociones — mockup). */
2
+ export enum PromotionKind {
3
+ /** Descuento promocional temporal (puede tener código). */
4
+ PROMO = "PROMO",
5
+ /** Cambio de BASE programado (overlay absoluto; NO muta RemittancePricing_GT). */
6
+ PRICE_CHANGE = "PRICE_CHANGE",
7
+ /** Override permanente por audiencia (VIP, Onboarding sin fee, …). */
8
+ PREFERENTIAL = "PREFERENTIAL",
9
+ }
@@ -0,0 +1,7 @@
1
+ /** Estado DERIVADO de effectiveFrom/To vs hoy (UTC). NO se persiste. */
2
+ export enum PromotionStatus {
3
+ ACTIVE = "ACTIVE", // vigente con fecha de fin
4
+ SCHEDULED = "SCHEDULED", // programada (hoy < from)
5
+ PERMANENT = "PERMANENT", // vigente sin fin (effectiveTo null)
6
+ EXPIRED = "EXPIRED", // vencida (hoy > to)
7
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Corredores de remesa soportados (Dashboard Ops · Variables Operativas).
3
+ *
4
+ * D-PB-3: nomenclatura por MONEDA ISO-4217 (`USD-<destino>`). `USD_SVC` es un
5
+ * símbolo para El Salvador (su payout real es USD; usar la moneda colisionaría
6
+ * como "USD-USD"). Por eso el destino real vive en CORRIDOR_INFO y el filtro de
7
+ * transacciones usa countryISO (no ambiguo).
8
+ */
9
+ export enum RemittanceCorridor {
10
+ USD_GTQ = "USD-GTQ",
11
+ USD_MXN = "USD-MXN",
12
+ USD_HNL = "USD-HNL",
13
+ USD_SVC = "USD-SVC",
14
+ }
15
+
16
+ /** Destino real del corredor. El filtro de tx usa countryISO; currencyISO es el payout. */
17
+ export const CORRIDOR_INFO: Record<RemittanceCorridor, { countryISO: string; currencyISO: string }> = {
18
+ [RemittanceCorridor.USD_GTQ]: { countryISO: "GT", currencyISO: "GTQ" },
19
+ [RemittanceCorridor.USD_MXN]: { countryISO: "MX", currencyISO: "MXN" },
20
+ [RemittanceCorridor.USD_HNL]: { countryISO: "HN", currencyISO: "HNL" },
21
+ [RemittanceCorridor.USD_SVC]: { countryISO: "SV", currencyISO: "USD" },
22
+ };
@@ -11,3 +11,9 @@ export * from "./CohortRefresh";
11
11
  export * from "./AuditAction";
12
12
  export * from "./AuditEntityType";
13
13
  export * from "./SegmentMemberType";
14
+ export * from "./RemittanceCorridor";
15
+ export * from "./PromotionKind";
16
+ export * from "./PromotionActivation";
17
+ export * from "./PromotionStatus";
18
+ export * from "./FxEffectMode";
19
+ export * from "./FeeEffectMode";
@@ -6,3 +6,5 @@ export * from "./dtos/internal/RemittanceCreditBackRequest";
6
6
  export * from "./dtos/internal/RemittanceCreditBackResponse";
7
7
  export * from "./dtos/internal/RemittanceCohortCount";
8
8
  export * from "./dtos/internal/RemittanceSegmentMetrics";
9
+ export * from "./dtos/internal/RemittancePricingBridge";
10
+ export * from "./dtos/internal/RemittancePromotionReach";
@@ -1,9 +0,0 @@
1
- /**
2
- * Body del PUT /me/profile/complete (autenticado, gate post-MFA del autoregistro). DEC-RBAC-034.
3
- * Opera sobre el propio usuario (cognitoSub del token). Valida nombre + los `userFieldDefs` requeridos
4
- * del tenant (422 MISSING_REQUIRED_FIELDS si faltan) y flipea `profileComplete=true`.
5
- */
6
- export declare class CompleteMyProfileRequest {
7
- displayName: string;
8
- customFields?: Record<string, string>;
9
- }