@fiado/type-kit 3.544.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.
Files changed (70) hide show
  1. package/_test_/unit/loanCredit/devicePostureBackfillDtos.test.ts +39 -0
  2. package/_test_/unit/loanCredit/reconcileModeDtos.test.ts +48 -0
  3. package/_test_/unit/loanRetailAudit/loanRetailAuditContracts.test.ts +139 -0
  4. package/_test_/unit/mdm/dtos/deviceStatusLockSchedule.test.ts +46 -0
  5. package/bin/index.d.ts +1 -0
  6. package/bin/index.js +4 -1
  7. package/bin/loanCredit/dtos/requests/RunDevicePostureBackfillRequest.d.ts +9 -0
  8. package/bin/loanCredit/dtos/requests/RunDevicePostureBackfillRequest.js +42 -0
  9. package/bin/loanCredit/dtos/requests/UpdateReconcileModeRequest.d.ts +9 -0
  10. package/bin/loanCredit/dtos/requests/UpdateReconcileModeRequest.js +42 -0
  11. package/bin/loanCredit/dtos/responses/DevicePostureBackfillResult.d.ts +12 -0
  12. package/bin/loanCredit/dtos/responses/DevicePostureBackfillResult.js +2 -0
  13. package/bin/loanCredit/dtos/responses/ReconcileModeView.d.ts +11 -0
  14. package/bin/loanCredit/dtos/responses/ReconcileModeView.js +2 -0
  15. package/bin/loanCredit/enums/ReconcileModeEnum.d.ts +5 -0
  16. package/bin/loanCredit/enums/ReconcileModeEnum.js +9 -0
  17. package/bin/loanCredit/index.d.ts +5 -0
  18. package/bin/loanCredit/index.js +6 -0
  19. package/bin/loanRetailAudit/constants/auditTrailEntityTypes.d.ts +6 -0
  20. package/bin/loanRetailAudit/constants/auditTrailEntityTypes.js +10 -0
  21. package/bin/loanRetailAudit/dtos/AuditTrailChange.d.ts +8 -0
  22. package/bin/loanRetailAudit/dtos/AuditTrailChange.js +36 -0
  23. package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.d.ts +5 -0
  24. package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.js +29 -0
  25. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.d.ts +19 -0
  26. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.js +85 -0
  27. package/bin/loanRetailAudit/dtos/requests/ListAuditTrailQuery.d.ts +11 -0
  28. package/bin/loanRetailAudit/dtos/requests/ListAuditTrailQuery.js +52 -0
  29. package/bin/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.d.ts +4 -0
  30. package/bin/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.js +2 -0
  31. package/bin/loanRetailAudit/dtos/responses/ListAuditTrailResponse.d.ts +31 -0
  32. package/bin/loanRetailAudit/dtos/responses/ListAuditTrailResponse.js +2 -0
  33. package/bin/loanRetailAudit/enums/AuditTrailActionEnum.d.ts +39 -0
  34. package/bin/loanRetailAudit/enums/AuditTrailActionEnum.js +43 -0
  35. package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.d.ts +12 -0
  36. package/bin/loanRetailAudit/enums/LoanAuditEntityTypeEnum.js +16 -0
  37. package/bin/loanRetailAudit/enums/PiiAccessActionEnum.d.ts +5 -0
  38. package/bin/loanRetailAudit/enums/PiiAccessActionEnum.js +9 -0
  39. package/bin/loanRetailAudit/enums/PiiResourceTypeEnum.d.ts +9 -0
  40. package/bin/loanRetailAudit/enums/PiiResourceTypeEnum.js +13 -0
  41. package/bin/loanRetailAudit/enums/RetailAuditEntityTypeEnum.d.ts +17 -0
  42. package/bin/loanRetailAudit/enums/RetailAuditEntityTypeEnum.js +21 -0
  43. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.d.ts +20 -0
  44. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.js +94 -0
  45. package/bin/loanRetailAudit/index.d.ts +13 -0
  46. package/bin/loanRetailAudit/index.js +33 -0
  47. package/bin/mdm/dtos/DeviceStatusResponse.d.ts +4 -0
  48. package/package.json +1 -1
  49. package/src/index.ts +4 -0
  50. package/src/loanCredit/dtos/requests/RunDevicePostureBackfillRequest.ts +27 -0
  51. package/src/loanCredit/dtos/requests/UpdateReconcileModeRequest.ts +26 -0
  52. package/src/loanCredit/dtos/responses/DevicePostureBackfillResult.ts +12 -0
  53. package/src/loanCredit/dtos/responses/ReconcileModeView.ts +12 -0
  54. package/src/loanCredit/enums/ReconcileModeEnum.ts +5 -0
  55. package/src/loanCredit/index.ts +7 -0
  56. package/src/loanRetailAudit/constants/auditTrailEntityTypes.ts +12 -0
  57. package/src/loanRetailAudit/dtos/AuditTrailChange.ts +22 -0
  58. package/src/loanRetailAudit/dtos/AuditTrailContextEntry.ts +14 -0
  59. package/src/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.ts +64 -0
  60. package/src/loanRetailAudit/dtos/requests/ListAuditTrailQuery.ts +35 -0
  61. package/src/loanRetailAudit/dtos/responses/CreatePiiAccessLogResponse.ts +4 -0
  62. package/src/loanRetailAudit/dtos/responses/ListAuditTrailResponse.ts +31 -0
  63. package/src/loanRetailAudit/enums/AuditTrailActionEnum.ts +39 -0
  64. package/src/loanRetailAudit/enums/LoanAuditEntityTypeEnum.ts +12 -0
  65. package/src/loanRetailAudit/enums/PiiAccessActionEnum.ts +5 -0
  66. package/src/loanRetailAudit/enums/PiiResourceTypeEnum.ts +9 -0
  67. package/src/loanRetailAudit/enums/RetailAuditEntityTypeEnum.ts +17 -0
  68. package/src/loanRetailAudit/events/AuditTrailRecordedV1.ts +70 -0
  69. package/src/loanRetailAudit/index.ts +20 -0
  70. package/src/mdm/dtos/DeviceStatusResponse.ts +4 -0
