@fiado/type-kit 3.139.0 → 3.141.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 (64) hide show
  1. package/bin/cognitoBackofficeConnector/dtos/MfaPoolConfig.d.ts +7 -0
  2. package/bin/{platformRbac/dtos/ResendSelfRegisterOtpRequest.js → cognitoBackofficeConnector/dtos/MfaPoolConfig.js} +18 -18
  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/RemittanceAuditLog.d.ts +42 -0
  14. package/bin/remittance/dtos/RemittanceAuditLog.js +62 -0
  15. package/bin/remittance/dtos/RemittanceBackofficeTransaction.d.ts +6 -0
  16. package/bin/remittance/dtos/RemittanceBackofficeUserView.d.ts +6 -0
  17. package/bin/remittance/dtos/RemittanceCohort.d.ts +62 -0
  18. package/bin/remittance/dtos/RemittanceCohort.js +105 -0
  19. package/bin/remittance/dtos/index.d.ts +2 -0
  20. package/bin/remittance/dtos/index.js +2 -0
  21. package/bin/remittance/dtos/internal/RemittanceCohortCount.d.ts +16 -0
  22. package/bin/remittance/dtos/internal/RemittanceCohortCount.js +34 -0
  23. package/bin/remittance/enums/AuditAction.d.ts +12 -0
  24. package/bin/remittance/enums/AuditAction.js +16 -0
  25. package/bin/remittance/enums/AuditEntityType.d.ts +12 -0
  26. package/bin/remittance/enums/AuditEntityType.js +16 -0
  27. package/bin/remittance/enums/CohortField.d.ts +23 -0
  28. package/bin/remittance/enums/CohortField.js +27 -0
  29. package/bin/remittance/enums/CohortOperator.d.ts +11 -0
  30. package/bin/remittance/enums/CohortOperator.js +15 -0
  31. package/bin/remittance/enums/CohortRefresh.d.ts +9 -0
  32. package/bin/remittance/enums/CohortRefresh.js +13 -0
  33. package/bin/remittance/enums/index.d.ts +5 -0
  34. package/bin/remittance/enums/index.js +5 -0
  35. package/bin/remittance/index.d.ts +1 -0
  36. package/bin/remittance/index.js +1 -0
  37. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +5 -0
  38. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +31 -0
  39. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +7 -0
  40. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +6 -0
  41. package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +11 -0
  42. package/bin/{platformRbac/dtos/ResendOtpRequest.js → walletFunding/dtos/CancelFundingRequest.js} +13 -16
  43. package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +14 -0
  44. package/bin/walletFunding/dtos/CancelFundingResponse.js +12 -0
  45. package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +3 -0
  46. package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +21 -0
  47. package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +7 -0
  48. package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +6 -0
  49. package/package.json +1 -1
  50. package/src/remittance/dtos/RemittanceAuditLog.ts +60 -0
  51. package/src/remittance/dtos/RemittanceBackofficeTransaction.ts +6 -0
  52. package/src/remittance/dtos/RemittanceBackofficeUserView.ts +6 -0
  53. package/src/remittance/dtos/RemittanceCohort.ts +112 -0
  54. package/src/remittance/dtos/index.ts +2 -0
  55. package/src/remittance/dtos/internal/RemittanceCohortCount.ts +24 -0
  56. package/src/remittance/enums/AuditAction.ts +12 -0
  57. package/src/remittance/enums/AuditEntityType.ts +12 -0
  58. package/src/remittance/enums/CohortField.ts +23 -0
  59. package/src/remittance/enums/CohortOperator.ts +11 -0
  60. package/src/remittance/enums/CohortRefresh.ts +9 -0
  61. package/src/remittance/enums/index.ts +5 -0
  62. package/src/remittance/index.ts +1 -0
  63. package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +0 -22
  64. package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +0 -11
