@fiado/type-kit 3.140.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 (34) hide show
  1. package/bin/remittance/dtos/RemittanceAuditLog.d.ts +42 -0
  2. package/bin/remittance/dtos/RemittanceAuditLog.js +62 -0
  3. package/bin/remittance/dtos/RemittanceCohort.d.ts +62 -0
  4. package/bin/remittance/dtos/RemittanceCohort.js +105 -0
  5. package/bin/remittance/dtos/index.d.ts +2 -0
  6. package/bin/remittance/dtos/index.js +2 -0
  7. package/bin/remittance/dtos/internal/RemittanceCohortCount.d.ts +16 -0
  8. package/bin/remittance/dtos/internal/RemittanceCohortCount.js +34 -0
  9. package/bin/remittance/enums/AuditAction.d.ts +12 -0
  10. package/bin/remittance/enums/AuditAction.js +16 -0
  11. package/bin/remittance/enums/AuditEntityType.d.ts +12 -0
  12. package/bin/remittance/enums/AuditEntityType.js +16 -0
  13. package/bin/remittance/enums/CohortField.d.ts +23 -0
  14. package/bin/remittance/enums/CohortField.js +27 -0
  15. package/bin/remittance/enums/CohortOperator.d.ts +11 -0
  16. package/bin/remittance/enums/CohortOperator.js +15 -0
  17. package/bin/remittance/enums/CohortRefresh.d.ts +9 -0
  18. package/bin/remittance/enums/CohortRefresh.js +13 -0
  19. package/bin/remittance/enums/index.d.ts +5 -0
  20. package/bin/remittance/enums/index.js +5 -0
  21. package/bin/remittance/index.d.ts +1 -0
  22. package/bin/remittance/index.js +1 -0
  23. package/package.json +1 -1
  24. package/src/remittance/dtos/RemittanceAuditLog.ts +60 -0
  25. package/src/remittance/dtos/RemittanceCohort.ts +112 -0
  26. package/src/remittance/dtos/index.ts +2 -0
  27. package/src/remittance/dtos/internal/RemittanceCohortCount.ts +24 -0
  28. package/src/remittance/enums/AuditAction.ts +12 -0
  29. package/src/remittance/enums/AuditEntityType.ts +12 -0
  30. package/src/remittance/enums/CohortField.ts +23 -0
  31. package/src/remittance/enums/CohortOperator.ts +11 -0
  32. package/src/remittance/enums/CohortRefresh.ts +9 -0
  33. package/src/remittance/enums/index.ts +5 -0
  34. package/src/remittance/index.ts +1 -0