@@ -0,0 +1,39 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import { DevicePostureBackfillResult, RunDevicePostureBackfillRequest } from '../../../src/loanCredit/index';
5
+
6
+ const valid = { dryRun: true, requestedBy: 'andres@somosfiado.com', reason: 'F3: backfill en prod' };
7
+
8
+ describe('RunDevicePostureBackfillRequest', () => {
9
+ it('valida el dry-run y la corrida real', async () => {
10
+ for (const dryRun of [true, false]) {
11
+ expect(await validate(plainToInstance(RunDevicePostureBackfillRequest, { ...valid, dryRun }))).toEqual([]);
12
+ }
13
+ });
14
+
15
+ it('dryRun es obligatorio y booleano: no se infiere una corrida real', async () => {
16
+ const missing = await validate(plainToInstance(RunDevicePostureBackfillRequest, { requestedBy: valid.requestedBy, reason: valid.reason }));
17
+ const text = await validate(plainToInstance(RunDevicePostureBackfillRequest, { ...valid, dryRun: 'false' }));
18
+ expect(missing.map(e => e.property)).toContain('dryRun');
19
+ expect(text.map(e => e.property)).toContain('dryRun');
20
+ });
21
+
22
+ it('acepta el cursor de la página anterior', async () => {
23
+ expect(await validate(plainToInstance(RunDevicePostureBackfillRequest, { ...valid, cursor: 'eyJwayI6IkNSRURJVCMxIn0' }))).toEqual([]);
24
+ });
25
+ });
26
+
27
+ describe('DevicePostureBackfillResult', () => {
28
+ it('reporta lo contado y lo escrito por separado', () => {
29
+ const result: DevicePostureBackfillResult = {
30
+ dryRun: true,
31
+ devicesScanned: 120,
32
+ wouldWrite: 5,
33
+ written: 0,
34
+ skippedByCondition: 0,
35
+ nextCursor: 'eyJwayI6IkNSRURJVCMyIn0',
36
+ };
37
+ expect(result.written).toBe(0);
38
+ });
39
+ });
@@ -0,0 +1,48 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import {
5
+ ReconcileModeEnum,
6
+ ReconcileModeView,
7
+ UpdateReconcileModeRequest,
8
+ } from '../../../src/loanCredit/index';
9
+ import { MdmProviderEnum } from '../../../src/mdm/enums/MdmProviderEnum';
10
+
11
+ const validUpdate = { mode: 'ACT', expectedVersion: 0, reason: 'T3 aprobada', requestedBy: 'andres@somosfiado.com' };
12
+
13
+ describe('UpdateReconcileModeRequest', () => {
14
+ it('valida OBSERVE y ACT', async () => {
15
+ for (const mode of [ReconcileModeEnum.OBSERVE, ReconcileModeEnum.ACT]) {
16
+ const errors = await validate(plainToInstance(UpdateReconcileModeRequest, { ...validUpdate, mode }));
17
+ expect(errors).toEqual([]);
18
+ }
19
+ });
20
+
21
+ it('rechaza un modo fuera del enum', async () => {
22
+ const errors = await validate(plainToInstance(UpdateReconcileModeRequest, { ...validUpdate, mode: 'SHADOW' }));
23
+ expect(errors.map(e => e.property)).toContain('mode');
24
+ });
25
+
26
+ it('exige expectedVersion entero ≥ 0: con 0 se crea la fila', async () => {
27
+ const negative = await validate(plainToInstance(UpdateReconcileModeRequest, { ...validUpdate, expectedVersion: -1 }));
28
+ const missing = await validate(plainToInstance(UpdateReconcileModeRequest, { mode: 'ACT', reason: 'x', requestedBy: 'a@b.mx' }));
29
+ expect(negative.map(e => e.property)).toContain('expectedVersion');
30
+ expect(missing.map(e => e.property)).toContain('expectedVersion');
31
+ });
32
+
33
+ it('exige quién lo pide y por qué', async () => {
34
+ const errors = await validate(plainToInstance(UpdateReconcileModeRequest, { mode: 'ACT', expectedVersion: 0 }));
35
+ expect(errors.map(e => e.property).sort()).toEqual(['reason', 'requestedBy']);
36
+ });
37
+ });
38
+
39
+ describe('ReconcileModeView', () => {
40
+ it('describe el modo vigente de un proveedor', () => {
41
+ const view: ReconcileModeView = {
42
+ provider: MdmProviderEnum.TRUSTONIC,
43
+ mode: ReconcileModeEnum.OBSERVE,
44
+ version: 0,
45
+ };
46
+ expect(view.mode).toBe('OBSERVE');
47
+ });
48
+ });
@@ -0,0 +1,139 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validateSync } from 'class-validator';
4
+ import * as LoanRetailAudit from '../../../src/loanRetailAudit';
5
+ import { LoanRetailAudit as FromRoot } from '../../../src';
6
+
7
+ const {
8
+ AuditTrailRecordedV1,
9
+ CreatePiiAccessLogRequest,
10
+ ListAuditTrailQuery,
11
+ AuditTrailActionEnum,
12
+ LoanAuditEntityTypeEnum,
13
+ RetailAuditEntityTypeEnum,
14
+ PiiResourceTypeEnum,
15
+ PiiAccessActionEnum,
16
+ AUDIT_TRAIL_ENTITY_TYPES,
17
+ } = LoanRetailAudit;
18
+
19
+ function errorsOf<T extends object>(cls: new () => T, payload: Record<string, unknown>): string[] {
20
+ const dto = plainToInstance(cls, payload, { excludeExtraneousValues: true });
21
+ return validateSync(dto).map((e) => e.property);
22
+ }
23
+
24
+ const validEvent = {
25
+ eventId: '01JABCDEF0123456789XYZABCD',
26
+ entityType: RetailAuditEntityTypeEnum.SALE,
27
+ entityId: 'sale-1',
28
+ action: AuditTrailActionEnum.SALE_CANCEL,
29
+ changes: [{ field: 'status', oldValue: 'COMPLETED', newValue: 'CANCELLED' }],
30
+ context: [{ key: 'saleType', value: 'CASH' }],
31
+ performedBy: 'user-1',
32
+ sourceLambda: 'retail-wizard-business',
33
+ occurredAt: '2026-10-19T12:00:00.000Z',
34
+ tenantId: 'surekeep',
35
+ reason: 'cliente se arrepintió',
36
+ };
37
+
38
+ describe('AuditTrailRecordedV1', () => {
39
+ it('acepta un evento completo de Retail', () => {
40
+ expect(errorsOf(AuditTrailRecordedV1, validEvent)).toEqual([]);
41
+ });
42
+
43
+ it('acepta un entityType de Loan y un alta sin oldValue ni contexto', () => {
44
+ expect(
45
+ errorsOf(AuditTrailRecordedV1, {
46
+ ...validEvent,
47
+ entityType: LoanAuditEntityTypeEnum.CREDIT,
48
+ action: AuditTrailActionEnum.CREATE,
49
+ changes: [{ field: 'status', newValue: 'ACTIVE' }],
50
+ context: [],
51
+ tenantId: undefined,
52
+ reason: undefined,
53
+ }),
54
+ ).toEqual([]);
55
+ });
56
+
57
+ it('rechaza entityType y action fuera del catálogo', () => {
58
+ expect(errorsOf(AuditTrailRecordedV1, { ...validEvent, entityType: 'RetailCustomer' })).toContain('entityType');
59
+ expect(errorsOf(AuditTrailRecordedV1, { ...validEvent, action: 'BOOM' })).toContain('action');
60
+ });
61
+
62
+ it('exige eventId, sourceLambda, performedBy y occurredAt ISO', () => {
63
+ const errors = errorsOf(AuditTrailRecordedV1, {
64
+ ...validEvent,
65
+ eventId: '',
66
+ sourceLambda: undefined,
67
+ performedBy: '',
68
+ occurredAt: 'ayer',
69
+ });
70
+ expect(errors).toEqual(expect.arrayContaining(['eventId', 'sourceLambda', 'performedBy', 'occurredAt']));
71
+ });
72
+
73
+ it('valida cada cambio y cada entrada de contexto', () => {
74
+ expect(errorsOf(AuditTrailRecordedV1, { ...validEvent, changes: [{ oldValue: 'x' }] })).toContain('changes');
75
+ expect(errorsOf(AuditTrailRecordedV1, { ...validEvent, context: [{ key: 'k', value: 3 }] })).toContain('context');
76
+ });
77
+ });
78
+
79
+ describe('CreatePiiAccessLogRequest', () => {
80
+ const valid = {
81
+ accessId: '01JABCDEF0123456789XYZABCD',
82
+ occurredAt: '2026-10-19T12:00:00.000Z',
83
+ correlationId: 'req-1',
84
+ actorId: 'user-1',
85
+ sourceLambda: 'retail-customer-business',
86
+ operationName: 'publicGetCustomer',
87
+ action: PiiAccessActionEnum.READ,
88
+ resourceType: PiiResourceTypeEnum.RETAIL_CUSTOMER,
89
+ resourceId: 'cust-1',
90
+ fields: ['phone', 'curp'],
91
+ };
92
+
93
+ it('acepta un acceso de detalle y uno de listado con resourceIds', () => {
94
+ expect(errorsOf(CreatePiiAccessLogRequest, valid)).toEqual([]);
95
+ expect(errorsOf(CreatePiiAccessLogRequest, { ...valid, resourceId: '(list)', resourceIds: ['a', 'b'] })).toEqual([]);
96
+ });
97
+
98
+ it('rechaza el resourceType viejo y una acción desconocida', () => {
99
+ expect(errorsOf(CreatePiiAccessLogRequest, { ...valid, resourceType: 'RetailCustomer' })).toContain('resourceType');
100
+ expect(errorsOf(CreatePiiAccessLogRequest, { ...valid, action: 'DELETE' })).toContain('action');
101
+ });
102
+
103
+ it('exige accessId, actor, campos y fecha ISO', () => {
104
+ const errors = errorsOf(CreatePiiAccessLogRequest, { ...valid, accessId: '', actorId: undefined, fields: [], occurredAt: 'x' });
105
+ expect(errors).toEqual(expect.arrayContaining(['accessId', 'actorId', 'fields', 'occurredAt']));
106
+ });
107
+ });
108
+
109
+ describe('ListAuditTrailQuery', () => {
110
+ it('acepta entityType de Loan o Retail con orden, límite y cursor', () => {
111
+ expect(errorsOf(ListAuditTrailQuery, { entityType: 'CUSTOMER', entityId: 'c-1', order: 'asc', limit: '50', nextToken: 'abc' })).toEqual([]);
112
+ expect(errorsOf(ListAuditTrailQuery, { entityType: 'LoanParameter', entityId: 'p-1' })).toEqual([]);
113
+ });
114
+
115
+ it('rechaza entityType desconocido, orden inválido y límite fuera de rango', () => {
116
+ const errors = errorsOf(ListAuditTrailQuery, { entityType: 'FOO', entityId: 'x', order: 'up', limit: '500' });
117
+ expect(errors).toEqual(expect.arrayContaining(['entityType', 'order', 'limit']));
118
+ });
119
+
120
+ it('exige entityId', () => {
121
+ expect(errorsOf(ListAuditTrailQuery, { entityType: 'SALE' })).toContain('entityId');
122
+ });
123
+ });
124
+
125
+ describe('catálogos', () => {
126
+ it('AUDIT_TRAIL_ENTITY_TYPES une Loan y Retail sin repetidos', () => {
127
+ const all = [...Object.values(LoanAuditEntityTypeEnum), ...Object.values(RetailAuditEntityTypeEnum)];
128
+ expect([...AUDIT_TRAIL_ENTITY_TYPES].sort()).toEqual([...all].sort());
129
+ expect(new Set(all).size).toBe(all.length);
130
+ });
131
+
132
+ it('PiiResourceTypeEnum es SCREAMING_SNAKE', () => {
133
+ Object.values(PiiResourceTypeEnum).forEach((v) => expect(v).toMatch(/^[A-Z][A-Z_]*$/));
134
+ });
135
+
136
+ it('se exporta en la raíz como LoanRetailAudit', () => {
137
+ expect(FromRoot.AuditTrailRecordedV1).toBe(AuditTrailRecordedV1);
138
+ });
139
+ });
@@ -0,0 +1,46 @@
1
+ import 'reflect-metadata';
2
+ import { DeviceStatusResponse } from '../../../../src/mdm/dtos/DeviceStatusResponse';
3
+ import { MdmErrorCodeEnum } from '../../../../src/mdm/enums/MdmErrorCodeEnum';
4
+ import { MdmOperationStatusEnum } from '../../../../src/mdm/enums/MdmOperationStatusEnum';
5
+ import * as MdmBarrel from '../../../../src/mdm/index';
6
+
7
+ describe('DeviceStatusResponse — corte del proveedor', () => {
8
+ it('distingue «el proveedor tiene corte» de «el proveedor dice que no hay»', () => {
9
+ const withCut: DeviceStatusResponse = {
10
+ imei: '356253241262026',
11
+ status: MdmOperationStatusEnum.SUCCESS,
12
+ lockScheduledFor: '2026-10-23T05:59:59.000Z',
13
+ };
14
+ const withoutCut: DeviceStatusResponse = {
15
+ imei: '356253241262026',
16
+ status: MdmOperationStatusEnum.SUCCESS,
17
+ lockScheduledFor: null,
18
+ };
19
+ expect(withCut.lockScheduledFor).toBe('2026-10-23T05:59:59.000Z');
20
+ expect(withoutCut.lockScheduledFor).toBeNull();
21
+ });
22
+
23
+ it('el corte ilegible viaja en su propio campo y no toca el error del ítem', () => {
24
+ const unreadable: DeviceStatusResponse = {
25
+ imei: '352999000000023',
26
+ status: MdmOperationStatusEnum.SUCCESS,
27
+ lockScheduleReadError: {
28
+ code: MdmErrorCodeEnum.PROVIDER_NOT_SUPPORTED,
29
+ message: 'El proveedor no permite leer el corte por IMEI',
30
+ },
31
+ };
32
+ expect(unreadable.error).toBeUndefined();
33
+ expect(unreadable.lockScheduledFor).toBeUndefined();
34
+ expect(unreadable.lockScheduleReadError?.code).toBe(MdmErrorCodeEnum.PROVIDER_NOT_SUPPORTED);
35
+ });
36
+
37
+ it('el connector viejo no manda ninguno de los dos campos', () => {
38
+ const legacy: DeviceStatusResponse = { imei: '1', status: MdmOperationStatusEnum.SUCCESS };
39
+ expect('lockScheduledFor' in legacy).toBe(false);
40
+ expect('lockScheduleReadError' in legacy).toBe(false);
41
+ });
42
+
43
+ it('sale por el barrel de mdm', () => {
44
+ expect(MdmBarrel.DeviceStatusResponse).toBeDefined();
45
+ });
46
+ });
package/bin/index.d.ts CHANGED
@@ -129,3 +129,4 @@ export * as RewardsEligibility from './rewardsEligibility';
129
129
  export * as DatalakeReports from './datalakeReports';