@@ -0,0 +1,7 @@
1
+ declare const ALLOWED_MFA_TYPES: readonly ["SOFTWARE_TOKEN_MFA"];
2
+ export type AllowedMfaType = (typeof ALLOWED_MFA_TYPES)[number];
3
+ export declare class MfaPoolConfig {
4
+ requireMfa: boolean;
5
+ mfaTypes: AllowedMfaType[];
6
+ }
7
+ export {};
@@ -9,28 +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.ResendSelfRegisterOtpRequest = void 0;
12
+ exports.MfaPoolConfig = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
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
+ const MfaTypesRequiresOne_1 = require("../validators/MfaTypesRequiresOne");
16
+ // EMAIL_OTP removido (3.41.0): el cognito-backoffice-connector no provisiona
17
+ // EmailMfaConfiguration a nivel pool (requiere infra SES que no está montada
18
+ // y la integración con messages-lambda aún no tiene diseño). Ver TD-020 +
19
+ // DEC-001 en cognito-backoffice-connector/docs/. Si se reintroduce, agregar
20
+ // 'EMAIL_OTP' a este array.
21
+ const ALLOWED_MFA_TYPES = ['SOFTWARE_TOKEN_MFA'];
22
+ class MfaPoolConfig {
23
23
  }
24
- exports.ResendSelfRegisterOtpRequest = ResendSelfRegisterOtpRequest;
24
+ exports.MfaPoolConfig = MfaPoolConfig;
25
25
  __decorate([
26
26
  (0, class_transformer_1.Expose)(),
27
- (0, class_validator_1.IsString)(),
28
- (0, class_validator_1.IsNotEmpty)(),
29
- __metadata("design:type", String)
30
- ], ResendSelfRegisterOtpRequest.prototype, "tenantId", void 0);
27
+ (0, class_validator_1.IsBoolean)(),
28
+ __metadata("design:type", Boolean)
29
+ ], MfaPoolConfig.prototype, "requireMfa", void 0);
31
30
  __decorate([
32
31
  (0, class_transformer_1.Expose)(),
33
- (0, class_validator_1.IsEmail)(),
34
- (0, class_validator_1.IsNotEmpty)(),
35
- __metadata("design:type", String)
36
- ], ResendSelfRegisterOtpRequest.prototype, "email", void 0);
32
+ (0, class_validator_1.IsArray)(),
33
+ (0, class_validator_1.IsIn)(ALLOWED_MFA_TYPES, { each: true }),
34
+ (0, class_validator_1.Validate)(MfaTypesRequiresOne_1.MfaTypesRequiresOne),
35
+ __metadata("design:type", Array)
36
+ ], MfaPoolConfig.prototype, "mfaTypes", void 0);
@@ -0,0 +1,20 @@
1
+ import { PoolKind } from '../../rbac/enums/PoolKind';
2
+ /**
3
+ * Shape del `PoolConfigRow` expuesto al caller (BFF M18 / otros lambdas Fiado).
4
+ * Refleja la configuración de un Cognito User Pool registrado en la tabla
5
+ * `PoolConfigs_GT` del lambda `cognito-backoffice-connector`.
6
+ */
7
+ export declare class PoolConfigResponse {
8
+ userPoolId: string;
9
+ userPoolArn: string;
10
+ region: string;
11
+ poolKind: PoolKind;
12
+ displayName: string;
13
+ appClients: Record<string, {
14
+ clientId: string;
15
+ clientName: string;
16
+ }>;
17
+ status: 'active' | 'deprecated';
18
+ createdAt: number;
19
+ updatedAt: number;
20
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PoolConfigResponse = void 0;
4
+ /**
5
+ * Shape del `PoolConfigRow` expuesto al caller (BFF M18 / otros lambdas Fiado).
6
+ * Refleja la configuración de un Cognito User Pool registrado en la tabla
7
+ * `PoolConfigs_GT` del lambda `cognito-backoffice-connector`.
8
+ */
9
+ class PoolConfigResponse {
10
+ }
11
+ exports.PoolConfigResponse = PoolConfigResponse;
@@ -0,0 +1,4 @@
1
+ import { PoolConfigResponse } from './PoolConfigResponse';
2
+ export declare class PoolsListResponse {
3
+ pools: PoolConfigResponse[];
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PoolsListResponse = void 0;
4
+ class PoolsListResponse {
5
+ }
6
+ exports.PoolsListResponse = PoolsListResponse;
@@ -0,0 +1,17 @@
1
+ import { ValidatorConstraintInterface, ValidationArguments } from 'class-validator';
2
+ /**
3
+ * Cross-field validator: si `requireMfa: true`, entonces `mfaTypes` debe tener
4
+ * al menos 1 elemento. Si `requireMfa: false`, `mfaTypes` puede ser vacío.
5
+ *
6
+ * Razón: cuando el pool nace con MFA habilitado, el connector llama
7
+ * `SetUserPoolMfaConfigCommand` con la lista de tipos del DTO. Si el array
8
+ * llega vacío con `requireMfa: true`, el SDK rechaza con InvalidParameterException
9
+ * y el pool queda en estado inconsistente (MfaConfiguration:'ON' sin tipos).
10
+ * Mejor rechazar en validación del DTO antes de tocar AWS.
11
+ *
12
+ * Ver pivote v1.4.1 TD-017 cerrado + spec doc §1 R3.
13
+ */
14
+ export declare class MfaTypesRequiresOne implements ValidatorConstraintInterface {
15
+ validate(mfaTypes: unknown, args: ValidationArguments): boolean;
16
+ defaultMessage(): string;
17
+ }
@@ -0,0 +1,39 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MfaTypesRequiresOne = void 0;
10
+ const class_validator_1 = require("class-validator");
11
+ /**
12
+ * Cross-field validator: si `requireMfa: true`, entonces `mfaTypes` debe tener
13
+ * al menos 1 elemento. Si `requireMfa: false`, `mfaTypes` puede ser vacío.
14
+ *
15
+ * Razón: cuando el pool nace con MFA habilitado, el connector llama
16
+ * `SetUserPoolMfaConfigCommand` con la lista de tipos del DTO. Si el array
17
+ * llega vacío con `requireMfa: true`, el SDK rechaza con InvalidParameterException
18
+ * y el pool queda en estado inconsistente (MfaConfiguration:'ON' sin tipos).
19
+ * Mejor rechazar en validación del DTO antes de tocar AWS.
20
+ *
21
+ * Ver pivote v1.4.1 TD-017 cerrado + spec doc §1 R3.
22
+ */
23
+ let MfaTypesRequiresOne = class MfaTypesRequiresOne {
24
+ validate(mfaTypes, args) {
25
+ const obj = args.object;
26
+ if (obj.requireMfa === true) {
27
+ return Array.isArray(mfaTypes) && mfaTypes.length >= 1;
28
+ }
29
+ // requireMfa: false → cualquier mfaTypes pasa.
30
+ return true;
31
+ }
32
+ defaultMessage() {
33
+ return 'mfaTypes requiere al menos un tipo cuando requireMfa=true';
34
+ }
35
+ };
36
+ exports.MfaTypesRequiresOne = MfaTypesRequiresOne;
37
+ exports.MfaTypesRequiresOne = MfaTypesRequiresOne = __decorate([
38
+ (0, class_validator_1.ValidatorConstraint)({ name: 'MfaTypesRequiresOneWhenMfaRequired', async: false })
39
+ ], MfaTypesRequiresOne);
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Tipo de User Pool de Cognito desde la perspectiva del modelo RBAC Fiado.
3
+ *
4
+ * Origen: spec del proyecto `cognito-backoffice-connector` (Fase 0, componente 01
5
+ * documento `docs/superpowers/specs/2026-05-26-cognito-connector-decisiones-pendientes-design.md`).
6
+ *
7
+ * Decisión (TD-003): el proyecto converge en estos 2 valores. El documento componente 03
8
+ * lista 3 valores (incluyendo una variante adicional) pero queda como outlier — la
9
+ * decisión vigente en los 6 docs restantes y en el plan de implementación es 2 valores:
10
+ * - BACKOFFICE_PLATFORM — pool del backoffice de plataforma (cross-tenant)
11
+ * - BACKOFFICE_TENANT — pool por tenant (multi-tenant isolation)
12
+ */
13
+ export declare enum PoolKind {
14
+ BACKOFFICE_PLATFORM = "BACKOFFICE_PLATFORM",
15
+ BACKOFFICE_TENANT = "BACKOFFICE_TENANT"
16
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PoolKind = void 0;
4
+ /**
5
+ * Tipo de User Pool de Cognito desde la perspectiva del modelo RBAC Fiado.
6
+ *
7
+ * Origen: spec del proyecto `cognito-backoffice-connector` (Fase 0, componente 01
8
+ * documento `docs/superpowers/specs/2026-05-26-cognito-connector-decisiones-pendientes-design.md`).
9
+ *
10
+ * Decisión (TD-003): el proyecto converge en estos 2 valores. El documento componente 03
11
+ * lista 3 valores (incluyendo una variante adicional) pero queda como outlier — la
12
+ * decisión vigente en los 6 docs restantes y en el plan de implementación es 2 valores:
13
+ * - BACKOFFICE_PLATFORM — pool del backoffice de plataforma (cross-tenant)
14
+ * - BACKOFFICE_TENANT — pool por tenant (multi-tenant isolation)
15
+ */
16
+ var PoolKind;
17
+ (function (PoolKind) {
18
+ PoolKind["BACKOFFICE_PLATFORM"] = "BACKOFFICE_PLATFORM";
19
+ PoolKind["BACKOFFICE_TENANT"] = "BACKOFFICE_TENANT";
20
+ })(PoolKind || (exports.PoolKind = PoolKind = {}));
@@ -0,0 +1 @@
1
+ export * from './enums/PoolKind';
@@ -0,0 +1,17 @@
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
+ __exportStar(require("./enums/PoolKind"), exports);
@@ -0,0 +1,42 @@
1
+ import { AuditAction } from "../enums/AuditAction";
2
+ import { AuditEntityType } from "../enums/AuditEntityType";
3
+ /**
4
+ * DTOs del audit trail del backoffice de remesas (RemittanceAuditLog_GT, dueño:
5
+ * remittance-business). Append-only: registra "quién cambió qué, cuándo" en cada
6
+ * mutación (Configuración, Variables Operativas y, a futuro, suspend/reactivate
7
+ * desde el connector vía api-invoker — por eso el request vive en type-kit).
8
+ *
9
+ * MVP persiste `summary` + `after` (snapshot nuevo); `before` se agrega después
10
+ * si la UI quiere diff visual.
11
+ */
12
+ /** Request de append (helper `recordAudit` en rb; futuro cross-lambda). */
13
+ export declare class AuditAppendRequest {
14
+ entityType: AuditEntityType;
15
+ /** Id de la entidad afectada (cohortId, segmentId, directoryId…). */
16
+ entityId: string;
17
+ action: AuditAction;
18
+ /** Email del operador (claim del JWT) o "sistema" para jobs. */
19
+ actor: string;
20
+ /** Descripción legible ("Editó condiciones del cohort 'Activo'"). */
21
+ summary: string;
22
+ /** Snapshot del estado nuevo de la entidad (opcional). */
23
+ after?: Record<string, unknown>;
24
+ }
25
+ /** Entrada del audit trail (response). */
26
+ export declare class AuditLogEntry {
27
+ entityType: AuditEntityType;
28
+ /** SK: ISO-8601 + `#<uuid>` (orden cronológico + unicidad dentro del entityType). */
29
+ at: string;
30
+ actor: string;
31
+ entityId: string;
32
+ action: AuditAction;
33
+ summary: string;
34
+ after: Record<string, unknown> | null;
35
+ createdAt: string;
36
+ }
37
+ /** Response de GET /backoffice/audit (paginación estándar index/pageSize). */
38
+ export declare class AuditListResponse {
39
+ items: AuditLogEntry[];
40
+ /** Cursor opaco (base64) para la próxima página; null/ausente = última. */
41
+ index?: string | null;
42
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AuditListResponse = exports.AuditLogEntry = exports.AuditAppendRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const AuditAction_1 = require("../enums/AuditAction");
15
+ const AuditEntityType_1 = require("../enums/AuditEntityType");
16
+ /**
17
+ * DTOs del audit trail del backoffice de remesas (RemittanceAuditLog_GT, dueño:
18
+ * remittance-business). Append-only: registra "quién cambió qué, cuándo" en cada
19
+ * mutación (Configuración, Variables Operativas y, a futuro, suspend/reactivate
20
+ * desde el connector vía api-invoker — por eso el request vive en type-kit).
21
+ *
22
+ * MVP persiste `summary` + `after` (snapshot nuevo); `before` se agrega después
23
+ * si la UI quiere diff visual.
24
+ */
25
+ /** Request de append (helper `recordAudit` en rb; futuro cross-lambda). */
26
+ class AuditAppendRequest {
27
+ }
28
+ exports.AuditAppendRequest = AuditAppendRequest;
29
+ __decorate([
30
+ (0, class_validator_1.IsEnum)(AuditEntityType_1.AuditEntityType),
31
+ __metadata("design:type", String)
32
+ ], AuditAppendRequest.prototype, "entityType", void 0);
33
+ __decorate([
34
+ (0, class_validator_1.IsString)(),
35
+ __metadata("design:type", String)
36
+ ], AuditAppendRequest.prototype, "entityId", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsEnum)(AuditAction_1.AuditAction),
39
+ __metadata("design:type", String)
40
+ ], AuditAppendRequest.prototype, "action", void 0);
41
+ __decorate([
42
+ (0, class_validator_1.IsString)(),
43
+ __metadata("design:type", String)
44
+ ], AuditAppendRequest.prototype, "actor", void 0);
45
+ __decorate([
46
+ (0, class_validator_1.IsString)(),
47
+ (0, class_validator_1.MaxLength)(500),
48
+ __metadata("design:type", String)
49
+ ], AuditAppendRequest.prototype, "summary", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.IsObject)(),
53
+ __metadata("design:type", Object)
54
+ ], AuditAppendRequest.prototype, "after", void 0);
55
+ /** Entrada del audit trail (response). */
56
+ class AuditLogEntry {
57
+ }
58
+ exports.AuditLogEntry = AuditLogEntry;
59
+ /** Response de GET /backoffice/audit (paginación estándar index/pageSize). */
60
+ class AuditListResponse {
61
+ }
62
+ exports.AuditListResponse = AuditListResponse;
@@ -8,6 +8,12 @@ export declare class RemittanceBackofficeTransaction {
8
8
  directoryId: string;
9
9
  txNumber: string;
10
10
  marketplaceTransactionNumber?: string;
11
+ /**
12
+ * Nombre del remitente (usuario de remesas). Se resuelve en el connector
13
+ * uniendo `directoryId` → `RemittanceUser.fullName` (tabla de remesas), NO
14
+ * viene de directory. `null` si el usuario aún no tiene `fullName` snapshotteado.
15
+ */
16
+ senderName?: string | null;
11
17
  beneficiaryId: string;
12
18
  beneficiaryName: string;
13
19
  countryISO: string;
@@ -6,6 +6,12 @@
6
6
  export declare class RemittanceBackofficeUserView {
7
7
  directoryId: string;
8
8
  unirEmail: string;
9
+ /** Nombre del usuario (snapshot de identidad UNIR en la tabla de remesas). `null` si aún no se snapshoteó. */
10
+ fullName?: string | null;
11
+ /** Ciudad del usuario (RemittanceUser.addressCity). `null` si no está poblada. */
12
+ city?: string | null;
13
+ /** Estado/provincia del usuario (RemittanceUser.addressState). `null` si no está poblada. */
14
+ state?: string | null;
9
15
  status: string;
10
16
  remitterStatus?: string;
11
17
  remitterLevel?: string;
@@ -0,0 +1,62 @@
1
+ import { CohortField } from "../enums/CohortField";
2
+ import { CohortOperator } from "../enums/CohortOperator";
3
+ import { CohortRefresh } from "../enums/CohortRefresh";
4
+ /**
5
+ * DTOs de Cohorts (Dashboard Ops · Configuración §3, EP-26..30).
6
+ *
7
+ * Un cohort es un grupo dinámico de clientes definido por condiciones en AND
8
+ * (rule builder del mockup) que se recalcula periódicamente. Dueño de la tabla:
9
+ * remittance-business (RemittanceCohorts_GT). Solo se persiste el count (D4.5),
10
+ * nunca la membership.
11
+ */
12
+ /** Condición del rule builder: `SI <field> <op> <value>`. Todas en AND. */
13
+ export declare class CohortCondition {
14
+ field: CohortField;
15
+ op: CohortOperator;
16
+ value: number;
17
+ }
18
+ /** Body de EP-27 POST /backoffice/config/cohorts. */
19
+ export declare class CreateCohortRequest {
20
+ name: string;
21
+ description?: string;
22
+ conditions: CohortCondition[];
23
+ refresh: CohortRefresh;
24
+ }
25
+ /** Body de EP-28 PUT /backoffice/config/cohorts/{id} (reemplazo completo, patrón Save del mockup). */
26
+ export declare class UpdateCohortRequest {
27
+ name: string;
28
+ description?: string;
29
+ conditions: CohortCondition[];
30
+ refresh: CohortRefresh;
31
+ }
32
+ /** Cohort completo (response). `memberCount`/`pctTotal` son null si nunca se calculó. */
33
+ export declare class Cohort {
34
+ id: string;
35
+ name: string;
36
+ description: string | null;
37
+ conditions: CohortCondition[];
38
+ refresh: CohortRefresh;
39
+ /** Clientes actualmente en el cohort (snapshot del último recálculo). */
40
+ memberCount: number | null;
41
+ /** % del total de RemittanceUsers (denominador = todos, no solo ACTIVE). 0-100. */
42
+ pctTotal: number | null;
43
+ lastCalculatedAt: string | null;
44
+ /** ISO — próxima corrida que el cron horario debe honrar (derivado de `refresh`). */
45
+ nextCalculationAt: string;
46
+ createdAt: string;
47
+ updatedAt: string;
48
+ createdBy: string;
49
+ updatedBy: string;
50
+ }
51
+ /** Response de EP-26 GET /backoffice/config/cohorts (tabla chica, sin paginación). */
52
+ export declare class CohortListResponse {
53
+ items: Cohort[];
54
+ }
55
+ /** Response de EP-30 POST /backoffice/config/cohorts/{id}/recalcular. */
56
+ export declare class RecalculateCohortResponse {
57
+ id: string;
58
+ memberCount: number;
59
+ pctTotal: number;
60
+ lastCalculatedAt: string;
61
+ nextCalculationAt: string;
62
+ }
@@ -0,0 +1,105 @@
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.RecalculateCohortResponse = exports.CohortListResponse = exports.Cohort = exports.UpdateCohortRequest = exports.CreateCohortRequest = exports.CohortCondition = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const CohortField_1 = require("../enums/CohortField");
16
+ const CohortOperator_1 = require("../enums/CohortOperator");
17
+ const CohortRefresh_1 = require("../enums/CohortRefresh");
18
+ /**
19
+ * DTOs de Cohorts (Dashboard Ops · Configuración §3, EP-26..30).
20
+ *
21
+ * Un cohort es un grupo dinámico de clientes definido por condiciones en AND
22
+ * (rule builder del mockup) que se recalcula periódicamente. Dueño de la tabla:
23
+ * remittance-business (RemittanceCohorts_GT). Solo se persiste el count (D4.5),
24
+ * nunca la membership.
25
+ */
26
+ /** Condición del rule builder: `SI <field> <op> <value>`. Todas en AND. */
27
+ class CohortCondition {
28
+ }
29
+ exports.CohortCondition = CohortCondition;
30
+ __decorate([
31
+ (0, class_validator_1.IsEnum)(CohortField_1.CohortField),
32
+ __metadata("design:type", String)
33
+ ], CohortCondition.prototype, "field", void 0);
34
+ __decorate([
35
+ (0, class_validator_1.IsEnum)(CohortOperator_1.CohortOperator),
36
+ __metadata("design:type", String)
37
+ ], CohortCondition.prototype, "op", void 0);
38
+ __decorate([
39
+ (0, class_validator_1.IsNumber)(),
40
+ __metadata("design:type", Number)
41
+ ], CohortCondition.prototype, "value", void 0);
42
+ /** Body de EP-27 POST /backoffice/config/cohorts. */
43
+ class CreateCohortRequest {
44
+ }
45
+ exports.CreateCohortRequest = CreateCohortRequest;
46
+ __decorate([
47
+ (0, class_validator_1.IsString)(),
48
+ (0, class_validator_1.Length)(3, 100),
49
+ __metadata("design:type", String)
50
+ ], CreateCohortRequest.prototype, "name", void 0);
51
+ __decorate([
52
+ (0, class_validator_1.IsOptional)(),
53
+ (0, class_validator_1.IsString)(),
54
+ (0, class_validator_1.MaxLength)(500),
55
+ __metadata("design:type", String)
56
+ ], CreateCohortRequest.prototype, "description", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsArray)(),
59
+ (0, class_validator_1.ArrayMinSize)(1),
60
+ (0, class_validator_1.ValidateNested)({ each: true }),
61
+ (0, class_transformer_1.Type)(() => CohortCondition),
62
+ __metadata("design:type", Array)
63
+ ], CreateCohortRequest.prototype, "conditions", void 0);
64
+ __decorate([
65
+ (0, class_validator_1.IsEnum)(CohortRefresh_1.CohortRefresh),
66
+ __metadata("design:type", String)
67
+ ], CreateCohortRequest.prototype, "refresh", void 0);
68
+ /** Body de EP-28 PUT /backoffice/config/cohorts/{id} (reemplazo completo, patrón Save del mockup). */
69
+ class UpdateCohortRequest {
70
+ }
71
+ exports.UpdateCohortRequest = UpdateCohortRequest;
72
+ __decorate([
73
+ (0, class_validator_1.IsString)(),
74
+ (0, class_validator_1.Length)(3, 100),
75
+ __metadata("design:type", String)
76
+ ], UpdateCohortRequest.prototype, "name", void 0);
77
+ __decorate([
78
+ (0, class_validator_1.IsOptional)(),
79
+ (0, class_validator_1.IsString)(),
80
+ (0, class_validator_1.MaxLength)(500),
81
+ __metadata("design:type", String)
82
+ ], UpdateCohortRequest.prototype, "description", void 0);
83
+ __decorate([
84
+ (0, class_validator_1.IsArray)(),
85
+ (0, class_validator_1.ArrayMinSize)(1),
86
+ (0, class_validator_1.ValidateNested)({ each: true }),
87
+ (0, class_transformer_1.Type)(() => CohortCondition),
88
+ __metadata("design:type", Array)
89
+ ], UpdateCohortRequest.prototype, "conditions", void 0);
90
+ __decorate([
91
+ (0, class_validator_1.IsEnum)(CohortRefresh_1.CohortRefresh),
92
+ __metadata("design:type", String)
93
+ ], UpdateCohortRequest.prototype, "refresh", void 0);
94
+ /** Cohort completo (response). `memberCount`/`pctTotal` son null si nunca se calculó. */
95
+ class Cohort {
96
+ }
97
+ exports.Cohort = Cohort;
98
+ /** Response de EP-26 GET /backoffice/config/cohorts (tabla chica, sin paginación). */
99
+ class CohortListResponse {
100
+ }
101
+ exports.CohortListResponse = CohortListResponse;
102
+ /** Response de EP-30 POST /backoffice/config/cohorts/{id}/recalcular. */
103
+ class RecalculateCohortResponse {
104
+ }
105
+ exports.RecalculateCohortResponse = RecalculateCohortResponse;
@@ -36,3 +36,5 @@ export * from "./RemittanceBackofficeTxListResponse";
36
36
  export * from "./RemittanceBackofficeStats";
