@fiado/type-kit 3.272.0 → 3.275.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/datalakeQuery/dtos/AggregateRequestDto.d.ts +29 -0
- package/bin/datalakeQuery/dtos/AggregateRequestDto.js +2 -0
- package/bin/datalakeQuery/dtos/ReportRequestDto.d.ts +92 -0
- package/bin/datalakeQuery/dtos/ReportRequestDto.js +2 -0
- package/bin/datalakeQuery/dtos/ReportResultDto.d.ts +27 -0
- package/bin/datalakeQuery/dtos/ReportResultDto.js +2 -0
- package/bin/datalakeQuery/enums/FilterOpEnum.d.ts +18 -0
- package/bin/datalakeQuery/enums/FilterOpEnum.js +22 -0
- package/bin/datalakeQuery/enums/JoinTypeEnum.d.ts +4 -0
- package/bin/datalakeQuery/enums/JoinTypeEnum.js +8 -0
- package/bin/datalakeQuery/enums/MetricFnEnum.d.ts +8 -0
- package/bin/datalakeQuery/enums/MetricFnEnum.js +12 -0
- package/bin/datalakeQuery/enums/ReportJobStatusEnum.d.ts +6 -0
- package/bin/datalakeQuery/enums/ReportJobStatusEnum.js +10 -0
- package/bin/datalakeQuery/index.d.ts +7 -0
- package/bin/datalakeQuery/index.js +25 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +3 -2
- package/bin/loanConfig/enums/ModifiableByRoleEnum.d.ts +11 -0
- package/bin/loanConfig/enums/ModifiableByRoleEnum.js +15 -0
- package/bin/places/dtos/CashInFeeDto.d.ts +17 -0
- package/bin/places/dtos/CashInFeeDto.js +12 -0
- package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +22 -0
- package/bin/{walletFunding/dtos/CancelFundingRequest.js → platformRbac/dtos/ResendOtpRequest.js} +16 -13
- package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +11 -0
- package/bin/{walletFunding/dtos/CancelFundingReferenceRequest.js → platformRbac/dtos/ResendSelfRegisterOtpRequest.js} +18 -13
- package/bin/retailWizard/dtos/SaleException.d.ts +2 -0
- package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.d.ts +19 -0
- package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.js +14 -0
- package/package.json +1 -1
- package/src/datalakeQuery/dtos/AggregateRequestDto.ts +30 -0
- package/src/datalakeQuery/dtos/ReportRequestDto.ts +99 -0
- package/src/datalakeQuery/dtos/ReportResultDto.ts +28 -0
- package/src/datalakeQuery/enums/FilterOpEnum.ts +18 -0
- package/src/datalakeQuery/enums/JoinTypeEnum.ts +4 -0
- package/src/datalakeQuery/enums/MetricFnEnum.ts +8 -0
- package/src/datalakeQuery/enums/ReportJobStatusEnum.ts +6 -0
- package/src/datalakeQuery/index.ts +10 -0
- package/src/index.ts +1 -0
- package/src/retailWizard/dtos/SaleException.ts +2 -0
- package/src/retailWizard/dtos/requests/CreateSaleExceptionRequest.ts +29 -0
- 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/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +0 -6
- 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/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,29 @@
|
|
|
1
|
+
import { ReportRequestDto } from './ReportRequestDto';
|
|
2
|
+
import { PermissionScope } from '../../platformRbac/enums/PermissionScope';
|
|
3
|
+
/**
|
|
4
|
+
* El cuerpo del privado M2M `POST /private/analytics/aggregate` de `datalake-query-business`.
|
|
5
|
+
*
|
|
6
|
+
* ## El tenant y el alcance van en campos PROPIOS, separados del reporte
|
|
7
|
+
*
|
|
8
|
+
* Un privado no lleva token de usuario, así que el caller —que ya validó el suyo— declara el
|
|
9
|
+
* `tenantId`. Es el patrón de la casa: `@fiado/tenant-context` tiene `withContextByTenantId` hecho
|
|
10
|
+
* para esto, con las mismas garantías que el camino por issuer.
|
|
11
|
+
*
|
|
12
|
+
* Lo que se cuida es que **ese dato no se mezcle con la consulta**: viaja aparte, el destino lo
|
|
13
|
+
* resuelve contra el registry —un tenant desconocido es error, nunca un default— y **jamás se usa
|
|
14
|
+
* como valor dentro del SQL**. El predicado lo pone el compilador desde el contexto ya resuelto.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ **Si no mandas `scope`, el destino asume `LEVEL_1`, nunca `TENANT`.** Heredar el alcance más
|
|
17
|
+
* amplio por omisión lo ampliaría en silencio, que es exactamente el descuido que no queremos.
|
|
18
|
+
*/
|
|
19
|
+
export interface AggregateRequestDto {
|
|
20
|
+
/** Tenant del actor original. Obligatorio: sin él el destino no sabe qué silo consultar. */
|
|
21
|
+
tenantId: string;
|
|
22
|
+
/** Quién llama (`retail-org-business`, `retail-wizard-business`…). Queda auditado en el job. */
|
|
23
|
+
callerService: string;
|
|
24
|
+
/** Alcance del actor original. Omitirlo asume `LEVEL_1`. */
|
|
25
|
+
scope?: PermissionScope;
|
|
26
|
+
/** Obligatorio para `LEVEL_1`, `LEVEL_2` y `LEVEL_3`. */
|
|
27
|
+
scopeRef?: string;
|
|
28
|
+
report: ReportRequestDto;
|
|
29
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { FilterOpEnum } from '../enums/FilterOpEnum';
|
|
2
|
+
import { JoinTypeEnum } from '../enums/JoinTypeEnum';
|
|
3
|
+
import { MetricFnEnum } from '../enums/MetricFnEnum';
|
|
4
|
+
/**
|
|
5
|
+
* El contrato declarativo del motor de reportes sobre el data lake.
|
|
6
|
+
*
|
|
7
|
+
* 🔴 **El cliente NUNCA manda SQL.** Manda esta estructura y el backend la compila. Esa es la
|
|
8
|
+
* diferencia entre "escapamos bien las comillas" y "no hay superficie de inyección": la tabla y
|
|
9
|
+
* cada columna se validan contra el schema VIVO de Glue antes de tocar el compilador.
|
|
10
|
+
*
|
|
11
|
+
* ## Por qué el nombre va calificado y las columnas llevan alias
|
|
12
|
+
*
|
|
13
|
+
* Hay DOS bases en el lake — `fiado_analytics` (Iceberg) y `fiado-datalake-op` (Hive) — y el caso
|
|
14
|
+
* de negocio es cruzarlas: una venta retail con la persona del core, con su cuenta PagoConFiado.
|
|
15
|
+
* Un nombre a secas sería ambiguo, y un error de tipeo apuntaría a la base equivocada en silencio.
|
|
16
|
+
*
|
|
17
|
+
* Y **cada** tabla del `FROM` y de cada `JOIN` recibe su propio predicado de alcance. Aplicarlo
|
|
18
|
+
* solo a la tabla base dejaría la unida sin restringir: bastaría una columna en común para salir
|
|
19
|
+
* por ese lado.
|
|
20
|
+
*/
|
|
21
|
+
/** Referencia a una columna, calificada por el alias de su tabla. */
|
|
22
|
+
export interface ColumnRefDto {
|
|
23
|
+
/** Alias de la tabla. **Obligatorio en cuanto hay un join** — si no, la columna es ambigua. */
|
|
24
|
+
table?: string;
|
|
25
|
+
column: string;
|
|
26
|
+
}
|
|
27
|
+
export interface JoinSpecDto {
|
|
28
|
+
/** Nombre calificado `basedatos.tabla`. */
|
|
29
|
+
table: string;
|
|
30
|
+
/** Alias obligatorio: califica sus columnas y su predicado impuesto. */
|
|
31
|
+
alias: string;
|
|
32
|
+
type: JoinTypeEnum;
|
|
33
|
+
left: ColumnRefDto;
|
|
34
|
+
right: ColumnRefDto;
|
|
35
|
+
}
|
|
36
|
+
export interface MetricSpecDto {
|
|
37
|
+
/** Con `COUNT` se acepta `{ column: '*' }`. */
|
|
38
|
+
column: ColumnRefDto;
|
|
39
|
+
fn: MetricFnEnum;
|
|
40
|
+
/**
|
|
41
|
+
* Columnas de respaldo, en orden: el backend emite `FN(COALESCE(col, r1, r2…))`.
|
|
42
|
+
*
|
|
43
|
+
* ## Cuándo lo necesitas
|
|
44
|
+
*
|
|
45
|
+
* Cuando el valor que quieres sumar vive en más de una columna según la fila. En
|
|
46
|
+
* `retail_sale`, por ejemplo, el monto está en `amountcents` o en `equipmentpricecents` — no
|
|
47
|
+
* hay una columna `soldcents`.
|
|
48
|
+
*
|
|
49
|
+
* **No se puede resolver del lado del caller.** `SUM(COALESCE(a,b))` NO se reconstruye desde
|
|
50
|
+
* `SUM(a)` y `SUM(b)`: el COALESCE es por fila, así que si unas traen `a` y otras solo `b`,
|
|
51
|
+
* cualquier combinación da un número distinto. O lo hace el motor, o el dato sale mal.
|
|
52
|
+
*
|
|
53
|
+
* ## Por qué es un campo del request y no una columna del lake
|
|
54
|
+
*
|
|
55
|
+
* Una columna calculada en la tabla Iceberg **congelaría la regla de negocio dentro del
|
|
56
|
+
* pipeline de datos**, que es de otro equipo: cambiarla obligaría a redesplegar el pipeline y a
|
|
57
|
+
* rellenar el histórico, y la definición quedaría lejos de la decisión que la gobierna.
|
|
58
|
+
*
|
|
59
|
+
* Así el mecanismo es genérico y **qué columnas encadenar lo decide el dominio dueño de la
|
|
60
|
+
* regla**, en su propio código.
|
|
61
|
+
*
|
|
62
|
+
* ⚠️ Cada respaldo se valida contra el schema vivo de Glue igual que cualquier otra columna.
|
|
63
|
+
* No admite `COUNT(*)`.
|
|
64
|
+
*/
|
|
65
|
+
coalesceWith?: ColumnRefDto[];
|
|
66
|
+
/** Alias de salida. Si no viene, se deriva de la función y la columna. */
|
|
67
|
+
alias?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface FilterSpecDto {
|
|
70
|
+
column: ColumnRefDto;
|
|
71
|
+
op: FilterOpEnum;
|
|
72
|
+
/** Un arreglo solo es válido con `IN`. */
|
|
73
|
+
value: string | number | boolean | (string | number)[];
|
|
74
|
+
}
|
|
75
|
+
export interface OrderSpecDto {
|
|
76
|
+
/** Debe ser un alias YA presente en el SELECT, no una columna arbitraria. */
|
|
77
|
+
alias: string;
|
|
78
|
+
desc?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface ReportRequestDto {
|
|
81
|
+
/** Nombre calificado `basedatos.tabla`. */
|
|
82
|
+
table: string;
|
|
83
|
+
/** Alias de la tabla base. Si no viene, el backend usa `t0`. */
|
|
84
|
+
alias?: string;
|
|
85
|
+
joins?: JoinSpecDto[];
|
|
86
|
+
dimensions?: ColumnRefDto[];
|
|
87
|
+
metrics?: MetricSpecDto[];
|
|
88
|
+
filters?: FilterSpecDto[];
|
|
89
|
+
orderBy?: OrderSpecDto;
|
|
90
|
+
/** El backend lo castea a entero y lo recorta a su tope duro. */
|
|
91
|
+
limit?: number;
|
|
92
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ReportJobStatusEnum } from '../enums/ReportJobStatusEnum';
|
|
2
|
+
/**
|
|
3
|
+
* La respuesta de arrancar un reporte.
|
|
4
|
+
*
|
|
5
|
+
* 🔴 **El contrato es un `if`:** si viene `rows`, ya está — pinta. Si viene solo `jobId`, la
|
|
6
|
+
* consulta sigue corriendo y hay que pollear.
|
|
7
|
+
*
|
|
8
|
+
* Es ejecución **híbrida**, no asíncrona pura: el backend espera ~20 s en línea (API Gateway corta
|
|
9
|
+
* a los 29) y solo degrada a polling la cola. La mayoría de las consultas se resuelven en una sola
|
|
10
|
+
* llamada.
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ El `queryExecutionId` de Athena **nunca** viaja acá. El `jobId` es un ULID propio del destino,
|
|
13
|
+
* atado a su tenant: pedir el de otro no da 403, da 404 — sin diferencia observable no se pueden
|
|
14
|
+
* enumerar los ajenos.
|
|
15
|
+
*/
|
|
16
|
+
export interface ReportResultDto {
|
|
17
|
+
jobId: string;
|
|
18
|
+
status: ReportJobStatusEnum;
|
|
19
|
+
/** Presentes solo si terminó dentro de la espera en línea. Athena devuelve todo como texto. */
|
|
20
|
+
rows?: Record<string, string | null>[];
|
|
21
|
+
/** Para pedir la siguiente página del resultado. */
|
|
22
|
+
nextToken?: string;
|
|
23
|
+
/** `true` si Athena la tiene EN FILA, no procesando. Cambia lo que se le dice al usuario. */
|
|
24
|
+
queued?: boolean;
|
|
25
|
+
bytesScanned?: number;
|
|
26
|
+
failureReason?: string;
|
|
27
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operadores de filtro permitidos. Lista CERRADA, y **sin `OR`**.
|
|
3
|
+
*
|
|
4
|
+
* Los filtros se combinan siempre con `AND` y el bloque entero se envuelve en paréntesis antes de
|
|
5
|
+
* pegarle los predicados que impone el backend. Con `OR` disponible y sin parentizar, `AND` liga
|
|
6
|
+
* más fuerte y `a OR b AND scope` se evalúa como `a OR (b AND scope)`: el primer disyunto gana y
|
|
7
|
+
* el filtro de alcance queda decorativo.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum FilterOpEnum {
|
|
10
|
+
EQ = "=",
|
|
11
|
+
NEQ = "!=",
|
|
12
|
+
GT = ">",
|
|
13
|
+
GTE = ">=",
|
|
14
|
+
LT = "<",
|
|
15
|
+
LTE = "<=",
|
|
16
|
+
IN = "IN",
|
|
17
|
+
LIKE = "LIKE"
|
|
18
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterOpEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Operadores de filtro permitidos. Lista CERRADA, y **sin `OR`**.
|
|
6
|
+
*
|
|
7
|
+
* Los filtros se combinan siempre con `AND` y el bloque entero se envuelve en paréntesis antes de
|
|
8
|
+
* pegarle los predicados que impone el backend. Con `OR` disponible y sin parentizar, `AND` liga
|
|
9
|
+
* más fuerte y `a OR b AND scope` se evalúa como `a OR (b AND scope)`: el primer disyunto gana y
|
|
10
|
+
* el filtro de alcance queda decorativo.
|
|
11
|
+
*/
|
|
12
|
+
var FilterOpEnum;
|
|
13
|
+
(function (FilterOpEnum) {
|
|
14
|
+
FilterOpEnum["EQ"] = "=";
|
|
15
|
+
FilterOpEnum["NEQ"] = "!=";
|
|
16
|
+
FilterOpEnum["GT"] = ">";
|
|
17
|
+
FilterOpEnum["GTE"] = ">=";
|
|
18
|
+
FilterOpEnum["LT"] = "<";
|
|
19
|
+
FilterOpEnum["LTE"] = "<=";
|
|
20
|
+
FilterOpEnum["IN"] = "IN";
|
|
21
|
+
FilterOpEnum["LIKE"] = "LIKE";
|
|
22
|
+
})(FilterOpEnum || (exports.FilterOpEnum = FilterOpEnum = {}));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JoinTypeEnum = void 0;
|
|
4
|
+
var JoinTypeEnum;
|
|
5
|
+
(function (JoinTypeEnum) {
|
|
6
|
+
JoinTypeEnum["INNER"] = "INNER";
|
|
7
|
+
JoinTypeEnum["LEFT"] = "LEFT";
|
|
8
|
+
})(JoinTypeEnum || (exports.JoinTypeEnum = JoinTypeEnum = {}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MetricFnEnum = void 0;
|
|
4
|
+
/** Funciones de agregación permitidas. Lista CERRADA: el cliente no manda el nombre de la función. */
|
|
5
|
+
var MetricFnEnum;
|
|
6
|
+
(function (MetricFnEnum) {
|
|
7
|
+
MetricFnEnum["COUNT"] = "COUNT";
|
|
8
|
+
MetricFnEnum["SUM"] = "SUM";
|
|
9
|
+
MetricFnEnum["AVG"] = "AVG";
|
|
10
|
+
MetricFnEnum["MIN"] = "MIN";
|
|
11
|
+
MetricFnEnum["MAX"] = "MAX";
|
|
12
|
+
})(MetricFnEnum || (exports.MetricFnEnum = MetricFnEnum = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReportJobStatusEnum = void 0;
|
|
4
|
+
/** Estado de un trabajo de reporte, tal como lo ve el consumidor. */
|
|
5
|
+
var ReportJobStatusEnum;
|
|
6
|
+
(function (ReportJobStatusEnum) {
|
|
7
|
+
ReportJobStatusEnum["RUNNING"] = "RUNNING";
|
|
8
|
+
ReportJobStatusEnum["DONE"] = "DONE";
|
|
9
|
+
ReportJobStatusEnum["FAILED"] = "FAILED";
|
|
10
|
+
})(ReportJobStatusEnum || (exports.ReportJobStatusEnum = ReportJobStatusEnum = {}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './enums/MetricFnEnum';
|
|
2
|
+
export * from './enums/FilterOpEnum';
|
|
3
|
+
export * from './enums/JoinTypeEnum';
|
|
4
|
+
export * from './enums/ReportJobStatusEnum';
|
|
5
|
+
export * from './dtos/ReportRequestDto';
|
|
6
|
+
export * from './dtos/AggregateRequestDto';
|
|
7
|
+
export * from './dtos/ReportResultDto';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// Enums
|
|
18
|
+
__exportStar(require("./enums/MetricFnEnum"), exports);
|
|
19
|
+
__exportStar(require("./enums/FilterOpEnum"), exports);
|
|
20
|
+
__exportStar(require("./enums/JoinTypeEnum"), exports);
|
|
21
|
+
__exportStar(require("./enums/ReportJobStatusEnum"), exports);
|
|
22
|
+
// DTOs
|
|
23
|
+
__exportStar(require("./dtos/ReportRequestDto"), exports);
|
|
24
|
+
__exportStar(require("./dtos/AggregateRequestDto"), exports);
|
|
25
|
+
__exportStar(require("./dtos/ReportResultDto"), exports);
|
package/bin/index.d.ts
CHANGED
|
@@ -95,6 +95,7 @@ export * as RetailCatalog from './retailCatalog';
|
|
|
95
95
|
export * as RetailCards from './retailCards';
|
|
96
96
|
export * as RetailCustomer from './retailCustomer';
|
|
97
97
|
export * as RetailWizard from './retailWizard';
|
|
98
|
+
export * as DatalakeQuery from './datalakeQuery';
|
|
98
99
|
export * as LoanConfig from './loanConfig';
|
|
99
100
|
export * as Shortlink from './shortlink';
|
|
100
101
|
export * as LoanOfferings from './loanOfferings';
|
package/bin/index.js
CHANGED
|
@@ -37,8 +37,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.IssuanceBusiness = exports.Blacklist = exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.UserTags = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.AppContent = exports.App = exports.Offices = exports.Places = exports.Address = exports.Beneficiary = exports.Activity = exports.Biometrics = exports.MetamapConnector = exports.Account = exports.Crypto = void 0;
|
|
40
|
-
exports.
|
|
41
|
-
exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = void 0;
|
|
40
|
+
exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailWizard = exports.RetailCustomer = exports.RetailCards = exports.RetailCatalog = exports.RetailOrg = exports.EmailVerification = exports.NetworkConnector = exports.Modelias = exports.TotpSecurity = exports.Passport = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = void 0;
|
|
41
|
+
exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = void 0;
|
|
42
42
|
exports.Crypto = __importStar(require("./crypto"));
|
|
43
43
|
exports.Account = __importStar(require("./account"));
|
|
44
44
|
exports.MetamapConnector = __importStar(require("./metamapConnector"));
|
|
@@ -158,6 +158,7 @@ exports.RetailCustomer = __importStar(require("./retailCustomer"));
|
|
|
158
158
|
// RetailWizard: DTOs/enums del lambda retail-wizard-business (comp 04 — wizard de venta de contado:
|
|
159
159
|
// saga de sesión, OTP, KYC, venta y prospectos; SureKeep Fase 2 — pista Retail).
|
|
160
160
|
exports.RetailWizard = __importStar(require("./retailWizard"));
|
|
161
|
+
exports.DatalakeQuery = __importStar(require("./datalakeQuery"));
|
|
161
162
|
// LoanConfig: DTOs/enums del lambda loan-config-business (comp 09 — parámetros operativos del SOFOM).
|
|
162
163
|
exports.LoanConfig = __importStar(require("./loanConfig"));
|
|
163
164
|
// Shortlink: DTOs del lambda shortlink-business (acortador de URLs). Se consume M2M por su endpoint
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rol RBAC mínimo que puede modificar un parámetro (RBAC a nivel de parámetro, modelo-datos §8).
|
|
3
|
+
* `retailer_admin` = "Admin VentasLuga" de M6 §8. Valores = identificadores de rol de RBAC F0.
|
|
4
|
+
* TD-004: confirmar mapeo super_admin ↔ platform_super_admin con el naming real de F0.
|
|
5
|
+
* @enum {string}
|
|
6
|
+
*/
|
|
7
|
+
export declare enum ModifiableByRoleEnum {
|
|
8
|
+
SUPER_ADMIN = "super_admin",
|
|
9
|
+
SOFOM_ADMIN = "sofom_admin",
|
|
10
|
+
RETAILER_ADMIN = "retailer_admin"
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModifiableByRoleEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Rol RBAC mínimo que puede modificar un parámetro (RBAC a nivel de parámetro, modelo-datos §8).
|
|
6
|
+
* `retailer_admin` = "Admin VentasLuga" de M6 §8. Valores = identificadores de rol de RBAC F0.
|
|
7
|
+
* TD-004: confirmar mapeo super_admin ↔ platform_super_admin con el naming real de F0.
|
|
8
|
+
* @enum {string}
|
|
9
|
+
*/
|
|
10
|
+
var ModifiableByRoleEnum;
|
|
11
|
+
(function (ModifiableByRoleEnum) {
|
|
12
|
+
ModifiableByRoleEnum["SUPER_ADMIN"] = "super_admin";
|
|
13
|
+
ModifiableByRoleEnum["SOFOM_ADMIN"] = "sofom_admin";
|
|
14
|
+
ModifiableByRoleEnum["RETAILER_ADMIN"] = "retailer_admin";
|
|
15
|
+
})(ModifiableByRoleEnum || (exports.ModifiableByRoleEnum = ModifiableByRoleEnum = {}));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CurrencyId } from '../../currency/enums/CurrencyId';
|
|
2
|
+
/**
|
|
3
|
+
* Comisión que cobra un punto de cash-in (lo que el lambda MUESTRA, no cobra).
|
|
4
|
+
* - GreenDot (US): representativo por cadena → `fixed` + `cap` (cada tienda cobra hasta el tope).
|
|
5
|
+
* - Passport (MX): por red → `fixed` + `percentage`.
|
|
6
|
+
* Response DTO — sin decoradores de validación.
|
|
7
|
+
*/
|
|
8
|
+
export declare class CashInFeeDto {
|
|
9
|
+
/** Comisión fija, en la moneda del país. */
|
|
10
|
+
fixed?: number;
|
|
11
|
+
/** Porcentaje del monto depositado (0–100). */
|
|
12
|
+
percentage?: number;
|
|
13
|
+
/** Tope máximo de comisión (GreenDot: el asociado cobra hasta este cap). */
|
|
14
|
+
cap?: number;
|
|
15
|
+
/** Moneda del fee: USD (GreenDot) | MXN (Passport). */
|
|
16
|
+
currency: CurrencyId;
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CashInFeeDto = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Comisión que cobra un punto de cash-in (lo que el lambda MUESTRA, no cobra).
|
|
6
|
+
* - GreenDot (US): representativo por cadena → `fixed` + `cap` (cada tienda cobra hasta el tope).
|
|
7
|
+
* - Passport (MX): por red → `fixed` + `percentage`.
|
|
8
|
+
* Response DTO — sin decoradores de validación.
|
|
9
|
+
*/
|
|
10
|
+
class CashInFeeDto {
|
|
11
|
+
}
|
|
12
|
+
exports.CashInFeeDto = CashInFeeDto;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MfaMethodEnum } from '../enums/MfaMethodEnum';
|
|
2
|
+
/**
|
|
3
|
+
* Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
4
|
+
* Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
|
|
5
|
+
* identidad SIN password. `tenantId` obligatorio (DEC-064 — el picker ya lo resolvió, NO "solo email").
|
|
6
|
+
* El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
|
|
7
|
+
* siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
|
|
8
|
+
*/
|
|
9
|
+
export declare class ResendOtpRequest {
|
|
10
|
+
email: string;
|
|
11
|
+
tenantId: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Respuesta del resend-otp. `session`/`mfaMethod` frescos del nuevo challenge CUSTOM_AUTH.
|
|
15
|
+
* Plain sin validators (no validamos lo que mandamos al cliente — fiado-validation-and-dtos § 7).
|
|
16
|
+
* Ambos opcionales: en los caminos de rechazo silencioso (anti-enumeración) o ramas sin CUSTOM_AUTH
|
|
17
|
+
* el server responde 200 genérico sin session ni método.
|
|
18
|
+
*/
|
|
19
|
+
export interface ResendOtpResponse {
|
|
20
|
+
session?: string;
|
|
21
|
+
mfaMethod?: MfaMethodEnum;
|
|
22
|
+
}
|
package/bin/{walletFunding/dtos/CancelFundingRequest.js → platformRbac/dtos/ResendOtpRequest.js}
RENAMED
|
@@ -9,25 +9,28 @@ 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.ResendOtpRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
13
14
|
const class_validator_1 = require("class-validator");
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
17
|
+
* Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
|
|
18
|
+
* identidad SIN password. `tenantId` obligatorio (DEC-064 — el picker ya lo resolvió, NO "solo email").
|
|
19
|
+
* El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
|
|
20
|
+
* siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
|
|
20
21
|
*/
|
|
21
|
-
class
|
|
22
|
+
class ResendOtpRequest {
|
|
22
23
|
}
|
|
23
|
-
exports.
|
|
24
|
+
exports.ResendOtpRequest = ResendOtpRequest;
|
|
24
25
|
__decorate([
|
|
25
|
-
(0,
|
|
26
|
-
(0, class_validator_1.
|
|
26
|
+
(0, class_transformer_1.Expose)(),
|
|
27
|
+
(0, class_validator_1.IsEmail)(),
|
|
28
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
27
29
|
__metadata("design:type", String)
|
|
28
|
-
],
|
|
30
|
+
], ResendOtpRequest.prototype, "email", void 0);
|
|
29
31
|
__decorate([
|
|
32
|
+
(0, class_transformer_1.Expose)(),
|
|
30
33
|
(0, class_validator_1.IsString)(),
|
|
31
|
-
(0, class_validator_1.
|
|
34
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
32
35
|
__metadata("design:type", String)
|
|
33
|
-
],
|
|
36
|
+
], ResendOtpRequest.prototype, "tenantId", void 0);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
3
|
+
* Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
|
|
4
|
+
* `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
|
|
5
|
+
* server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
|
|
6
|
+
* scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
|
|
7
|
+
*/
|
|
8
|
+
export declare class ResendSelfRegisterOtpRequest {
|
|
9
|
+
tenantId: string;
|
|
10
|
+
email: string;
|
|
11
|
+
}
|
|
@@ -9,23 +9,28 @@ 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.ResendSelfRegisterOtpRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
13
14
|
const class_validator_1 = require("class-validator");
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
17
|
+
* Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
|
|
18
|
+
* `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
|
|
19
|
+
* server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
|
|
20
|
+
* scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
|
|
21
|
+
*/
|
|
22
|
+
class ResendSelfRegisterOtpRequest {
|
|
15
23
|
}
|
|
16
|
-
exports.
|
|
24
|
+
exports.ResendSelfRegisterOtpRequest = ResendSelfRegisterOtpRequest;
|
|
17
25
|
__decorate([
|
|
26
|
+
(0, class_transformer_1.Expose)(),
|
|
18
27
|
(0, class_validator_1.IsString)(),
|
|
19
|
-
(0, class_validator_1.
|
|
28
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
20
29
|
__metadata("design:type", String)
|
|
21
|
-
],
|
|
30
|
+
], ResendSelfRegisterOtpRequest.prototype, "tenantId", void 0);
|
|
22
31
|
__decorate([
|
|
23
|
-
(0,
|
|
24
|
-
(0, class_validator_1.
|
|
25
|
-
|
|
26
|
-
], CancelFundingReferenceRequest.prototype, "directoryId", void 0);
|
|
27
|
-
__decorate([
|
|
28
|
-
(0, class_validator_1.IsString)(),
|
|
29
|
-
(0, class_validator_1.MaxLength)(64),
|
|
32
|
+
(0, class_transformer_1.Expose)(),
|
|
33
|
+
(0, class_validator_1.IsEmail)(),
|
|
34
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
30
35
|
__metadata("design:type", String)
|
|
31
|
-
],
|
|
36
|
+
], ResendSelfRegisterOtpRequest.prototype, "email", void 0);
|
|
@@ -32,6 +32,8 @@ export interface SaleException {
|
|
|
32
32
|
requestedAt: string;
|
|
33
33
|
/** OBLIGATORIA. Es lo que hace auditable la excepción. */
|
|
34
34
|
justification: string;
|
|
35
|
+
/** Qué pidió el solicitante, en sus palabras. `null` si no lo detalló. */
|
|
36
|
+
requestedAction: string | null;
|
|
35
37
|
/**
|
|
36
38
|
* Impacto económico en centavos, con signo: positivo si la excepción suma (devolución al cliente,
|
|
37
39
|
* reemplazo), negativo si resta (descuento autorizado). `null` cuando no aplica.
|
|
@@ -22,6 +22,25 @@ export declare class CreateSaleExceptionRequest {
|
|
|
22
22
|
/** Obligatorio cuando NO hay `saleId`; si hay venta, se toma el de la venta. */
|
|
23
23
|
storeId?: string;
|
|
24
24
|
justification: string;
|
|
25
|
+
/**
|
|
26
|
+
* Quién PIDIÓ la excepción, cuando no es quien la registra.
|
|
27
|
+
*
|
|
28
|
+
* El botón «Levantar excepción» vive en la pantalla del Admin VL, pero el mockup muestra
|
|
29
|
+
* `solicitante: V-05` con «Vendedor solicita corrección»: el vendedor avisa por fuera y el Admin
|
|
30
|
+
* la anota. Sin este campo, la columna «Solicitante» diría SIEMPRE «Admin VL» y se perdería el
|
|
31
|
+
* dato de quién originó el caso — que es justo lo que la bandeja viene a auditar.
|
|
32
|
+
*
|
|
33
|
+
* Ausente → se usa el actor del token (el Admin la levantó por su cuenta).
|
|
34
|
+
*/
|
|
35
|
+
requestedBy?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Qué hay que hacer, en palabras del humano. Ej.: «cambiar SKU de P-002 a P-005».
|
|
38
|
+
*
|
|
39
|
+
* Convive con `payload` y NO lo reemplaza: el texto libre es para que la persona explique, el
|
|
40
|
+
* `payload` tipado es para que algún día el sistema pueda aplicar el cambio solo. Hoy quien
|
|
41
|
+
* aplica es un humano leyendo esto.
|
|
42
|
+
*/
|
|
43
|
+
requestedAction?: string;
|
|
25
44
|
/** Impacto económico con signo, en centavos. Negativo si la excepción resta (descuento). */
|
|
26
45
|
impactCents?: number;
|
|
27
46
|
payload?: SaleExceptionPayloadInput;
|
|
@@ -81,6 +81,20 @@ __decorate([
|
|
|
81
81
|
(0, class_validator_1.MaxLength)(1000),
|
|
82
82
|
__metadata("design:type", String)
|
|
83
83
|
], CreateSaleExceptionRequest.prototype, "justification", void 0);
|
|
84
|
+
__decorate([
|
|
85
|
+
(0, class_transformer_1.Expose)(),
|
|
86
|
+
(0, class_validator_1.IsOptional)(),
|
|
87
|
+
(0, class_validator_1.IsString)(),
|
|
88
|
+
(0, class_validator_1.MaxLength)(64),
|
|
89
|
+
__metadata("design:type", String)
|
|
90
|
+
], CreateSaleExceptionRequest.prototype, "requestedBy", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, class_transformer_1.Expose)(),
|
|
93
|
+
(0, class_validator_1.IsOptional)(),
|
|
94
|
+
(0, class_validator_1.IsString)(),
|
|
95
|
+
(0, class_validator_1.MaxLength)(500),
|
|
96
|
+
__metadata("design:type", String)
|
|
97
|
+
], CreateSaleExceptionRequest.prototype, "requestedAction", void 0);
|
|
84
98
|
__decorate([
|
|
85
99
|
(0, class_transformer_1.Expose)(),
|
|
86
100
|
(0, class_validator_1.IsOptional)(),
|
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ReportRequestDto } from './ReportRequestDto';
|
|
2
|
+
import { PermissionScope } from '../../platformRbac/enums/PermissionScope';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* El cuerpo del privado M2M `POST /private/analytics/aggregate` de `datalake-query-business`.
|
|
6
|
+
*
|
|
7
|
+
* ## El tenant y el alcance van en campos PROPIOS, separados del reporte
|
|
8
|
+
*
|
|
9
|
+
* Un privado no lleva token de usuario, así que el caller —que ya validó el suyo— declara el
|
|
10
|
+
* `tenantId`. Es el patrón de la casa: `@fiado/tenant-context` tiene `withContextByTenantId` hecho
|
|
11
|
+
* para esto, con las mismas garantías que el camino por issuer.
|
|
12
|
+
*
|
|
13
|
+
* Lo que se cuida es que **ese dato no se mezcle con la consulta**: viaja aparte, el destino lo
|
|
14
|
+
* resuelve contra el registry —un tenant desconocido es error, nunca un default— y **jamás se usa
|
|
15
|
+
* como valor dentro del SQL**. El predicado lo pone el compilador desde el contexto ya resuelto.
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ **Si no mandas `scope`, el destino asume `LEVEL_1`, nunca `TENANT`.** Heredar el alcance más
|
|
18
|
+
* amplio por omisión lo ampliaría en silencio, que es exactamente el descuido que no queremos.
|
|
19
|
+
*/
|
|
20
|
+
export interface AggregateRequestDto {
|
|
21
|
+
/** Tenant del actor original. Obligatorio: sin él el destino no sabe qué silo consultar. */
|
|
22
|
+
tenantId: string;
|
|
23
|
+
/** Quién llama (`retail-org-business`, `retail-wizard-business`…). Queda auditado en el job. */
|
|
24
|
+
callerService: string;
|
|
25
|
+
/** Alcance del actor original. Omitirlo asume `LEVEL_1`. */
|
|
26
|
+
scope?: PermissionScope;
|
|
27
|
+
/** Obligatorio para `LEVEL_1`, `LEVEL_2` y `LEVEL_3`. */
|
|
28
|
+
scopeRef?: string;
|
|
29
|
+
report: ReportRequestDto;
|
|
30
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { FilterOpEnum } from '../enums/FilterOpEnum';
|
|
2
|
+
import { JoinTypeEnum } from '../enums/JoinTypeEnum';
|
|
3
|
+
import { MetricFnEnum } from '../enums/MetricFnEnum';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* El contrato declarativo del motor de reportes sobre el data lake.
|
|
7
|
+
*
|
|
8
|
+
* 🔴 **El cliente NUNCA manda SQL.** Manda esta estructura y el backend la compila. Esa es la
|
|
9
|
+
* diferencia entre "escapamos bien las comillas" y "no hay superficie de inyección": la tabla y
|
|
10
|
+
* cada columna se validan contra el schema VIVO de Glue antes de tocar el compilador.
|
|
11
|
+
*
|
|
12
|
+
* ## Por qué el nombre va calificado y las columnas llevan alias
|
|
13
|
+
*
|
|
14
|
+
* Hay DOS bases en el lake — `fiado_analytics` (Iceberg) y `fiado-datalake-op` (Hive) — y el caso
|
|
15
|
+
* de negocio es cruzarlas: una venta retail con la persona del core, con su cuenta PagoConFiado.
|
|
16
|
+
* Un nombre a secas sería ambiguo, y un error de tipeo apuntaría a la base equivocada en silencio.
|
|
17
|
+
*
|
|
18
|
+
* Y **cada** tabla del `FROM` y de cada `JOIN` recibe su propio predicado de alcance. Aplicarlo
|
|
19
|
+
* solo a la tabla base dejaría la unida sin restringir: bastaría una columna en común para salir
|
|
20
|
+
* por ese lado.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/** Referencia a una columna, calificada por el alias de su tabla. */
|
|
24
|
+
export interface ColumnRefDto {
|
|
25
|
+
/** Alias de la tabla. **Obligatorio en cuanto hay un join** — si no, la columna es ambigua. */
|
|
26
|
+
table?: string;
|
|
27
|
+
column: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface JoinSpecDto {
|
|
31
|
+
/** Nombre calificado `basedatos.tabla`. */
|
|
32
|
+
table: string;
|
|
33
|
+
/** Alias obligatorio: califica sus columnas y su predicado impuesto. */
|
|
34
|
+
alias: string;
|
|
35
|
+
type: JoinTypeEnum;
|
|
36
|
+
left: ColumnRefDto;
|
|
37
|
+
right: ColumnRefDto;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface MetricSpecDto {
|
|
41
|
+
/** Con `COUNT` se acepta `{ column: '*' }`. */
|
|
42
|
+
column: ColumnRefDto;
|
|
43
|
+
fn: MetricFnEnum;
|
|
44
|
+
/**
|
|
45
|
+
* Columnas de respaldo, en orden: el backend emite `FN(COALESCE(col, r1, r2…))`.
|
|
46
|
+
*
|
|
47
|
+
* ## Cuándo lo necesitas
|
|
48
|
+
*
|
|
49
|
+
* Cuando el valor que quieres sumar vive en más de una columna según la fila. En
|
|
50
|
+
* `retail_sale`, por ejemplo, el monto está en `amountcents` o en `equipmentpricecents` — no
|
|
51
|
+
* hay una columna `soldcents`.
|
|
52
|
+
*
|
|
53
|
+
* **No se puede resolver del lado del caller.** `SUM(COALESCE(a,b))` NO se reconstruye desde
|
|
54
|
+
* `SUM(a)` y `SUM(b)`: el COALESCE es por fila, así que si unas traen `a` y otras solo `b`,
|
|
55
|
+
* cualquier combinación da un número distinto. O lo hace el motor, o el dato sale mal.
|
|
56
|
+
*
|
|
57
|
+
* ## Por qué es un campo del request y no una columna del lake
|
|
58
|
+
*
|
|
59
|
+
* Una columna calculada en la tabla Iceberg **congelaría la regla de negocio dentro del
|
|
60
|
+
* pipeline de datos**, que es de otro equipo: cambiarla obligaría a redesplegar el pipeline y a
|
|
61
|
+
* rellenar el histórico, y la definición quedaría lejos de la decisión que la gobierna.
|
|
62
|
+
*
|
|
63
|
+
* Así el mecanismo es genérico y **qué columnas encadenar lo decide el dominio dueño de la
|
|
64
|
+
* regla**, en su propio código.
|
|
65
|
+
*
|
|
66
|
+
* ⚠️ Cada respaldo se valida contra el schema vivo de Glue igual que cualquier otra columna.
|
|
67
|
+
* No admite `COUNT(*)`.
|
|
68
|
+
*/
|
|
69
|
+
coalesceWith?: ColumnRefDto[];
|
|
70
|
+
/** Alias de salida. Si no viene, se deriva de la función y la columna. */
|
|
71
|
+
alias?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface FilterSpecDto {
|
|
75
|
+
column: ColumnRefDto;
|
|
76
|
+
op: FilterOpEnum;
|
|
77
|
+
/** Un arreglo solo es válido con `IN`. */
|
|
78
|
+
value: string | number | boolean | (string | number)[];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface OrderSpecDto {
|
|
82
|
+
/** Debe ser un alias YA presente en el SELECT, no una columna arbitraria. */
|
|
83
|
+
alias: string;
|
|
84
|
+
desc?: boolean;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface ReportRequestDto {
|
|
88
|
+
/** Nombre calificado `basedatos.tabla`. */
|
|
89
|
+
table: string;
|
|
90
|
+
/** Alias de la tabla base. Si no viene, el backend usa `t0`. */
|
|
91
|
+
alias?: string;
|
|
92
|
+
joins?: JoinSpecDto[];
|
|
93
|
+
dimensions?: ColumnRefDto[];
|
|
94
|
+
metrics?: MetricSpecDto[];
|
|
95
|
+
filters?: FilterSpecDto[];
|
|
96
|
+
orderBy?: OrderSpecDto;
|
|
97
|
+
/** El backend lo castea a entero y lo recorta a su tope duro. */
|
|
98
|
+
limit?: number;
|
|
99
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ReportJobStatusEnum } from '../enums/ReportJobStatusEnum';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* La respuesta de arrancar un reporte.
|
|
5
|
+
*
|
|
6
|
+
* 🔴 **El contrato es un `if`:** si viene `rows`, ya está — pinta. Si viene solo `jobId`, la
|
|
7
|
+
* consulta sigue corriendo y hay que pollear.
|
|
8
|
+
*
|
|
9
|
+
* Es ejecución **híbrida**, no asíncrona pura: el backend espera ~20 s en línea (API Gateway corta
|
|
10
|
+
* a los 29) y solo degrada a polling la cola. La mayoría de las consultas se resuelven en una sola
|
|
11
|
+
* llamada.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ El `queryExecutionId` de Athena **nunca** viaja acá. El `jobId` es un ULID propio del destino,
|
|
14
|
+
* atado a su tenant: pedir el de otro no da 403, da 404 — sin diferencia observable no se pueden
|
|
15
|
+
* enumerar los ajenos.
|
|
16
|
+
*/
|
|
17
|
+
export interface ReportResultDto {
|
|
18
|
+
jobId: string;
|
|
19
|
+
status: ReportJobStatusEnum;
|
|
20
|
+
/** Presentes solo si terminó dentro de la espera en línea. Athena devuelve todo como texto. */
|
|
21
|
+
rows?: Record<string, string | null>[];
|
|
22
|
+
/** Para pedir la siguiente página del resultado. */
|
|
23
|
+
nextToken?: string;
|
|
24
|
+
/** `true` si Athena la tiene EN FILA, no procesando. Cambia lo que se le dice al usuario. */
|
|
25
|
+
queued?: boolean;
|
|
26
|
+
bytesScanned?: number;
|
|
27
|
+
failureReason?: string;
|
|
28
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operadores de filtro permitidos. Lista CERRADA, y **sin `OR`**.
|
|
3
|
+
*
|
|
4
|
+
* Los filtros se combinan siempre con `AND` y el bloque entero se envuelve en paréntesis antes de
|
|
5
|
+
* pegarle los predicados que impone el backend. Con `OR` disponible y sin parentizar, `AND` liga
|
|
6
|
+
* más fuerte y `a OR b AND scope` se evalúa como `a OR (b AND scope)`: el primer disyunto gana y
|
|
7
|
+
* el filtro de alcance queda decorativo.
|
|
8
|
+
*/
|
|
9
|
+
export enum FilterOpEnum {
|
|
10
|
+
EQ = '=',
|
|
11
|
+
NEQ = '!=',
|
|
12
|
+
GT = '>',
|
|
13
|
+
GTE = '>=',
|
|
14
|
+
LT = '<',
|
|
15
|
+
LTE = '<=',
|
|
16
|
+
IN = 'IN',
|
|
17
|
+
LIKE = 'LIKE',
|
|
18
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Enums
|
|
2
|
+
export * from './enums/MetricFnEnum';
|
|
3
|
+
export * from './enums/FilterOpEnum';
|
|
4
|
+
export * from './enums/JoinTypeEnum';
|
|
5
|
+
export * from './enums/ReportJobStatusEnum';
|
|
6
|
+
|
|
7
|
+
// DTOs
|
|
8
|
+
export * from './dtos/ReportRequestDto';
|
|
9
|
+
export * from './dtos/AggregateRequestDto';
|
|
10
|
+
export * from './dtos/ReportResultDto';
|
package/src/index.ts
CHANGED
|
@@ -117,6 +117,7 @@ export * as RetailCustomer from './retailCustomer';
|
|
|
117
117
|
// RetailWizard: DTOs/enums del lambda retail-wizard-business (comp 04 — wizard de venta de contado:
|
|
118
118
|
// saga de sesión, OTP, KYC, venta y prospectos; SureKeep Fase 2 — pista Retail).
|
|
119
119
|
export * as RetailWizard from './retailWizard';
|
|
120
|
+
export * as DatalakeQuery from './datalakeQuery';
|
|
120
121
|
// LoanConfig: DTOs/enums del lambda loan-config-business (comp 09 — parámetros operativos del SOFOM).
|
|
121
122
|
export * as LoanConfig from './loanConfig';
|
|
122
123
|
// Shortlink: DTOs del lambda shortlink-business (acortador de URLs). Se consume M2M por su endpoint
|
|
@@ -33,6 +33,8 @@ export interface SaleException {
|
|
|
33
33
|
requestedAt: string;
|
|
34
34
|
/** OBLIGATORIA. Es lo que hace auditable la excepción. */
|
|
35
35
|
justification: string;
|
|
36
|
+
/** Qué pidió el solicitante, en sus palabras. `null` si no lo detalló. */
|
|
37
|
+
requestedAction: string | null;
|
|
36
38
|
/**
|
|
37
39
|
* Impacto económico en centavos, con signo: positivo si la excepción suma (devolución al cliente,
|
|
38
40
|
* reemplazo), negativo si resta (descuento autorizado). `null` cuando no aplica.
|
|
@@ -70,6 +70,35 @@ export class CreateSaleExceptionRequest {
|
|
|
70
70
|
@MaxLength(1000)
|
|
71
71
|
justification!: string;
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Quién PIDIÓ la excepción, cuando no es quien la registra.
|
|
75
|
+
*
|
|
76
|
+
* El botón «Levantar excepción» vive en la pantalla del Admin VL, pero el mockup muestra
|
|
77
|
+
* `solicitante: V-05` con «Vendedor solicita corrección»: el vendedor avisa por fuera y el Admin
|
|
78
|
+
* la anota. Sin este campo, la columna «Solicitante» diría SIEMPRE «Admin VL» y se perdería el
|
|
79
|
+
* dato de quién originó el caso — que es justo lo que la bandeja viene a auditar.
|
|
80
|
+
*
|
|
81
|
+
* Ausente → se usa el actor del token (el Admin la levantó por su cuenta).
|
|
82
|
+
*/
|
|
83
|
+
@Expose()
|
|
84
|
+
@IsOptional()
|
|
85
|
+
@IsString()
|
|
86
|
+
@MaxLength(64)
|
|
87
|
+
requestedBy?: string;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Qué hay que hacer, en palabras del humano. Ej.: «cambiar SKU de P-002 a P-005».
|
|
91
|
+
*
|
|
92
|
+
* Convive con `payload` y NO lo reemplaza: el texto libre es para que la persona explique, el
|
|
93
|
+
* `payload` tipado es para que algún día el sistema pueda aplicar el cambio solo. Hoy quien
|
|
94
|
+
* aplica es un humano leyendo esto.
|
|
95
|
+
*/
|
|
96
|
+
@Expose()
|
|
97
|
+
@IsOptional()
|
|
98
|
+
@IsString()
|
|
99
|
+
@MaxLength(500)
|
|
100
|
+
requestedAction?: string;
|
|
101
|
+
|
|
73
102
|
/** Impacto económico con signo, en centavos. Negativo si la excepción resta (descuento). */
|
|
74
103
|
@Expose()
|
|
75
104
|
@IsOptional()
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Con qué criterio se resolvió cuál archivo de S3 es la selfie del usuario.
|
|
3
|
-
* Le dice al consumidor qué tan confiable es el match antes de mandarla a un facematch.
|
|
4
|
-
*/
|
|
5
|
-
export declare enum SelfieSourceEnum {
|
|
6
|
-
/** Matcheó el verificationId de la verificación vigente en People. */
|
|
7
|
-
VERIFICATION = "VERIFICATION",
|
|
8
|
-
/** No hubo match por verificación: se tomó el archivo de selfie más reciente del bucket. */
|
|
9
|
-
LATEST = "LATEST"
|
|
10
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SelfieSourceEnum = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Con qué criterio se resolvió cuál archivo de S3 es la selfie del usuario.
|
|
6
|
-
* Le dice al consumidor qué tan confiable es el match antes de mandarla a un facematch.
|
|
7
|
-
*/
|
|
8
|
-
var SelfieSourceEnum;
|
|
9
|
-
(function (SelfieSourceEnum) {
|
|
10
|
-
/** Matcheó el verificationId de la verificación vigente en People. */
|
|
11
|
-
SelfieSourceEnum["VERIFICATION"] = "VERIFICATION";
|
|
12
|
-
/** No hubo match por verificación: se tomó el archivo de selfie más reciente del bucket. */
|
|
13
|
-
SelfieSourceEnum["LATEST"] = "LATEST";
|
|
14
|
-
})(SelfieSourceEnum || (exports.SelfieSourceEnum = SelfieSourceEnum = {}));
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Body de PUT /credits/:creditId/checklist (loan-credit-business). Marca condiciones de activación
|
|
3
|
-
* cumplidas. Solo se mandan las que cambian; en F3 las marcarán los flujos de firma de contrato
|
|
4
|
-
* (`downPayment` + `contractSigned`) y de enrolamiento MDM (`imeiEnrolled` + `lockVerified`).
|
|
5
|
-
*/
|
|
6
|
-
export declare class UpdateActivationChecklistRequest {
|
|
7
|
-
downPayment?: boolean;
|
|
8
|
-
contractSigned?: boolean;
|
|
9
|
-
imeiEnrolled?: boolean;
|
|
10
|
-
lockVerified?: boolean;
|
|
11
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
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.UpdateActivationChecklistRequest = void 0;
|
|
13
|
-
const class_transformer_1 = require("class-transformer");
|
|
14
|
-
const class_validator_1 = require("class-validator");
|
|
15
|
-
/**
|
|
16
|
-
* Body de PUT /credits/:creditId/checklist (loan-credit-business). Marca condiciones de activación
|
|
17
|
-
* cumplidas. Solo se mandan las que cambian; en F3 las marcarán los flujos de firma de contrato
|
|
18
|
-
* (`downPayment` + `contractSigned`) y de enrolamiento MDM (`imeiEnrolled` + `lockVerified`).
|
|
19
|
-
*/
|
|
20
|
-
class UpdateActivationChecklistRequest {
|
|
21
|
-
}
|
|
22
|
-
exports.UpdateActivationChecklistRequest = UpdateActivationChecklistRequest;
|
|
23
|
-
__decorate([
|
|
24
|
-
(0, class_transformer_1.Expose)(),
|
|
25
|
-
(0, class_validator_1.IsOptional)(),
|
|
26
|
-
(0, class_validator_1.IsBoolean)(),
|
|
27
|
-
__metadata("design:type", Boolean)
|
|
28
|
-
], UpdateActivationChecklistRequest.prototype, "downPayment", void 0);
|
|
29
|
-
__decorate([
|
|
30
|
-
(0, class_transformer_1.Expose)(),
|
|
31
|
-
(0, class_validator_1.IsOptional)(),
|
|
32
|
-
(0, class_validator_1.IsBoolean)(),
|
|
33
|
-
__metadata("design:type", Boolean)
|
|
34
|
-
], UpdateActivationChecklistRequest.prototype, "contractSigned", void 0);
|
|
35
|
-
__decorate([
|
|
36
|
-
(0, class_transformer_1.Expose)(),
|
|
37
|
-
(0, class_validator_1.IsOptional)(),
|
|
38
|
-
(0, class_validator_1.IsBoolean)(),
|
|
39
|
-
__metadata("design:type", Boolean)
|
|
40
|
-
], UpdateActivationChecklistRequest.prototype, "imeiEnrolled", void 0);
|
|
41
|
-
__decorate([
|
|
42
|
-
(0, class_transformer_1.Expose)(),
|
|
43
|
-
(0, class_validator_1.IsOptional)(),
|
|
44
|
-
(0, class_validator_1.IsBoolean)(),
|
|
45
|
-
__metadata("design:type", Boolean)
|
|
46
|
-
], UpdateActivationChecklistRequest.prototype, "lockVerified", void 0);
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nivel del cliente según su SCI (M7/05_MOTOR §3.2): 21-60 Bronce · 61-80 Plata · 81-100 Oro.
|
|
3
|
-
* Distinto de `CreditPlanLevelEnum` de loanOfferings (que además tiene `ALL` para planes):
|
|
4
|
-
* un CLIENTE nunca es `ALL`.
|
|
5
|
-
* @enum {string}
|
|
6
|
-
*/
|
|
7
|
-
export declare enum ClientLevelEnum {
|
|
8
|
-
BRONZE = "BRONZE",
|
|
9
|
-
SILVER = "SILVER",
|
|
10
|
-
GOLD = "GOLD"
|
|
11
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClientLevelEnum = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Nivel del cliente según su SCI (M7/05_MOTOR §3.2): 21-60 Bronce · 61-80 Plata · 81-100 Oro.
|
|
6
|
-
* Distinto de `CreditPlanLevelEnum` de loanOfferings (que además tiene `ALL` para planes):
|
|
7
|
-
* un CLIENTE nunca es `ALL`.
|
|
8
|
-
* @enum {string}
|
|
9
|
-
*/
|
|
10
|
-
var ClientLevelEnum;
|
|
11
|
-
(function (ClientLevelEnum) {
|
|
12
|
-
ClientLevelEnum["BRONZE"] = "BRONZE";
|
|
13
|
-
ClientLevelEnum["SILVER"] = "SILVER";
|
|
14
|
-
ClientLevelEnum["GOLD"] = "GOLD";
|
|
15
|
-
})(ClientLevelEnum || (exports.ClientLevelEnum = ClientLevelEnum = {}));
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
|
|
2
|
-
import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
|
|
3
|
-
export declare class CancelFundingReferenceResponse {
|
|
4
|
-
reference: string;
|
|
5
|
-
status: BenefitPaymentStatusEnum;
|
|
6
|
-
errorCode?: WalletFundingErrorCodeEnum;
|
|
7
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Request del cancel via Centro de Beneficios (spec 13 v2.0).
|
|
3
|
-
* `reference` viaja en el path, `directoryId` se resuelve del JWT.
|
|
4
|
-
* `providerModuleName` permite al marketplace rutear al publisher correcto
|
|
5
|
-
* sin tener que persistir el mapping (el wallet-app sabe el moduleName
|
|
6
|
-
* porque vino en la respuesta del authorize).
|
|
7
|
-
*/
|
|
8
|
-
export declare class CancelFundingRequest {
|
|
9
|
-
idempotencyKey: string;
|
|
10
|
-
providerModuleName: string;
|
|
11
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
-
reference: string;
|
|
11
|
-
status: BenefitPaymentStatusEnum;
|
|
12
|
-
errorCode?: WalletFundingErrorCodeEnum;
|
|
13
|
-
message?: string;
|
|
14
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
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;
|
|
@@ -1,21 +0,0 @@
|
|
|
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.CancelWalletFundingRequest = void 0;
|
|
13
|
-
const class_validator_1 = require("class-validator");
|
|
14
|
-
class CancelWalletFundingRequest {
|
|
15
|
-
}
|
|
16
|
-
exports.CancelWalletFundingRequest = CancelWalletFundingRequest;
|
|
17
|
-
__decorate([
|
|
18
|
-
(0, class_validator_1.IsString)(),
|
|
19
|
-
(0, class_validator_1.MaxLength)(64),
|
|
20
|
-
__metadata("design:type", String)
|
|
21
|
-
], CancelWalletFundingRequest.prototype, "idempotencyKey", void 0);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
|
|
2
|
-
import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
|
|
3
|
-
export declare class CancelWalletFundingResponse {
|
|
4
|
-
status: BenefitPaymentStatusEnum;
|
|
5
|
-
errorCode?: WalletFundingErrorCodeEnum;
|
|
6
|
-
reference?: string;
|
|
7
|
-
}
|