130
130
  export * as PdfRender from './pdfRender';
131
131
  export * as Rules from './rules';
132
+ export * as LoanRetailAudit from './loanRetailAudit';
package/bin/index.js CHANGED
@@ -38,7 +38,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.FiadoIncFavorite = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.MessageMoments = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.UserTags = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.AppContent = exports.App = exports.Offices = exports.Places = exports.Address = exports.Beneficiary = exports.Activity = exports.Biometrics = exports.MetamapConnector = exports.Account = exports.Crypto = void 0;
40
40
  exports.RetailCards = exports.RetailCatalog = exports.RetailCommission = exports.RetailOrg = exports.EmailVerification = exports.NetworkConnector = exports.Modelias = exports.TotpSecurity = exports.Passport = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.WhatsappConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.UsMarketGrowthBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = exports.IssuanceBusiness = exports.Blacklist = void 0;
41
- exports.Rules = exports.PdfRender = exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = exports.RetailWizard = exports.RetailCustomer = void 0;
41
+ exports.LoanRetailAudit = exports.Rules = exports.PdfRender = exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = exports.RetailWizard = exports.RetailCustomer = void 0;
42
42
  exports.Crypto = __importStar(require("./crypto"));
43
43
  exports.Account = __importStar(require("./account"));