37
37
  export * from "./RemittanceUserLimits";
38
38
  export * from "./RemittanceKyc";
39
+ export * from "./RemittanceCohort";
40
+ export * from "./RemittanceAuditLog";
@@ -52,3 +52,5 @@ __exportStar(require("./RemittanceBackofficeTxListResponse"), exports);
52
52
  __exportStar(require("./RemittanceBackofficeStats"), exports);
53
53
  __exportStar(require("./RemittanceUserLimits"), exports);
54
54
  __exportStar(require("./RemittanceKyc"), exports);
55
+ __exportStar(require("./RemittanceCohort"), exports);
56
+ __exportStar(require("./RemittanceAuditLog"), exports);
@@ -0,0 +1,16 @@
1
+ import { CohortCondition } from "../RemittanceCohort";
2
+ /**
3
+ * Contrato interno del puente de recálculo de Cohorts (Opción A):
4
+ * remittance-business pide al uniteller-connector (dueño de RemittanceUsers_GT /
5
+ * RemittanceTransactions_GT) cuántos usuarios cumplen las condiciones, vía
6
+ * api-invoker → POST /backoffice/config/cohorts/count (privado).
7
+ */
8
+ export declare class CohortCountRequest {
9
+ conditions: CohortCondition[];
10
+ }
11
+ export declare class CohortCountResponse {
12
+ /** Usuarios que cumplen TODAS las condiciones (AND). */
13
+ count: number;
14
+ /** Universo total de RemittanceUsers (denominador del % — todos, no solo ACTIVE). */
15
+ total: number;
16
+ }
@@ -0,0 +1,34 @@
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.CohortCountResponse = exports.CohortCountRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const RemittanceCohort_1 = require("../RemittanceCohort");
16
+ /**
17
+ * Contrato interno del puente de recálculo de Cohorts (Opción A):
18
+ * remittance-business pide al uniteller-connector (dueño de RemittanceUsers_GT /
19
+ * RemittanceTransactions_GT) cuántos usuarios cumplen las condiciones, vía
20
+ * api-invoker → POST /backoffice/config/cohorts/count (privado).
21
+ */
22
+ class CohortCountRequest {
23
+ }
24
+ exports.CohortCountRequest = CohortCountRequest;
25
+ __decorate([
26
+ (0, class_validator_1.IsArray)(),
27
+ (0, class_validator_1.ArrayMinSize)(1),
28
+ (0, class_validator_1.ValidateNested)({ each: true }),
29
+ (0, class_transformer_1.Type)(() => RemittanceCohort_1.CohortCondition),
30
+ __metadata("design:type", Array)
31
+ ], CohortCountRequest.prototype, "conditions", void 0);
32
+ class CohortCountResponse {
33
+ }
34
+ exports.CohortCountResponse = CohortCountResponse;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Acción registrada en el audit trail del backoffice de remesas (RemittanceAuditLog_GT).
3
+ * SUSPEND/REACTIVATE quedan listos para el flujo futuro de Operación (EP-02/03).
4
+ */
5
+ export declare enum AuditAction {
6
+ CREATE = "CREATE",
7
+ UPDATE = "UPDATE",
8
+ DELETE = "DELETE",
9
+ RECALCULATE = "RECALCULATE",
10
+ SUSPEND = "SUSPEND",
11
+ REACTIVATE = "REACTIVATE"
12
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuditAction = void 0;
4
+ /**
5
+ * Acción registrada en el audit trail del backoffice de remesas (RemittanceAuditLog_GT).
6
+ * SUSPEND/REACTIVATE quedan listos para el flujo futuro de Operación (EP-02/03).
7
+ */
8
+ var AuditAction;
9
+ (function (AuditAction) {
10
+ AuditAction["CREATE"] = "CREATE";
11
+ AuditAction["UPDATE"] = "UPDATE";
12
+ AuditAction["DELETE"] = "DELETE";
13
+ AuditAction["RECALCULATE"] = "RECALCULATE";
14
+ AuditAction["SUSPEND"] = "SUSPEND";
15
+ AuditAction["REACTIVATE"] = "REACTIVATE";
16
+ })(AuditAction || (exports.AuditAction = AuditAction = {}));
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Módulo/dominio afectado por una entrada del audit trail (PK de RemittanceAuditLog_GT).
3
+ */
4
+ export declare enum AuditEntityType {
5
+ COHORT = "COHORT",
6
+ COMMITTEE = "COMMITTEE",
7
+ SEGMENT = "SEGMENT",
8
+ PRICING = "PRICING",
9
+ PROMOTION = "PROMOTION",
10
+ RULE = "RULE",
11
+ USER = "USER"
12
+ }