@fiado/type-kit 3.545.0 → 3.546.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/_test_/unit/loanRetailAudit/loanRetailAuditContracts.test.ts +139 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +4 -1
- package/bin/loanRetailAudit/constants/auditTrailEntityTypes.d.ts +6 -0
- package/bin/loanRetailAudit/constants/auditTrailEntityTypes.js +10 -0
- package/bin/loanRetailAudit/dtos/AuditTrailChange.d.ts +8 -0
- package/bin/loanRetailAudit/dtos/AuditTrailChange.js +36 -0
- package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.d.ts +5 -0
- package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.js +29 -0
- package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.d.ts +19 -0
- package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.js +85 -0
- package/bin/loanRetailAudit/dtos/requests/ListAuditTrailQuery.d.ts +11 -0
- package/bin/loanRetailAudit/dtos/requests/ListAuditTrailQuery.js +52 -0
- package/bin/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.d.ts +4 -0
- package/bin/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.js +2 -0
- package/bin/loanRetailAudit/dtos/responses/ListAuditTrailResponse.d.ts +31 -0
- package/bin/loanRetailAudit/dtos/responses/ListAuditTrailResponse.js +2 -0
- package/bin/loanRetailAudit/enums/AuditTrailActionEnum.d.ts +39 -0
- package/bin/loanRetailAudit/enums/AuditTrailActionEnum.js +43 -0
- package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.d.ts +12 -0
- package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.js +16 -0
- package/bin/loanRetailAudit/enums/PiiAccessActionEnum.d.ts +5 -0
- package/bin/loanRetailAudit/enums/PiiAccessActionEnum.js +9 -0
- package/bin/loanRetailAudit/enums/PiiResourceTypeEnum.d.ts +9 -0
- package/bin/loanRetailAudit/enums/PiiResourceTypeEnum.js +13 -0
- package/bin/loanRetailAudit/enums/RetailAuditEntityTypeEnum.d.ts +17 -0
- package/bin/loanRetailAudit/enums/RetailAuditEntityTypeEnum.js +21 -0
- package/bin/loanRetailAudit/events/AuditTrailRecordedV1.d.ts +20 -0
- package/bin/loanRetailAudit/events/AuditTrailRecordedV1.js +94 -0
- package/bin/loanRetailAudit/index.d.ts +13 -0
- package/bin/loanRetailAudit/index.js +33 -0
- package/package.json +1 -1
- package/src/index.ts +4 -0
- package/src/loanRetailAudit/constants/auditTrailEntityTypes.ts +12 -0
- package/src/loanRetailAudit/dtos/AuditTrailChange.ts +22 -0
- package/src/loanRetailAudit/dtos/AuditTrailContextEntry.ts +14 -0
- package/src/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.ts +64 -0
- package/src/loanRetailAudit/dtos/requests/ListAuditTrailQuery.ts +35 -0
- package/src/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.ts +4 -0
- package/src/loanRetailAudit/dtos/responses/ListAuditTrailResponse.ts +31 -0
- package/src/loanRetailAudit/enums/AuditTrailActionEnum.ts +39 -0
- package/src/loanRetailAudit/enums/LoanAuditEntityTypeEnum.ts +12 -0
- package/src/loanRetailAudit/enums/PiiAccessActionEnum.ts +5 -0
- package/src/loanRetailAudit/enums/PiiResourceTypeEnum.ts +9 -0
- package/src/loanRetailAudit/enums/RetailAuditEntityTypeEnum.ts +17 -0
- package/src/loanRetailAudit/events/AuditTrailRecordedV1.ts +70 -0
- package/src/loanRetailAudit/index.ts +20 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PiiResourceTypeEnum = void 0;
|
|
4
|
+
/** Tipo de recurso con PII; arma la pk `RESOURCE#<tipo>#<id>` de `SharedPiiAccessLog`. */
|
|
5
|
+
var PiiResourceTypeEnum;
|
|
6
|
+
(function (PiiResourceTypeEnum) {
|
|
7
|
+
PiiResourceTypeEnum["RETAIL_CUSTOMER"] = "RETAIL_CUSTOMER";
|
|
8
|
+
PiiResourceTypeEnum["RETAIL_USER"] = "RETAIL_USER";
|
|
9
|
+
PiiResourceTypeEnum["RETAILER"] = "RETAILER";
|
|
10
|
+
PiiResourceTypeEnum["SALE"] = "SALE";
|
|
11
|
+
PiiResourceTypeEnum["PROSPECT"] = "PROSPECT";
|
|
12
|
+
PiiResourceTypeEnum["LOAN_PAYMENT"] = "LOAN_PAYMENT";
|
|
13
|
+
})(PiiResourceTypeEnum || (exports.PiiResourceTypeEnum = PiiResourceTypeEnum = {}));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** `entityType` de bitácora que escriben los lambdas Retail (customer, org, wizard, commission). */
|
|
2
|
+
export declare enum RetailAuditEntityTypeEnum {
|
|
3
|
+
CUSTOMER = "CUSTOMER",
|
|
4
|
+
RETAILER = "RETAILER",
|
|
5
|
+
STORE = "STORE",
|
|
6
|
+
RETAIL_USER = "RETAIL_USER",
|
|
7
|
+
GOAL = "GOAL",
|
|
8
|
+
WIZARD_SESSION = "WIZARD_SESSION",
|
|
9
|
+
SALE = "SALE",
|
|
10
|
+
SALE_EXCEPTION = "SALE_EXCEPTION",
|
|
11
|
+
REPORT_RUN = "REPORT_RUN",
|
|
12
|
+
COMMISSION_PLAN = "COMMISSION_PLAN",
|
|
13
|
+
COMMISSION_PAYOUT = "COMMISSION_PAYOUT",
|
|
14
|
+
COMMISSION_ADJUSTMENT = "COMMISSION_ADJUSTMENT",
|
|
15
|
+
COMMISSION_RULE = "COMMISSION_RULE",
|
|
16
|
+
COMMISSION_POLICY = "COMMISSION_POLICY"
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RetailAuditEntityTypeEnum = void 0;
|
|
4
|
+
/** `entityType` de bitácora que escriben los lambdas Retail (customer, org, wizard, commission). */
|
|
5
|
+
var RetailAuditEntityTypeEnum;
|
|
6
|
+
(function (RetailAuditEntityTypeEnum) {
|
|
7
|
+
RetailAuditEntityTypeEnum["CUSTOMER"] = "CUSTOMER";
|
|
8
|
+
RetailAuditEntityTypeEnum["RETAILER"] = "RETAILER";
|
|
9
|
+
RetailAuditEntityTypeEnum["STORE"] = "STORE";
|
|
10
|
+
RetailAuditEntityTypeEnum["RETAIL_USER"] = "RETAIL_USER";
|
|
11
|
+
RetailAuditEntityTypeEnum["GOAL"] = "GOAL";
|
|
12
|
+
RetailAuditEntityTypeEnum["WIZARD_SESSION"] = "WIZARD_SESSION";
|
|
13
|
+
RetailAuditEntityTypeEnum["SALE"] = "SALE";
|
|
14
|
+
RetailAuditEntityTypeEnum["SALE_EXCEPTION"] = "SALE_EXCEPTION";
|
|
15
|
+
RetailAuditEntityTypeEnum["REPORT_RUN"] = "REPORT_RUN";
|
|
16
|
+
RetailAuditEntityTypeEnum["COMMISSION_PLAN"] = "COMMISSION_PLAN";
|
|
17
|
+
RetailAuditEntityTypeEnum["COMMISSION_PAYOUT"] = "COMMISSION_PAYOUT";
|
|
18
|
+
RetailAuditEntityTypeEnum["COMMISSION_ADJUSTMENT"] = "COMMISSION_ADJUSTMENT";
|
|
19
|
+
RetailAuditEntityTypeEnum["COMMISSION_RULE"] = "COMMISSION_RULE";
|
|
20
|
+
RetailAuditEntityTypeEnum["COMMISSION_POLICY"] = "COMMISSION_POLICY";
|
|
21
|
+
})(RetailAuditEntityTypeEnum || (exports.RetailAuditEntityTypeEnum = RetailAuditEntityTypeEnum = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuditTrailEntityType } from '../constants/auditTrailEntityTypes';
|
|
2
|
+
import { AuditTrailChange } from '../dtos/AuditTrailChange';
|
|
3
|
+
import { AuditTrailContextEntry } from '../dtos/AuditTrailContextEntry';
|
|
4
|
+
import { AuditTrailActionEnum } from '../enums/AuditTrailActionEnum';
|
|
5
|
+
/** Mensaje de la cola `LoanRetailAuditQueue`; el central lo guarda una sola vez por `eventId`. */
|
|
6
|
+
export declare class AuditTrailRecordedV1 {
|
|
7
|
+
eventId: string;
|
|
8
|
+
entityType: AuditTrailEntityType;
|
|
9
|
+
entityId: string;
|
|
10
|
+
action: AuditTrailActionEnum;
|
|
11
|
+
changes: AuditTrailChange[];
|
|
12
|
+
context: AuditTrailContextEntry[];
|
|
13
|
+
/** userId del actor, o `system` si lo disparó un proceso interno. */
|
|
14
|
+
performedBy: string;
|
|
15
|
+
sourceLambda: string;
|
|
16
|
+
occurredAt: string;
|
|
17
|
+
tenantId?: string;
|
|
18
|
+
reason?: string;
|
|
19
|
+
ip?: string;
|
|
20
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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.AuditTrailRecordedV1 = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const auditTrailEntityTypes_1 = require("../constants/auditTrailEntityTypes");
|
|
16
|
+
const AuditTrailChange_1 = require("../dtos/AuditTrailChange");
|
|
17
|
+
const AuditTrailContextEntry_1 = require("../dtos/AuditTrailContextEntry");
|
|
18
|
+
const AuditTrailActionEnum_1 = require("../enums/AuditTrailActionEnum");
|
|
19
|
+
/** Mensaje de la cola `LoanRetailAuditQueue`; el central lo guarda una sola vez por `eventId`. */
|
|
20
|
+
class AuditTrailRecordedV1 {
|
|
21
|
+
}
|
|
22
|
+
exports.AuditTrailRecordedV1 = AuditTrailRecordedV1;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Expose)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], AuditTrailRecordedV1.prototype, "eventId", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
(0, class_validator_1.IsIn)(auditTrailEntityTypes_1.AUDIT_TRAIL_ENTITY_TYPES),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], AuditTrailRecordedV1.prototype, "entityType", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_transformer_1.Expose)(),
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], AuditTrailRecordedV1.prototype, "entityId", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
(0, class_validator_1.IsEnum)(AuditTrailActionEnum_1.AuditTrailActionEnum),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], AuditTrailRecordedV1.prototype, "action", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_transformer_1.Expose)(),
|
|
47
|
+
(0, class_validator_1.IsArray)(),
|
|
48
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
49
|
+
(0, class_transformer_1.Type)(() => AuditTrailChange_1.AuditTrailChange),
|
|
50
|
+
__metadata("design:type", Array)
|
|
51
|
+
], AuditTrailRecordedV1.prototype, "changes", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_transformer_1.Expose)(),
|
|
54
|
+
(0, class_validator_1.IsArray)(),
|
|
55
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
56
|
+
(0, class_transformer_1.Type)(() => AuditTrailContextEntry_1.AuditTrailContextEntry),
|
|
57
|
+
__metadata("design:type", Array)
|
|
58
|
+
], AuditTrailRecordedV1.prototype, "context", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, class_transformer_1.Expose)(),
|
|
61
|
+
(0, class_validator_1.IsString)(),
|
|
62
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
63
|
+
__metadata("design:type", String)
|
|
64
|
+
], AuditTrailRecordedV1.prototype, "performedBy", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, class_transformer_1.Expose)(),
|
|
67
|
+
(0, class_validator_1.IsString)(),
|
|
68
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
69
|
+
__metadata("design:type", String)
|
|
70
|
+
], AuditTrailRecordedV1.prototype, "sourceLambda", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, class_transformer_1.Expose)(),
|
|
73
|
+
(0, class_validator_1.IsISO8601)(),
|
|
74
|
+
__metadata("design:type", String)
|
|
75
|
+
], AuditTrailRecordedV1.prototype, "occurredAt", void 0);
|
|
76
|
+
__decorate([
|
|
77
|
+
(0, class_transformer_1.Expose)(),
|
|
78
|
+
(0, class_validator_1.IsOptional)(),
|
|
79
|
+
(0, class_validator_1.IsString)(),
|
|
80
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
81
|
+
__metadata("design:type", String)
|
|
82
|
+
], AuditTrailRecordedV1.prototype, "tenantId", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, class_transformer_1.Expose)(),
|
|
85
|
+
(0, class_validator_1.IsOptional)(),
|
|
86
|
+
(0, class_validator_1.IsString)(),
|
|
87
|
+
__metadata("design:type", String)
|
|
88
|
+
], AuditTrailRecordedV1.prototype, "reason", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
(0, class_transformer_1.Expose)(),
|
|
91
|
+
(0, class_validator_1.IsOptional)(),
|
|
92
|
+
(0, class_validator_1.IsString)(),
|
|
93
|
+
__metadata("design:type", String)
|
|
94
|
+
], AuditTrailRecordedV1.prototype, "ip", void 0);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './enums/LoanAuditEntityTypeEnum';
|
|
2
|
+
export * from './enums/RetailAuditEntityTypeEnum';
|
|
3
|
+
export * from './enums/AuditTrailActionEnum';
|
|
4
|
+
export * from './enums/PiiResourceTypeEnum';
|
|
5
|
+
export * from './enums/PiiAccessActionEnum';
|
|
6
|
+
export * from './constants/auditTrailEntityTypes';
|
|
7
|
+
export * from './dtos/AuditTrailChange';
|
|
8
|
+
export * from './dtos/AuditTrailContextEntry';
|
|
9
|
+
export * from './dtos/requests/CreatePiiAccessLogRequest';
|
|
10
|
+
export * from './dtos/requests/ListAuditTrailQuery';
|
|
11
|
+
export * from './dtos/responses/CreatePiiAccessLogResponse';
|
|
12
|
+
export * from './dtos/responses/ListAuditTrailResponse';
|
|
13
|
+
export * from './events/AuditTrailRecordedV1';
|
|
@@ -0,0 +1,33 @@
|
|
|
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/LoanAuditEntityTypeEnum"), exports);
|
|
19
|
+
__exportStar(require("./enums/RetailAuditEntityTypeEnum"), exports);
|
|
20
|
+
__exportStar(require("./enums/AuditTrailActionEnum"), exports);
|
|
21
|
+
__exportStar(require("./enums/PiiResourceTypeEnum"), exports);
|
|
22
|
+
__exportStar(require("./enums/PiiAccessActionEnum"), exports);
|
|
23
|
+
// Constantes
|
|
24
|
+
__exportStar(require("./constants/auditTrailEntityTypes"), exports);
|
|
25
|
+
// DTOs
|
|
26
|
+
__exportStar(require("./dtos/AuditTrailChange"), exports);
|
|
27
|
+
__exportStar(require("./dtos/AuditTrailContextEntry"), exports);
|
|
28
|
+
__exportStar(require("./dtos/requests/CreatePiiAccessLogRequest"), exports);
|
|
29
|
+
__exportStar(require("./dtos/requests/ListAuditTrailQuery"), exports);
|
|
30
|
+
__exportStar(require("./dtos/responses/CreatePiiAccessLogResponse"), exports);
|
|
31
|
+
__exportStar(require("./dtos/responses/ListAuditTrailResponse"), exports);
|
|
32
|
+
// Contratos de eventos
|
|
33
|
+
__exportStar(require("./events/AuditTrailRecordedV1"), exports);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -217,3 +217,7 @@ export * as PdfRender from './pdfRender';
|
|
|
217
217
|
|
|
218
218
|
// Rules: DTOs del lambda central rules-business (catálogo, validación, generación con IA y evaluación de reglas).
|
|
219
219
|
export * as Rules from './rules';
|
|
220
|
+
|
|
221
|
+
// LoanRetailAudit: contrato del lambda central loan-retail-audit-business (bitácora y accesos a PII
|
|
222
|
+
// de Loan y Retail): mensaje de su cola, POST /private/pii-access-logs y GET /private/audit-trail.
|
|
223
|
+
export * as LoanRetailAudit from './loanRetailAudit';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LoanAuditEntityTypeEnum } from '../enums/LoanAuditEntityTypeEnum';
|
|
2
|
+
import { RetailAuditEntityTypeEnum } from '../enums/RetailAuditEntityTypeEnum';
|
|
3
|
+
|
|
4
|
+
/** Cualquier `entityType` que acepta el central, de Loan o de Retail. */
|
|
5
|
+
export type AuditTrailEntityType = LoanAuditEntityTypeEnum | RetailAuditEntityTypeEnum;
|
|
6
|
+
|
|
7
|
+
export const AUDIT_TRAIL_ENTITY_TYPES: readonly AuditTrailEntityType[] = [
|
|
8
|
+
...Object.values(LoanAuditEntityTypeEnum),
|
|
9
|
+
...Object.values(RetailAuditEntityTypeEnum),
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
export const AUDIT_TRAIL_MAX_PAGE_SIZE = 100;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/** Un campo que cambió; los valores van serializados a string y nunca llevan PII. */
|
|
5
|
+
export class AuditTrailChange {
|
|
6
|
+
@Expose()
|
|
7
|
+
@IsString()
|
|
8
|
+
@IsNotEmpty()
|
|
9
|
+
field!: string;
|
|
10
|
+
|
|
11
|
+
/** Ausente en un alta. */
|
|
12
|
+
@Expose()
|
|
13
|
+
@IsOptional()
|
|
14
|
+
@IsString()
|
|
15
|
+
oldValue?: string;
|
|
16
|
+
|
|
17
|
+
/** Ausente en una baja. */
|
|
18
|
+
@Expose()
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsString()
|
|
21
|
+
newValue?: string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsNotEmpty, IsString } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/** Dato que la acción no cambió y se guarda para leer la entrada sin abrir otra pantalla. */
|
|
5
|
+
export class AuditTrailContextEntry {
|
|
6
|
+
@Expose()
|
|
7
|
+
@IsString()
|
|
8
|
+
@IsNotEmpty()
|
|
9
|
+
key!: string;
|
|
10
|
+
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsString()
|
|
13
|
+
value!: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { ArrayNotEmpty, IsArray, IsEnum, IsISO8601, IsNotEmpty, IsOptional, IsString } from 'class-validator';
|
|
3
|
+
import { PiiAccessActionEnum } from '../../enums/PiiAccessActionEnum';
|
|
4
|
+
import { PiiResourceTypeEnum } from '../../enums/PiiResourceTypeEnum';
|
|
5
|
+
|
|
6
|
+
/** Body de `POST /private/pii-access-logs` (privateCreatePiiAccessLog); el tenant va en `?tenantId=`. */
|
|
7
|
+
export class CreatePiiAccessLogRequest {
|
|
8
|
+
/** ULID generado por quien llama; con `occurredAt` forma el sk, así un reintento no duplica. */
|
|
9
|
+
@Expose()
|
|
10
|
+
@IsString()
|
|
11
|
+
@IsNotEmpty()
|
|
12
|
+
accessId!: string;
|
|
13
|
+
|
|
14
|
+
@Expose()
|
|
15
|
+
@IsISO8601()
|
|
16
|
+
occurredAt!: string;
|
|
17
|
+
|
|
18
|
+
@Expose()
|
|
19
|
+
@IsString()
|
|
20
|
+
@IsNotEmpty()
|
|
21
|
+
correlationId!: string;
|
|
22
|
+
|
|
23
|
+
@Expose()
|
|
24
|
+
@IsString()
|
|
25
|
+
@IsNotEmpty()
|
|
26
|
+
actorId!: string;
|
|
27
|
+
|
|
28
|
+
@Expose()
|
|
29
|
+
@IsString()
|
|
30
|
+
@IsNotEmpty()
|
|
31
|
+
sourceLambda!: string;
|
|
32
|
+
|
|
33
|
+
@Expose()
|
|
34
|
+
@IsString()
|
|
35
|
+
@IsNotEmpty()
|
|
36
|
+
operationName!: string;
|
|
37
|
+
|
|
38
|
+
@Expose()
|
|
39
|
+
@IsEnum(PiiAccessActionEnum)
|
|
40
|
+
action!: PiiAccessActionEnum;
|
|
41
|
+
|
|
42
|
+
@Expose()
|
|
43
|
+
@IsEnum(PiiResourceTypeEnum)
|
|
44
|
+
resourceType!: PiiResourceTypeEnum;
|
|
45
|
+
|
|
46
|
+
/** Id del recurso, o `(list)` en un listado con los ids en `resourceIds`. */
|
|
47
|
+
@Expose()
|
|
48
|
+
@IsString()
|
|
49
|
+
@IsNotEmpty()
|
|
50
|
+
resourceId!: string;
|
|
51
|
+
|
|
52
|
+
/** Nombres de los campos PII que viajaron; nunca sus valores. */
|
|
53
|
+
@Expose()
|
|
54
|
+
@IsArray()
|
|
55
|
+
@ArrayNotEmpty()
|
|
56
|
+
@IsString({ each: true })
|
|
57
|
+
fields!: string[];
|
|
58
|
+
|
|
59
|
+
@Expose()
|
|
60
|
+
@IsOptional()
|
|
61
|
+
@IsArray()
|
|
62
|
+
@IsString({ each: true })
|
|
63
|
+
resourceIds?: string[];
|
|
64
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Expose, Type } from 'class-transformer';
|
|
2
|
+
import { IsEnum, IsIn, IsInt, IsNotEmpty, IsOptional, IsString, Max, Min } from 'class-validator';
|
|
3
|
+
import { SortDirEnum } from '../../../passport/enums/SortDirEnum';
|
|
4
|
+
import { AUDIT_TRAIL_ENTITY_TYPES, AUDIT_TRAIL_MAX_PAGE_SIZE, AuditTrailEntityType } from '../../constants/auditTrailEntityTypes';
|
|
5
|
+
|
|
6
|
+
/** Query de `GET /private/audit-trail` (privateListAuditTrail): bitácora de una entidad, paginada por sk. */
|
|
7
|
+
export class ListAuditTrailQuery {
|
|
8
|
+
@Expose()
|
|
9
|
+
@IsIn(AUDIT_TRAIL_ENTITY_TYPES)
|
|
10
|
+
entityType!: AuditTrailEntityType;
|
|
11
|
+
|
|
12
|
+
@Expose()
|
|
13
|
+
@IsString()
|
|
14
|
+
@IsNotEmpty()
|
|
15
|
+
entityId!: string;
|
|
16
|
+
|
|
17
|
+
/** Por default `desc`, lo más reciente primero. */
|
|
18
|
+
@Expose()
|
|
19
|
+
@IsOptional()
|
|
20
|
+
@IsEnum(SortDirEnum)
|
|
21
|
+
order?: SortDirEnum;
|
|
22
|
+
|
|
23
|
+
@Expose()
|
|
24
|
+
@IsOptional()
|
|
25
|
+
@Type(() => Number)
|
|
26
|
+
@IsInt()
|
|
27
|
+
@Min(1)
|
|
28
|
+
@Max(AUDIT_TRAIL_MAX_PAGE_SIZE)
|
|
29
|
+
limit?: number;
|
|
30
|
+
|
|
31
|
+
@Expose()
|
|
32
|
+
@IsOptional()
|
|
33
|
+
@IsString()
|
|
34
|
+
nextToken?: string;
|
|
35
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AuditTrailEntityType } from '../../constants/auditTrailEntityTypes';
|
|
2
|
+
import { AuditTrailActionEnum } from '../../enums/AuditTrailActionEnum';
|
|
3
|
+
|
|
4
|
+
/** Un campo que cambió, como lo devuelve la lectura. */
|
|
5
|
+
export interface AuditTrailChangeView {
|
|
6
|
+
field: string;
|
|
7
|
+
oldValue: string | null;
|
|
8
|
+
newValue: string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Una entrada de la bitácora; `eventId` y `sourceLambda` son `null` en filas Loan de forma vieja. */
|
|
12
|
+
export interface AuditTrailEntry {
|
|
13
|
+
eventId: string | null;
|
|
14
|
+
sourceLambda: string | null;
|
|
15
|
+
entityType: AuditTrailEntityType;
|
|
16
|
+
entityId: string;
|
|
17
|
+
tenantId: string | null;
|
|
18
|
+
action: AuditTrailActionEnum;
|
|
19
|
+
performedBy: string;
|
|
20
|
+
reason: string | null;
|
|
21
|
+
ip: string | null;
|
|
22
|
+
changes: AuditTrailChangeView[];
|
|
23
|
+
context: { key: string; value: string }[];
|
|
24
|
+
occurredAt: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Página de privateListAuditTrail; `nextToken` es `null` en la última. */
|
|
28
|
+
export interface ListAuditTrailResponse {
|
|
29
|
+
items: AuditTrailEntry[];
|
|
30
|
+
nextToken: string | null;
|
|
31
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Acción auditada en `SharedAuditTrail`; une las de Loan y Retail. */
|
|
2
|
+
export enum AuditTrailActionEnum {
|
|
3
|
+
CREATE = 'CREATE',
|
|
4
|
+
UPDATE = 'UPDATE',
|
|
5
|
+
DELETE = 'DELETE',
|
|
6
|
+
UPSERT = 'UPSERT',
|
|
7
|
+
STATUS_CHANGE = 'STATUS_CHANGE',
|
|
8
|
+
TRANSFER = 'TRANSFER',
|
|
9
|
+
KYC_VERIFIED = 'KYC_VERIFIED',
|
|
10
|
+
KYC_REVIEW = 'KYC_REVIEW',
|
|
11
|
+
ACCOUNT_RESULT = 'ACCOUNT_RESULT',
|
|
12
|
+
WELCOME_ACCREDITED = 'WELCOME_ACCREDITED',
|
|
13
|
+
WELCOME_ACCREDITATION_RESULT = 'WELCOME_ACCREDITATION_RESULT',
|
|
14
|
+
WELCOME_ACCREDITATION_RECONCILED = 'WELCOME_ACCREDITATION_RECONCILED',
|
|
15
|
+
SESSION_CREATE = 'SESSION_CREATE',
|
|
16
|
+
STEP_ADVANCE = 'STEP_ADVANCE',
|
|
17
|
+
OTP_SKIP = 'OTP_SKIP',
|
|
18
|
+
SESSION_RESUME = 'SESSION_RESUME',
|
|
19
|
+
SESSION_CANCEL = 'SESSION_CANCEL',
|
|
20
|
+
SESSION_CREDIT_ENABLED = 'SESSION_CREDIT_ENABLED',
|
|
21
|
+
PAYMENT_REGISTERED = 'PAYMENT_REGISTERED',
|
|
22
|
+
SALE_COMPLETE = 'SALE_COMPLETE',
|
|
23
|
+
SALE_CANCEL = 'SALE_CANCEL',
|
|
24
|
+
SALE_CARD_DELIVERED = 'SALE_CARD_DELIVERED',
|
|
25
|
+
KYC_CONFIRM = 'KYC_CONFIRM',
|
|
26
|
+
COMPLIANCE_VERDICT = 'COMPLIANCE_VERDICT',
|
|
27
|
+
EXCEPTION_CREATE = 'EXCEPTION_CREATE',
|
|
28
|
+
EXCEPTION_REVIEW = 'EXCEPTION_REVIEW',
|
|
29
|
+
EXCEPTION_RESOLVE = 'EXCEPTION_RESOLVE',
|
|
30
|
+
EXCEPTION_APPLY = 'EXCEPTION_APPLY',
|
|
31
|
+
EXCEPTION_NOTE = 'EXCEPTION_NOTE',
|
|
32
|
+
REPORT_RUN_REQUEST = 'REPORT_RUN_REQUEST',
|
|
33
|
+
PUBLISH = 'PUBLISH',
|
|
34
|
+
CLOSE = 'CLOSE',
|
|
35
|
+
ADJUST = 'ADJUST',
|
|
36
|
+
PAUSE = 'PAUSE',
|
|
37
|
+
RESUME = 'RESUME',
|
|
38
|
+
EXPIRE = 'EXPIRE',
|
|
39
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** `entityType` de bitácora que escriben los lambdas Loan; los valores son los que ya están en la pk. */
|
|
2
|
+
export enum LoanAuditEntityTypeEnum {
|
|
3
|
+
CREDIT = 'CREDIT',
|
|
4
|
+
INSTALLMENT = 'INSTALLMENT',
|
|
5
|
+
RESTRUCTURE = 'RESTRUCTURE',
|
|
6
|
+
CREDIT_PLAN = 'CREDIT_PLAN',
|
|
7
|
+
STORE_POLICY = 'STORE_POLICY',
|
|
8
|
+
SEGMENT = 'SEGMENT',
|
|
9
|
+
LOAN_PARAMETER = 'LoanParameter',
|
|
10
|
+
LOAN_ASSIGNMENT_RULE = 'LoanAssignmentRule',
|
|
11
|
+
LOAN_COLLECTOR_ASSIGNMENT = 'LoanCollectorAssignment',
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Tipo de recurso con PII; arma la pk `RESOURCE#<tipo>#<id>` de `SharedPiiAccessLog`. */
|
|
2
|
+
export enum PiiResourceTypeEnum {
|
|
3
|
+
RETAIL_CUSTOMER = 'RETAIL_CUSTOMER',
|
|
4
|
+
RETAIL_USER = 'RETAIL_USER',
|
|
5
|
+
RETAILER = 'RETAILER',
|
|
6
|
+
SALE = 'SALE',
|
|
7
|
+
PROSPECT = 'PROSPECT',
|
|
8
|
+
LOAN_PAYMENT = 'LOAN_PAYMENT',
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** `entityType` de bitácora que escriben los lambdas Retail (customer, org, wizard, commission). */
|
|
2
|
+
export enum RetailAuditEntityTypeEnum {
|
|
3
|
+
CUSTOMER = 'CUSTOMER',
|
|
4
|
+
RETAILER = 'RETAILER',
|
|
5
|
+
STORE = 'STORE',
|
|
6
|
+
RETAIL_USER = 'RETAIL_USER',
|
|
7
|
+
GOAL = 'GOAL',
|
|
8
|
+
WIZARD_SESSION = 'WIZARD_SESSION',
|
|
9
|
+
SALE = 'SALE',
|
|
10
|
+
SALE_EXCEPTION = 'SALE_EXCEPTION',
|
|
11
|
+
REPORT_RUN = 'REPORT_RUN',
|
|
12
|
+
COMMISSION_PLAN = 'COMMISSION_PLAN',
|
|
13
|
+
COMMISSION_PAYOUT = 'COMMISSION_PAYOUT',
|
|
14
|
+
COMMISSION_ADJUSTMENT = 'COMMISSION_ADJUSTMENT',
|
|
15
|
+
COMMISSION_RULE = 'COMMISSION_RULE',
|
|
16
|
+
COMMISSION_POLICY = 'COMMISSION_POLICY',
|
|
17
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Expose, Type } from 'class-transformer';
|
|
2
|
+
import { IsArray, IsIn, IsEnum, IsISO8601, IsNotEmpty, IsOptional, IsString, ValidateNested } from 'class-validator';
|
|
3
|
+
import { AUDIT_TRAIL_ENTITY_TYPES, AuditTrailEntityType } from '../constants/auditTrailEntityTypes';
|
|
4
|
+
import { AuditTrailChange } from '../dtos/AuditTrailChange';
|
|
5
|
+
import { AuditTrailContextEntry } from '../dtos/AuditTrailContextEntry';
|
|
6
|
+
import { AuditTrailActionEnum } from '../enums/AuditTrailActionEnum';
|
|
7
|
+
|
|
8
|
+
/** Mensaje de la cola `LoanRetailAuditQueue`; el central lo guarda una sola vez por `eventId`. */
|
|
9
|
+
export class AuditTrailRecordedV1 {
|
|
10
|
+
@Expose()
|
|
11
|
+
@IsString()
|
|
12
|
+
@IsNotEmpty()
|
|
13
|
+
eventId!: string;
|
|
14
|
+
|
|
15
|
+
@Expose()
|
|
16
|
+
@IsIn(AUDIT_TRAIL_ENTITY_TYPES)
|
|
17
|
+
entityType!: AuditTrailEntityType;
|
|
18
|
+
|
|
19
|
+
@Expose()
|
|
20
|
+
@IsString()
|
|
21
|
+
@IsNotEmpty()
|
|
22
|
+
entityId!: string;
|
|
23
|
+
|
|
24
|
+
@Expose()
|
|
25
|
+
@IsEnum(AuditTrailActionEnum)
|
|
26
|
+
action!: AuditTrailActionEnum;
|
|
27
|
+
|
|
28
|
+
@Expose()
|
|
29
|
+
@IsArray()
|
|
30
|
+
@ValidateNested({ each: true })
|
|
31
|
+
@Type(() => AuditTrailChange)
|
|
32
|
+
changes!: AuditTrailChange[];
|
|
33
|
+
|
|
34
|
+
@Expose()
|
|
35
|
+
@IsArray()
|
|
36
|
+
@ValidateNested({ each: true })
|
|
37
|
+
@Type(() => AuditTrailContextEntry)
|
|
38
|
+
context!: AuditTrailContextEntry[];
|
|
39
|
+
|
|
40
|
+
/** userId del actor, o `system` si lo disparó un proceso interno. */
|
|
41
|
+
@Expose()
|
|
42
|
+
@IsString()
|
|
43
|
+
@IsNotEmpty()
|
|
44
|
+
performedBy!: string;
|
|
45
|
+
|
|
46
|
+
@Expose()
|
|
47
|
+
@IsString()
|
|
48
|
+
@IsNotEmpty()
|
|
49
|
+
sourceLambda!: string;
|
|
50
|
+
|
|
51
|
+
@Expose()
|
|
52
|
+
@IsISO8601()
|
|
53
|
+
occurredAt!: string;
|
|
54
|
+
|
|
55
|
+
@Expose()
|
|
56
|
+
@IsOptional()
|
|
57
|
+
@IsString()
|
|
58
|
+
@IsNotEmpty()
|
|
59
|
+
tenantId?: string;
|
|
60
|
+
|
|
61
|
+
@Expose()
|
|
62
|
+
@IsOptional()
|
|
63
|
+
@IsString()
|
|
64
|
+
reason?: string;
|
|
65
|
+
|
|
66
|
+
@Expose()
|
|
67
|
+
@IsOptional()
|
|
68
|
+
@IsString()
|
|
69
|
+
ip?: string;
|
|
70
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Enums
|
|
2
|
+
export * from './enums/LoanAuditEntityTypeEnum';
|
|
3
|
+
export * from './enums/RetailAuditEntityTypeEnum';
|
|
4
|
+
export * from './enums/AuditTrailActionEnum';
|
|
5
|
+
export * from './enums/PiiResourceTypeEnum';
|
|
6
|
+
export * from './enums/PiiAccessActionEnum';
|
|
7
|
+
|
|
8
|
+
// Constantes
|
|
9
|
+
export * from './constants/auditTrailEntityTypes';
|
|
10
|
+
|
|
11
|
+
// DTOs
|
|
12
|
+
export * from './dtos/AuditTrailChange';
|
|
13
|
+
export * from './dtos/AuditTrailContextEntry';
|
|
14
|
+
export * from './dtos/requests/CreatePiiAccessLogRequest';
|
|
15
|
+
export * from './dtos/requests/ListAuditTrailQuery';
|
|
16
|
+
export * from './dtos/responses/CreatePiiAccessLogResponse';
|
|
17
|
+
export * from './dtos/responses/ListAuditTrailResponse';
|
|
18
|
+
|
|
19
|
+
// Contratos de eventos
|
|
20
|
+
export * from './events/AuditTrailRecordedV1';
|