44
44
  exports.MetamapConnector = __importStar(require("./metamapConnector"));
@@ -252,3 +252,6 @@ exports.DatalakeReports = __importStar(require("./datalakeReports"));
252
252
  exports.PdfRender = __importStar(require("./pdfRender"));
253
253
  // Rules: DTOs del lambda central rules-business (catálogo, validación, generación con IA y evaluación de reglas).
254
254
  exports.Rules = __importStar(require("./rules"));
255
+ // LoanRetailAudit: contrato del lambda central loan-retail-audit-business (bitácora y accesos a PII
256
+ // de Loan y Retail): mensaje de su cola, POST /private/pii-access-logs y GET /private/audit-trail.
257
+ exports.LoanRetailAudit = __importStar(require("./loanRetailAudit"));
@@ -0,0 +1,9 @@
1
+ /** Body de `POST /private/device-posture/backfill` (loan-credit-business). */
2
+ export declare class RunDevicePostureBackfillRequest {
3
+ /** `true` sólo cuenta lo que escribiría; `false` escribe. Nunca se infiere. */
4
+ dryRun: boolean;
5
+ requestedBy: string;
6
+ reason: string;
7
+ /** `nextCursor` de la corrida anterior, para seguir donde cortó por presupuesto. */
8
+ cursor?: string;
9
+ }
@@ -0,0 +1,42 @@
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.RunDevicePostureBackfillRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /** Body de `POST /private/device-posture/backfill` (loan-credit-business). */
16
+ class RunDevicePostureBackfillRequest {
17
+ }
18
+ exports.RunDevicePostureBackfillRequest = RunDevicePostureBackfillRequest;
19
+ __decorate([
20
+ (0, class_transformer_1.Expose)(),
21
+ (0, class_validator_1.IsBoolean)(),
22
+ __metadata("design:type", Boolean)
23
+ ], RunDevicePostureBackfillRequest.prototype, "dryRun", void 0);
24
+ __decorate([
25
+ (0, class_transformer_1.Expose)(),
26
+ (0, class_validator_1.IsEmail)(),
27
+ __metadata("design:type", String)
28
+ ], RunDevicePostureBackfillRequest.prototype, "requestedBy", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsString)(),
32
+ (0, class_validator_1.IsNotEmpty)(),
33
+ (0, class_validator_1.MaxLength)(300),
34
+ __metadata("design:type", String)
35
+ ], RunDevicePostureBackfillRequest.prototype, "reason", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsString)(),
40
+ (0, class_validator_1.MaxLength)(2048),
41
+ __metadata("design:type", String)
42
+ ], RunDevicePostureBackfillRequest.prototype, "cursor", void 0);
@@ -0,0 +1,9 @@
1
+ import { ReconcileModeEnum } from '../../enums/ReconcileModeEnum';
2
+ /** Body de `PUT /private/reconcile-modes/:provider` (loan-credit-business). */
3
+ export declare class UpdateReconcileModeRequest {
4
+ mode: ReconcileModeEnum;
5
+ /** Versión que el cliente leyó con el GET; 0 cuando la fila todavía no existe. */
6
+ expectedVersion: number;
7
+ reason: string;
8
+ requestedBy: string;
9
+ }
@@ -0,0 +1,42 @@
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.UpdateReconcileModeRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const ReconcileModeEnum_1 = require("../../enums/ReconcileModeEnum");
16
+ /** Body de `PUT /private/reconcile-modes/:provider` (loan-credit-business). */
17
+ class UpdateReconcileModeRequest {
18
+ }
19
+ exports.UpdateReconcileModeRequest = UpdateReconcileModeRequest;
20
+ __decorate([
21
+ (0, class_transformer_1.Expose)(),
22
+ (0, class_validator_1.IsEnum)(ReconcileModeEnum_1.ReconcileModeEnum),
23
+ __metadata("design:type", String)
24
+ ], UpdateReconcileModeRequest.prototype, "mode", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsInt)(),
28
+ (0, class_validator_1.Min)(0),
29
+ __metadata("design:type", Number)
30
+ ], UpdateReconcileModeRequest.prototype, "expectedVersion", void 0);
31
+ __decorate([
32
+ (0, class_transformer_1.Expose)(),
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.IsNotEmpty)(),
35
+ (0, class_validator_1.MaxLength)(300),
36
+ __metadata("design:type", String)
37
+ ], UpdateReconcileModeRequest.prototype, "reason", void 0);
38
+ __decorate([
39
+ (0, class_transformer_1.Expose)(),
40
+ (0, class_validator_1.IsEmail)(),
41
+ __metadata("design:type", String)
42
+ ], UpdateReconcileModeRequest.prototype, "requestedBy", void 0);
@@ -0,0 +1,12 @@
1
+ /** Resultado de una página del backfill. Sin `nextCursor`, la flota ya se recorrió completa. */
2
+ export interface DevicePostureBackfillResult {
3
+ dryRun: boolean;
4
+ devicesScanned: number;
5
+ /** Intenciones manuales y prórrogas que faltan en el expediente. */
6
+ wouldWrite: number;
7
+ /** Siempre 0 en dry-run. */
8
+ written: number;
9
+ /** Escrituras que perdieron la condición (ya existía el campo o cambió la versión). */
10
+ skippedByCondition: number;
11
+ nextCursor?: string;
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,11 @@
1
+ import { MdmProviderEnum } from '../../../mdm/enums/MdmProviderEnum';
2
+ import { ReconcileModeEnum } from '../../enums/ReconcileModeEnum';
3
+ /** Modo vigente del conciliador para un proveedor. Sin fila guardada: OBSERVE con versión 0. */
4
+ export interface ReconcileModeView {
5
+ provider: MdmProviderEnum;
6
+ mode: ReconcileModeEnum;
7
+ version: number;
8
+ updatedBy?: string;
9
+ updatedAt?: string;
10
+ reason?: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ /** Modo del conciliador del corte, por proveedor: sólo calcula (OBSERVE) o también decide (ACT). */
2
+ export declare enum ReconcileModeEnum {
3
+ OBSERVE = "OBSERVE",
4
+ ACT = "ACT"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReconcileModeEnum = void 0;
4
+ /** Modo del conciliador del corte, por proveedor: sólo calcula (OBSERVE) o también decide (ACT). */
5
+ var ReconcileModeEnum;
6
+ (function (ReconcileModeEnum) {
7
+ ReconcileModeEnum["OBSERVE"] = "OBSERVE";
8
+ ReconcileModeEnum["ACT"] = "ACT";
9
+ })(ReconcileModeEnum || (exports.ReconcileModeEnum = ReconcileModeEnum = {}));
@@ -160,3 +160,8 @@ export * from './dtos/responses/SellerPaymentOptions';
160
160
  export * from './dtos/responses/SellerCreditLookupResult';
161
161
  export * from './dtos/responses/InStorePaymentListItem';
162
162
  export * from './dtos/responses/CreditCustomerListItem';
163
+ export * from './enums/ReconcileModeEnum';
164
+ export * from './dtos/requests/UpdateReconcileModeRequest';
165
+ export * from './dtos/responses/ReconcileModeView';
166
+ export * from './dtos/requests/RunDevicePostureBackfillRequest';
167
+ export * from './dtos/responses/DevicePostureBackfillResult';
@@ -204,3 +204,9 @@ __exportStar(require("./dtos/responses/SellerPaymentOptions"), exports);
204
204
  __exportStar(require("./dtos/responses/SellerCreditLookupResult"), exports);
205
205
  __exportStar(require("./dtos/responses/InStorePaymentListItem"), exports);
206
206
  __exportStar(require("./dtos/responses/CreditCustomerListItem"), exports);
207
+ // Conciliador del corte MDM: modo por proveedor y backfill
208
+ __exportStar(require("./enums/ReconcileModeEnum"), exports);
209
+ __exportStar(require("./dtos/requests/UpdateReconcileModeRequest"), exports);
210
+ __exportStar(require("./dtos/responses/ReconcileModeView"), exports);
211
+ __exportStar(require("./dtos/requests/RunDevicePostureBackfillRequest"), exports);
212
+ __exportStar(require("./dtos/responses/DevicePostureBackfillResult"), exports);
@@ -0,0 +1,6 @@
1
+ import { LoanAuditEntityTypeEnum } from '../enums/LoanAuditEntityTypeEnum';
2
+ import { RetailAuditEntityTypeEnum } from '../enums/RetailAuditEntityTypeEnum';
3
+ /** Cualquier `entityType` que acepta el central, de Loan o de Retail. */
4
+ export type AuditTrailEntityType = LoanAuditEntityTypeEnum | RetailAuditEntityTypeEnum;
5
+ export declare const AUDIT_TRAIL_ENTITY_TYPES: readonly AuditTrailEntityType[];
6
+ export declare const AUDIT_TRAIL_MAX_PAGE_SIZE = 100;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AUDIT_TRAIL_MAX_PAGE_SIZE = exports.AUDIT_TRAIL_ENTITY_TYPES = void 0;
4
+ const LoanAuditEntityTypeEnum_1 = require("../enums/LoanAuditEntityTypeEnum");
5
+ const RetailAuditEntityTypeEnum_1 = require("../enums/RetailAuditEntityTypeEnum");
6
+ exports.AUDIT_TRAIL_ENTITY_TYPES = [
7
+ ...Object.values(LoanAuditEntityTypeEnum_1.LoanAuditEntityTypeEnum),
8
+ ...Object.values(RetailAuditEntityTypeEnum_1.RetailAuditEntityTypeEnum),
9
+ ];
10
+ exports.AUDIT_TRAIL_MAX_PAGE_SIZE = 100;
@@ -0,0 +1,8 @@
1
+ /** Un campo que cambió; los valores van serializados a string y nunca llevan PII. */
2
+ export declare class AuditTrailChange {
3
+ field: string;
4
+ /** Ausente en un alta. */
5
+ oldValue?: string;
6
+ /** Ausente en una baja. */
7
+ newValue?: string;
8
+ }
@@ -0,0 +1,36 @@
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.AuditTrailChange = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /** Un campo que cambió; los valores van serializados a string y nunca llevan PII. */
16
+ class AuditTrailChange {
17
+ }
18
+ exports.AuditTrailChange = AuditTrailChange;
19
+ __decorate([
20
+ (0, class_transformer_1.Expose)(),
21
+ (0, class_validator_1.IsString)(),
22
+ (0, class_validator_1.IsNotEmpty)(),
23
+ __metadata("design:type", String)
24
+ ], AuditTrailChange.prototype, "field", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsOptional)(),
28
+ (0, class_validator_1.IsString)(),
29
+ __metadata("design:type", String)
30
+ ], AuditTrailChange.prototype, "oldValue", void 0);
31
+ __decorate([
32
+ (0, class_transformer_1.Expose)(),
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.IsString)(),
35
+ __metadata("design:type", String)
36
+ ], AuditTrailChange.prototype, "newValue", void 0);
@@ -0,0 +1,5 @@
1
+ /** Dato que la acción no cambió y se guarda para leer la entrada sin abrir otra pantalla. */
2
+ export declare class AuditTrailContextEntry {
3
+ key: string;
4
+ value: string;
5
+ }
@@ -0,0 +1,29 @@
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.AuditTrailContextEntry = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /** Dato que la acción no cambió y se guarda para leer la entrada sin abrir otra pantalla. */
16
+ class AuditTrailContextEntry {
17
+ }
18
+ exports.AuditTrailContextEntry = AuditTrailContextEntry;
19
+ __decorate([
20
+ (0, class_transformer_1.Expose)(),
21
+ (0, class_validator_1.IsString)(),
22
+ (0, class_validator_1.IsNotEmpty)(),
23
+ __metadata("design:type", String)
24
+ ], AuditTrailContextEntry.prototype, "key", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsString)(),
28
+ __metadata("design:type", String)
29
+ ], AuditTrailContextEntry.prototype, "value", void 0);
@@ -0,0 +1,19 @@
1
+ import { PiiAccessActionEnum } from '../../enums/PiiAccessActionEnum';
2
+ import { PiiResourceTypeEnum } from '../../enums/PiiResourceTypeEnum';
3
+ /** Body de `POST /private/pii-access-logs` (privateCreatePiiAccessLog); el tenant va en `?tenantId=`. */
4
+ export declare class CreatePiiAccessLogRequest {
5
+ /** ULID generado por quien llama; con `occurredAt` forma el sk, así un reintento no duplica. */
6
+ accessId: string;
7
+ occurredAt: string;
8
+ correlationId: string;
9
+ actorId: string;
10
+ sourceLambda: string;
11
+ operationName: string;
12
+ action: PiiAccessActionEnum;
13
+ resourceType: PiiResourceTypeEnum;
14
+ /** Id del recurso, o `(list)` en un listado con los ids en `resourceIds`. */
15
+ resourceId: string;
16
+ /** Nombres de los campos PII que viajaron; nunca sus valores. */
17
+ fields: string[];
18
+ resourceIds?: string[];
19
+ }