@@ -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;
@@ -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
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuditEntityType = void 0;
4
+ /**
5
+ * Módulo/dominio afectado por una entrada del audit trail (PK de RemittanceAuditLog_GT).
6
+ */
7
+ var AuditEntityType;
8
+ (function (AuditEntityType) {
9
+ AuditEntityType["COHORT"] = "COHORT";
10
+ AuditEntityType["COMMITTEE"] = "COMMITTEE";
11
+ AuditEntityType["SEGMENT"] = "SEGMENT";
12
+ AuditEntityType["PRICING"] = "PRICING";
13
+ AuditEntityType["PROMOTION"] = "PROMOTION";
14
+ AuditEntityType["RULE"] = "RULE";
15
+ AuditEntityType["USER"] = "USER";
16
+ })(AuditEntityType || (exports.AuditEntityType = AuditEntityType = {}));
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Campos conductuales del rule builder de Cohorts (Dashboard Ops · Configuración §3).
3
+ * Los valores son los del mockup (snake_case) para que el front no traduzca.
4
+ *
5
+ * MVP soporta 6 campos; TX_POST_REACTIVACION está DIFERIDO (el backend lo rechaza
6
+ * hasta que exista el contador denormalizado `txSinceReactivation` en el connector).
7
+ */
8
+ export declare enum CohortField {
9
+ /** # de tx totales (RemittanceUsers_GT.txCount). */
10
+ TX_TOTALES = "tx_totales",
11
+ /** Días desde el signup (now − (unirSignupDate ?? createdAt)). */
12
+ DIAS_DESDE_SIGNUP = "dias_desde_signup",
13
+ /** Días desde la última tx (now − lastTxAt). */
14
+ DIAS_DESDE_ULTIMA_TX = "dias_desde_ultima_tx",
15
+ /** Días sin actividad — sinónimo de DIAS_DESDE_ULTIMA_TX. */
16
+ DIAS_SIN_TX = "dias_sin_tx",
17
+ /** Monto total histórico en USD (RemittanceUsers_GT.totalSentUSD). */
18
+ MONTO_TOTAL_HISTORICO = "monto_total_historico",
19
+ /** Tx en los últimos 30 días (query nivel-tx por usuario). */
20
+ TX_ULTIMOS_30_DIAS = "tx_ultimos_30_dias",
21
+ /** # de tx tras reactivación — DIFERIDO (no-MVP, el backend lo rechaza). */
22
+ TX_POST_REACTIVACION = "tx_post_reactivacion"
23
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CohortField = void 0;
4
+ /**
5
+ * Campos conductuales del rule builder de Cohorts (Dashboard Ops · Configuración §3).
6
+ * Los valores son los del mockup (snake_case) para que el front no traduzca.
7
+ *
8
+ * MVP soporta 6 campos; TX_POST_REACTIVACION está DIFERIDO (el backend lo rechaza
9
+ * hasta que exista el contador denormalizado `txSinceReactivation` en el connector).
10
+ */
11
+ var CohortField;
12
+ (function (CohortField) {
13
+ /** # de tx totales (RemittanceUsers_GT.txCount). */
14
+ CohortField["TX_TOTALES"] = "tx_totales";
15
+ /** Días desde el signup (now − (unirSignupDate ?? createdAt)). */
16
+ CohortField["DIAS_DESDE_SIGNUP"] = "dias_desde_signup";
17
+ /** Días desde la última tx (now − lastTxAt). */
18
+ CohortField["DIAS_DESDE_ULTIMA_TX"] = "dias_desde_ultima_tx";
19
+ /** Días sin actividad — sinónimo de DIAS_DESDE_ULTIMA_TX. */
20
+ CohortField["DIAS_SIN_TX"] = "dias_sin_tx";
21
+ /** Monto total histórico en USD (RemittanceUsers_GT.totalSentUSD). */
22
+ CohortField["MONTO_TOTAL_HISTORICO"] = "monto_total_historico";
23
+ /** Tx en los últimos 30 días (query nivel-tx por usuario). */
24
+ CohortField["TX_ULTIMOS_30_DIAS"] = "tx_ultimos_30_dias";
25
+ /** # de tx tras reactivación — DIFERIDO (no-MVP, el backend lo rechaza). */
26
+ CohortField["TX_POST_REACTIVACION"] = "tx_post_reactivacion";
27
+ })(CohortField || (exports.CohortField = CohortField = {}));
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Operadores de comparación del rule builder de Cohorts. Los valores son los
3
+ * símbolos que renderiza el mockup; todas las condiciones se evalúan en AND.
4
+ */
5
+ export declare enum CohortOperator {
6
+ LT = "<",
7
+ LTE = "<=",
8
+ EQ = "==",
9
+ GTE = ">=",
10
+ GT = ">"
11
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CohortOperator = void 0;
4
+ /**
5
+ * Operadores de comparación del rule builder de Cohorts. Los valores son los
6
+ * símbolos que renderiza el mockup; todas las condiciones se evalúan en AND.
7
+ */
8
+ var CohortOperator;
9
+ (function (CohortOperator) {
10
+ CohortOperator["LT"] = "<";
11
+ CohortOperator["LTE"] = "<=";
12
+ CohortOperator["EQ"] = "==";
13
+ CohortOperator["GTE"] = ">=";
14
+ CohortOperator["GT"] = ">";
15
+ })(CohortOperator || (exports.CohortOperator = CohortOperator = {}));
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Frecuencia de recálculo de un cohort. Un solo cron horario en remittance-business
3
+ * honra las 3 frecuencias respetando `nextCalculationAt` (+1h / +1d / +7d).
4
+ */
5
+ export declare enum CohortRefresh {
6
+ HORARIO = "horario",
7
+ DIARIO = "diario",
8
+ SEMANAL = "semanal"
9
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CohortRefresh = void 0;
4
+ /**
5
+ * Frecuencia de recálculo de un cohort. Un solo cron horario en remittance-business
6
+ * honra las 3 frecuencias respetando `nextCalculationAt` (+1h / +1d / +7d).
7
+ */
8
+ var CohortRefresh;
9
+ (function (CohortRefresh) {
10
+ CohortRefresh["HORARIO"] = "horario";
11
+ CohortRefresh["DIARIO"] = "diario";
12
+ CohortRefresh["SEMANAL"] = "semanal";
13
+ })(CohortRefresh || (exports.CohortRefresh = CohortRefresh = {}));
@@ -5,3 +5,8 @@ export * from "./RemittanceUserState";
5
5
  export * from "./RemittanceCancelledByEnum";
6
6
  export * from "./RemittanceCancelOutcomeEnum";
7
7
  export * from "./FeeAbsorbedByEnum";
8
+ export * from "./CohortField";
9
+ export * from "./CohortOperator";
10
+ export * from "./CohortRefresh";
11
+ export * from "./AuditAction";
12
+ export * from "./AuditEntityType";
@@ -21,3 +21,8 @@ __exportStar(require("./RemittanceUserState"), exports);
21
21
  __exportStar(require("./RemittanceCancelledByEnum"), exports);
22
22
  __exportStar(require("./RemittanceCancelOutcomeEnum"), exports);
23
23
  __exportStar(require("./FeeAbsorbedByEnum"), exports);
24
+ __exportStar(require("./CohortField"), exports);
25
+ __exportStar(require("./CohortOperator"), exports);
26
+ __exportStar(require("./CohortRefresh"), exports);
27
+ __exportStar(require("./AuditAction"), exports);
28
+ __exportStar(require("./AuditEntityType"), exports);
@@ -2,3 +2,4 @@ export * from "./enums";
2
2
  export * from "./dtos";
3
3
  export * from "./dtos/internal/RemittanceCreditBackRequest";
4
4
  export * from "./dtos/internal/RemittanceCreditBackResponse";
5
+ export * from "./dtos/internal/RemittanceCohortCount";
@@ -20,3 +20,4 @@ __exportStar(require("./enums"), exports);
20
20
  __exportStar(require("./dtos"), exports);
21
21
  __exportStar(require("./dtos/internal/RemittanceCreditBackRequest"), exports);
22
22
  __exportStar(require("./dtos/internal/RemittanceCreditBackResponse"), exports);
23
+ __exportStar(require("./dtos/internal/RemittanceCohortCount"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.140.0",
3
+ "version": "3.141.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,60 @@
1
+ import { IsEnum, IsObject, IsOptional, IsString, MaxLength } from "class-validator";
2
+ import { AuditAction } from "../enums/AuditAction";
3
+ import { AuditEntityType } from "../enums/AuditEntityType";
4
+
5
+ /**
6
+ * DTOs del audit trail del backoffice de remesas (RemittanceAuditLog_GT, dueño:
7
+ * remittance-business). Append-only: registra "quién cambió qué, cuándo" en cada
8
+ * mutación (Configuración, Variables Operativas y, a futuro, suspend/reactivate
9
+ * desde el connector vía api-invoker — por eso el request vive en type-kit).
10
+ *
11
+ * MVP persiste `summary` + `after` (snapshot nuevo); `before` se agrega después
12
+ * si la UI quiere diff visual.
13
+ */
14
+
15
+ /** Request de append (helper `recordAudit` en rb; futuro cross-lambda). */
16
+ export class AuditAppendRequest {
17
+ @IsEnum(AuditEntityType)
18
+ entityType!: AuditEntityType;
19
+
20
+ /** Id de la entidad afectada (cohortId, segmentId, directoryId…). */
21
+ @IsString()
22
+ entityId!: string;
23
+
24
+ @IsEnum(AuditAction)
25
+ action!: AuditAction;
26
+
27
+ /** Email del operador (claim del JWT) o "sistema" para jobs. */
28
+ @IsString()
29
+ actor!: string;
30
+
31
+ /** Descripción legible ("Editó condiciones del cohort 'Activo'"). */
32
+ @IsString()
33
+ @MaxLength(500)
34
+ summary!: string;
35
+
36
+ /** Snapshot del estado nuevo de la entidad (opcional). */
37
+ @IsOptional()
38
+ @IsObject()
39
+ after?: Record<string, unknown>;
40
+ }
41
+
42
+ /** Entrada del audit trail (response). */
43
+ export class AuditLogEntry {
44
+ entityType!: AuditEntityType;
45
+ /** SK: ISO-8601 + `#<uuid>` (orden cronológico + unicidad dentro del entityType). */
46
+ at!: string;
47
+ actor!: string;
48
+ entityId!: string;
49
+ action!: AuditAction;
50
+ summary!: string;
51
+ after!: Record<string, unknown> | null;
52
+ createdAt!: string;
53
+ }
54
+
55
+ /** Response de GET /backoffice/audit (paginación estándar index/pageSize). */
56
+ export class AuditListResponse {
57
+ items!: AuditLogEntry[];
58
+ /** Cursor opaco (base64) para la próxima página; null/ausente = última. */
59
+ index?: string | null;
60
+ }
@@ -0,0 +1,112 @@
1
+ import { Type } from "class-transformer";
2
+ import {
3
+ ArrayMinSize,
4
+ IsArray,
5
+ IsEnum,
6
+ IsNumber,
7
+ IsOptional,
8
+ IsString,
9
+ Length,
10
+ MaxLength,
11
+ ValidateNested,
12
+ } from "class-validator";
13
+ import { CohortField } from "../enums/CohortField";
14
+ import { CohortOperator } from "../enums/CohortOperator";
15
+ import { CohortRefresh } from "../enums/CohortRefresh";
16
+
17
+ /**
18
+ * DTOs de Cohorts (Dashboard Ops · Configuración §3, EP-26..30).
19
+ *
20
+ * Un cohort es un grupo dinámico de clientes definido por condiciones en AND
21
+ * (rule builder del mockup) que se recalcula periódicamente. Dueño de la tabla:
22
+ * remittance-business (RemittanceCohorts_GT). Solo se persiste el count (D4.5),
23
+ * nunca la membership.
24
+ */
25
+
26
+ /** Condición del rule builder: `SI <field> <op> <value>`. Todas en AND. */
27
+ export class CohortCondition {
28
+ @IsEnum(CohortField)
29
+ field!: CohortField;
30
+
31
+ @IsEnum(CohortOperator)
32
+ op!: CohortOperator;
33
+
34
+ @IsNumber()
35
+ value!: number;
36
+ }
37
+
38
+ /** Body de EP-27 POST /backoffice/config/cohorts. */
39
+ export class CreateCohortRequest {
40
+ @IsString()
41
+ @Length(3, 100)
42
+ name!: string;
43
+
44
+ @IsOptional()
45
+ @IsString()
46
+ @MaxLength(500)
47
+ description?: string;
48
+
49
+ @IsArray()
50
+ @ArrayMinSize(1)
51
+ @ValidateNested({ each: true })
52
+ @Type(() => CohortCondition)
53
+ conditions!: CohortCondition[];
54
+
55
+ @IsEnum(CohortRefresh)
56
+ refresh!: CohortRefresh;
57
+ }
58
+
59
+ /** Body de EP-28 PUT /backoffice/config/cohorts/{id} (reemplazo completo, patrón Save del mockup). */
60
+ export class UpdateCohortRequest {
61
+ @IsString()
62
+ @Length(3, 100)
63
+ name!: string;
64
+
65
+ @IsOptional()
66
+ @IsString()
67
+ @MaxLength(500)
68
+ description?: string;
69
+
70
+ @IsArray()
71
+ @ArrayMinSize(1)
72
+ @ValidateNested({ each: true })
73
+ @Type(() => CohortCondition)
74
+ conditions!: CohortCondition[];
75
+
76
+ @IsEnum(CohortRefresh)
77
+ refresh!: CohortRefresh;
78
+ }
79
+
80
+ /** Cohort completo (response). `memberCount`/`pctTotal` son null si nunca se calculó. */
81
+ export class Cohort {
82
+ id!: string;
83
+ name!: string;
84
+ description!: string | null;
85
+ conditions!: CohortCondition[];
86
+ refresh!: CohortRefresh;
87
+ /** Clientes actualmente en el cohort (snapshot del último recálculo). */
88
+ memberCount!: number | null;
89
+ /** % del total de RemittanceUsers (denominador = todos, no solo ACTIVE). 0-100. */
90
+ pctTotal!: number | null;
91
+ lastCalculatedAt!: string | null;
92
+ /** ISO — próxima corrida que el cron horario debe honrar (derivado de `refresh`). */
93
+ nextCalculationAt!: string;
94
+ createdAt!: string;
95
+ updatedAt!: string;
96
+ createdBy!: string;
97
+ updatedBy!: string;
98
+ }
99
+
100
+ /** Response de EP-26 GET /backoffice/config/cohorts (tabla chica, sin paginación). */
101
+ export class CohortListResponse {
102
+ items!: Cohort[];
103
+ }
104
+
105
+ /** Response de EP-30 POST /backoffice/config/cohorts/{id}/recalcular. */
106
+ export class RecalculateCohortResponse {
107
+ id!: string;
108
+ memberCount!: number;
109
+ pctTotal!: number;
110
+ lastCalculatedAt!: string;
111
+ nextCalculationAt!: string;
112
+ }
@@ -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";
@@ -0,0 +1,24 @@
1
+ import { Type } from "class-transformer";
2
+ import { ArrayMinSize, IsArray, ValidateNested } from "class-validator";
3
+ import { CohortCondition } from "../RemittanceCohort";
4
+
5
+ /**
6
+ * Contrato interno del puente de recálculo de Cohorts (Opción A):
7
+ * remittance-business pide al uniteller-connector (dueño de RemittanceUsers_GT /
8
+ * RemittanceTransactions_GT) cuántos usuarios cumplen las condiciones, vía
9
+ * api-invoker → POST /backoffice/config/cohorts/count (privado).
10
+ */
11
+ export class CohortCountRequest {
12
+ @IsArray()
13
+ @ArrayMinSize(1)
14
+ @ValidateNested({ each: true })
15
+ @Type(() => CohortCondition)
16
+ conditions!: CohortCondition[];
17
+ }
18
+
19
+ export class CohortCountResponse {
20
+ /** Usuarios que cumplen TODAS las condiciones (AND). */
21
+ count!: number;
22
+ /** Universo total de RemittanceUsers (denominador del % — todos, no solo ACTIVE). */
23
+ total!: number;
24
+ }
@@ -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 enum AuditAction {
6
+ CREATE = "CREATE",
7
+ UPDATE = "UPDATE",
8
+ DELETE = "DELETE",
9
+ RECALCULATE = "RECALCULATE",
10
+ SUSPEND = "SUSPEND",
11
+ REACTIVATE = "REACTIVATE",
12
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Módulo/dominio afectado por una entrada del audit trail (PK de RemittanceAuditLog_GT).
3
+ */
4
+ export enum AuditEntityType {
5
+ COHORT = "COHORT",
6
+ COMMITTEE = "COMMITTEE",
7
+ SEGMENT = "SEGMENT",
8
+ PRICING = "PRICING",
9
+ PROMOTION = "PROMOTION",
10
+ RULE = "RULE",
11
+ USER = "USER",
12
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Campos conductuales del rule builder de Cohorts (Dashboard Ops · Configuración §3).
3
+ * Los valores son los del mockup (snake_case) para que el front no traduzca.
4
+ *
5
+ * MVP soporta 6 campos; TX_POST_REACTIVACION está DIFERIDO (el backend lo rechaza
6
+ * hasta que exista el contador denormalizado `txSinceReactivation` en el connector).
7
+ */
8
+ export enum CohortField {
9
+ /** # de tx totales (RemittanceUsers_GT.txCount). */
10
+ TX_TOTALES = "tx_totales",
11
+ /** Días desde el signup (now − (unirSignupDate ?? createdAt)). */
12
+ DIAS_DESDE_SIGNUP = "dias_desde_signup",
13
+ /** Días desde la última tx (now − lastTxAt). */
14
+ DIAS_DESDE_ULTIMA_TX = "dias_desde_ultima_tx",
15
+ /** Días sin actividad — sinónimo de DIAS_DESDE_ULTIMA_TX. */
16
+ DIAS_SIN_TX = "dias_sin_tx",
17
+ /** Monto total histórico en USD (RemittanceUsers_GT.totalSentUSD). */
18
+ MONTO_TOTAL_HISTORICO = "monto_total_historico",
19
+ /** Tx en los últimos 30 días (query nivel-tx por usuario). */
20
+ TX_ULTIMOS_30_DIAS = "tx_ultimos_30_dias",
21
+ /** # de tx tras reactivación — DIFERIDO (no-MVP, el backend lo rechaza). */
22
+ TX_POST_REACTIVACION = "tx_post_reactivacion",
23
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Operadores de comparación del rule builder de Cohorts. Los valores son los
3
+ * símbolos que renderiza el mockup; todas las condiciones se evalúan en AND.
4
+ */
5
+ export enum CohortOperator {
6
+ LT = "<",
7
+ LTE = "<=",
8
+ EQ = "==",
9
+ GTE = ">=",
10
+ GT = ">",
11
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Frecuencia de recálculo de un cohort. Un solo cron horario en remittance-business
3
+ * honra las 3 frecuencias respetando `nextCalculationAt` (+1h / +1d / +7d).
4
+ */
5
+ export enum CohortRefresh {
6
+ HORARIO = "horario",
7
+ DIARIO = "diario",
8
+ SEMANAL = "semanal",
9
+ }
@@ -5,3 +5,8 @@ export * from "./RemittanceUserState";
5
5
  export * from "./RemittanceCancelledByEnum";
6
6
  export * from "./RemittanceCancelOutcomeEnum";
7
7
  export * from "./FeeAbsorbedByEnum";
8
+ export * from "./CohortField";
9
+ export * from "./CohortOperator";
10
+ export * from "./CohortRefresh";
11
+ export * from "./AuditAction";
12
+ export * from "./AuditEntityType";
@@ -4,3 +4,4 @@ export * from "./enums";
4
4
  export * from "./dtos";
5
5
  export * from "./dtos/internal/RemittanceCreditBackRequest";
6
6
  export * from "./dtos/internal/RemittanceCreditBackResponse";
7
+ export * from "./dtos/internal/RemittanceCohortCount";