@fiado/type-kit 3.404.0 → 3.405.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.
@@ -16,9 +16,11 @@ import { LoanDeviceReleaseResult } from '../../../../src/loanCredit/dtos/respons
16
16
  import { LoanDeviceLockReasonEnum } from '../../../../src/loanCredit/enums/LoanDeviceLockReasonEnum';
17
17
  import { LoanDeviceMdmStatusEnum } from '../../../../src/loanCredit/enums/LoanDeviceMdmStatusEnum';
18
18
  import { DeviceNotifyIntensityEnum } from '../../../../src/mdm/enums/DeviceNotifyIntensityEnum';
19
+ import { MdmNoticeTypeEnum } from '../../../../src/mdm/enums/MdmNoticeTypeEnum';
19
20
  import { DeviceReleaseReasonEnum } from '../../../../src/mdm/enums/DeviceReleaseReasonEnum';
20
21
  import { MdmOperationStatusEnum } from '../../../../src/mdm/enums/MdmOperationStatusEnum';
21
22
  import { LOAN_DEVICE_MAX_BATCH } from '../../../../src/loanCredit/constants/LoanDeviceBatchLimits';
23
+ import * as LoanCreditBarrel from '../../../../src/loanCredit/index';
22
24
 
23
25
  /** ULIDs reales del motor: así es como `LoanCreditService` genera los creditId. */
24
26
  const CREDIT_ID = '01M0B5D7FQA3T06K4REEVPRM33';
@@ -470,6 +472,32 @@ describe('LoanDeviceNotifyRequest', () => {
470
472
  const errors = await validate(dto);
471
473
  expect(errors.some(e => e.property === 'operationReference')).toBe(true);
472
474
  });
475
+
476
+ describe('noticeType', () => {
477
+ it('valida sin noticeType: el consumidor de hoy no se rompe', async () => {
478
+ const dto = plainToInstance(LoanDeviceNotifyRequest, validNotify);
479
+ const errors = await validate(dto);
480
+ expect(errors).toEqual([]);
481
+ expect(dto.items[0].noticeType).toBeUndefined();
482
+ });
483
+
484
+ it.each(Object.values(MdmNoticeTypeEnum))('valida con noticeType %s', async noticeType => {
485
+ const items = [{ ...validNotifyItem, noticeType }];
486
+ const dto = plainToInstance(LoanDeviceNotifyRequest, notifyWithItems(items));
487
+ const errors = await validate(dto);
488
+ expect(errors).toEqual([]);
489
+ expect(dto.items[0].noticeType).toBe(noticeType);
490
+ });
491
+
492
+ it('falla si noticeType está fuera del enum', async () => {
493
+ const items = [{ ...validNotifyItem, noticeType: 'RECORDATORIO' }];
494
+ const dto = plainToInstance(LoanDeviceNotifyRequest, notifyWithItems(items));
495
+ const errors = await validate(dto);
496
+ const itemsError = errors.find(e => e.property === 'items');
497
+ expect(itemsError).toBeDefined();
498
+ expect(JSON.stringify(itemsError)).toContain('noticeType');
499
+ });
500
+ });
473
501
  });
474
502
 
475
503
  describe('LoanDeviceReleaseRequest', () => {
@@ -699,3 +727,15 @@ describe('responses de notify y release', () => {
699
727
  expect(failed.releasedAt).toBeUndefined();
700
728
  });
701
729
  });
730
+
731
+ describe('barrel de loanCredit', () => {
732
+ it('reexporta los enums canónicos de mdm sin duplicarlos', () => {
733
+ expect(LoanCreditBarrel.DeviceNotifyIntensityEnum).toBe(DeviceNotifyIntensityEnum);
734
+ expect(LoanCreditBarrel.DeviceReleaseReasonEnum).toBe(DeviceReleaseReasonEnum);
735
+ expect(LoanCreditBarrel.MdmOperationStatusEnum).toBe(MdmOperationStatusEnum);
736
+ });
737
+
738
+ it('exporta MdmNoticeTypeEnum: quien construye el ítem de aviso puede nombrar el valor', () => {
739
+ expect(LoanCreditBarrel.MdmNoticeTypeEnum).toBe(MdmNoticeTypeEnum);
740
+ });
741
+ });
@@ -2,8 +2,11 @@ import 'reflect-metadata';
2
2
  import { plainToInstance } from 'class-transformer';
3
3
  import { validate, ValidationError } from 'class-validator';
4
4
  import { DeviceEnrollRequest } from '../../../../src/mdm/dtos/DeviceEnrollRequest';
5
+ import { DeviceNotifyRequest } from '../../../../src/mdm/dtos/DeviceNotifyRequest';
5
6
  import { DeviceUnlockRequest } from '../../../../src/mdm/dtos/DeviceUnlockRequest';
7
+ import { DeviceNotifyIntensityEnum } from '../../../../src/mdm/enums/DeviceNotifyIntensityEnum';
6
8
  import { MdmErrorCodeEnum } from '../../../../src/mdm/enums/MdmErrorCodeEnum';
9
+ import { MdmNoticeTypeEnum } from '../../../../src/mdm/enums/MdmNoticeTypeEnum';
7
10
  import * as MdmBarrel from '../../../../src/mdm/index';
8
11
  import { MdmLockModeEnum } from '../../../../src/retailCatalog/enums/MdmLockModeEnum';
9
12
 
@@ -27,6 +30,16 @@ const validUnlock = {
27
30
  operationReference: 'unlock-2026-09-01-0001',
28
31
  };
29
32
 
33
+ /** Aviso tal como lo manda hoy un connector ya desplegado: los tres campos legacy, sin `noticeType`. */
34
+ const validNotify = {
35
+ imei: '351756051523999',
36
+ intensity: DeviceNotifyIntensityEnum.BANNER,
37
+ notificationCode: 'PAYMENT_REMINDER_D1',
38
+ title: 'Tu pago está pendiente',
39
+ content: 'Ponte al corriente para seguir usando tu equipo.',
40
+ operationReference: 'notify-2026-09-04-0001',
41
+ };
42
+
30
43
  describe('DeviceEnrollRequest.lockMode', () => {
31
44
  it('valida sin lockMode: el consumidor de hoy no se rompe', async () => {
32
45
  const dto = plainToInstance(DeviceEnrollRequest, validEnroll);
@@ -81,8 +94,55 @@ describe('MdmErrorCodeEnum', () => {
81
94
  });
82
95
  });
83
96
 
97
+ describe('DeviceNotifyRequest.noticeType', () => {
98
+ it('valida sin noticeType: el consumidor de hoy no se rompe', async () => {
99
+ const dto = plainToInstance(DeviceNotifyRequest, validNotify);
100
+ const errors = await validate(dto);
101
+ expect(errors).toEqual([]);
102
+ expect(dto.noticeType).toBeUndefined();
103
+ });
104
+
105
+ it.each(Object.values(MdmNoticeTypeEnum))('valida con noticeType %s', async noticeType => {
106
+ const dto = plainToInstance(DeviceNotifyRequest, { ...validNotify, noticeType });
107
+ const errors = await validate(dto);
108
+ expect(errors).toEqual([]);
109
+ expect(dto.noticeType).toBe(noticeType);
110
+ });
111
+
112
+ it('falla si noticeType está fuera del enum', async () => {
113
+ const dto = plainToInstance(DeviceNotifyRequest, { ...validNotify, noticeType: 'RECORDATORIO' });
114
+ const errors = await validate(dto);
115
+ expect(hasConstraint(errors, 'noticeType', 'isEnum')).toBe(true);
116
+ });
117
+ });
118
+
119
+ describe('MdmNoticeTypeEnum', () => {
120
+ it('expone los diez avisos del catálogo de cobranza', () => {
121
+ expect(Object.values(MdmNoticeTypeEnum)).toEqual([
122
+ 'PRE_DUE_2_DAYS',
123
+ 'PRE_DUE_1_DAY',
124
+ 'DUE_TODAY',
125
+ 'OVERDUE_1_DAY',
126
+ 'OVERDUE_3_DAYS',
127
+ 'OVERDUE_7_DAYS',
128
+ 'OVERDUE_14_DAYS',
129
+ 'OVERDUE_25_DAYS',
130
+ 'OVERDUE_30_DAYS',
131
+ 'OVERDUE_60_DAYS',
132
+ ]);
133
+ });
134
+
135
+ it('usa el nombre como valor, igual que el resto de los enums del dominio', () => {
136
+ Object.entries(MdmNoticeTypeEnum).forEach(([name, value]) => expect(value).toBe(name));
137
+ });
138
+ });
139
+
84
140
  describe('barrel de mdm', () => {
85
141
  it('reexporta MdmLockModeEnum sin duplicar el enum de retailCatalog', () => {
86
142
  expect(MdmBarrel.MdmLockModeEnum).toBe(MdmLockModeEnum);
87
143
  });
144
+
145
+ it('exporta MdmNoticeTypeEnum', () => {
146
+ expect(MdmBarrel.MdmNoticeTypeEnum).toBe(MdmNoticeTypeEnum);
147
+ });
88
148
  });
@@ -1,12 +1,23 @@
1
1
  import { DeviceNotifyIntensityEnum } from '../../mdm/enums/DeviceNotifyIntensityEnum';
2
+ import { MdmNoticeTypeEnum } from '../../mdm/enums/MdmNoticeTypeEnum';
2
3
  /**
3
- * Ítem de notificación: a qué crédito se le avisa y con qué texto.
4
- * Los tres campos de texto son obligatorios: Datacultr usa el código y Trustonic el texto crudo.
4
+ * Ítem de notificación: a qué crédito se le avisa y con qué aviso.
5
+ * El aviso viaja como `noticeType`; los tres campos de texto siguen siendo obligatorios porque
6
+ * Datacultr usa el código del catálogo y Trustonic el texto crudo.
5
7
  */
6
8
  export declare class LoanDeviceNotifyItem {
7
9
  creditId: string;
8
10
  intensity: DeviceNotifyIntensityEnum;
11
+ /**
12
+ * Id agnóstico del aviso; cada connector lo traduce a lo que su proveedor entiende.
13
+ * Los connectors lo van a preferir sobre `notificationCode`/`title`/`content`;
14
+ * hasta entonces esos tres siguen siendo la fuente.
15
+ */
16
+ noticeType?: MdmNoticeTypeEnum;
17
+ /** Código de notificación del catálogo de Datacultr. Queda por compatibilidad durante la migración a `noticeType`. */
9
18
  notificationCode: string;
19
+ /** Título crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
10
20
  title: string;
21
+ /** Cuerpo crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
11
22
  content: string;
12
23
  }
@@ -13,10 +13,12 @@ exports.LoanDeviceNotifyItem = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const DeviceNotifyIntensityEnum_1 = require("../../mdm/enums/DeviceNotifyIntensityEnum");
16
+ const MdmNoticeTypeEnum_1 = require("../../mdm/enums/MdmNoticeTypeEnum");
16
17
  const CreditIdPattern_1 = require("../constants/CreditIdPattern");
17
18
  /**
18
- * Ítem de notificación: a qué crédito se le avisa y con qué texto.
19
- * Los tres campos de texto son obligatorios: Datacultr usa el código y Trustonic el texto crudo.
19
+ * Ítem de notificación: a qué crédito se le avisa y con qué aviso.
20
+ * El aviso viaja como `noticeType`; los tres campos de texto siguen siendo obligatorios porque
21
+ * Datacultr usa el código del catálogo y Trustonic el texto crudo.
20
22
  */
21
23
  class LoanDeviceNotifyItem {
22
24
  }
@@ -31,6 +33,12 @@ __decorate([
31
33
  (0, class_validator_1.IsEnum)(DeviceNotifyIntensityEnum_1.DeviceNotifyIntensityEnum),
32
34
  __metadata("design:type", String)
33
35
  ], LoanDeviceNotifyItem.prototype, "intensity", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsEnum)(MdmNoticeTypeEnum_1.MdmNoticeTypeEnum),
40
+ __metadata("design:type", String)
41
+ ], LoanDeviceNotifyItem.prototype, "noticeType", void 0);
34
42
  __decorate([
35
43
  (0, class_transformer_1.Expose)(),
36
44
  (0, class_validator_1.IsString)(),
@@ -34,6 +34,7 @@ export { MdmOperationTypeEnum } from '../mdm/enums/MdmOperationTypeEnum';
34
34
  export { MdmProviderEnum } from '../mdm/enums/MdmProviderEnum';
35
35
  export { DeviceEnrollmentModeEnum } from '../mdm/enums/DeviceEnrollmentModeEnum';
36
36
  export { DeviceNotifyIntensityEnum } from '../mdm/enums/DeviceNotifyIntensityEnum';
37
+ export { MdmNoticeTypeEnum } from '../mdm/enums/MdmNoticeTypeEnum';
37
38
  export { DeviceReleaseReasonEnum } from '../mdm/enums/DeviceReleaseReasonEnum';
38
39
  export { MdmError } from '../mdm/dtos/MdmError';
39
40
  export { DeviceLockScreenMessage } from '../mdm/dtos/DeviceLockScreenMessage';
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.MdmLockModeEnum = exports.DeviceLockScreenMessage = exports.MdmError = exports.DeviceReleaseReasonEnum = exports.DeviceNotifyIntensityEnum = exports.DeviceEnrollmentModeEnum = exports.MdmProviderEnum = exports.MdmOperationTypeEnum = exports.MdmDeviceStatusEnum = exports.MdmOperationStatusEnum = exports.ClientLevelEnum = void 0;
17
+ exports.MdmLockModeEnum = exports.DeviceLockScreenMessage = exports.MdmError = exports.DeviceReleaseReasonEnum = exports.MdmNoticeTypeEnum = exports.DeviceNotifyIntensityEnum = exports.DeviceEnrollmentModeEnum = exports.MdmProviderEnum = exports.MdmOperationTypeEnum = exports.MdmDeviceStatusEnum = exports.MdmOperationStatusEnum = exports.ClientLevelEnum = void 0;
18
18
  // Enums
19
19
  __exportStar(require("./enums/LoanCreditStatusEnum"), exports);
20
20
  __exportStar(require("./enums/LoanInstallmentStatusEnum"), exports);
@@ -65,6 +65,8 @@ var DeviceEnrollmentModeEnum_1 = require("../mdm/enums/DeviceEnrollmentModeEnum"
65
65
  Object.defineProperty(exports, "DeviceEnrollmentModeEnum", { enumerable: true, get: function () { return DeviceEnrollmentModeEnum_1.DeviceEnrollmentModeEnum; } });
66
66
  var DeviceNotifyIntensityEnum_1 = require("../mdm/enums/DeviceNotifyIntensityEnum");
67
67
  Object.defineProperty(exports, "DeviceNotifyIntensityEnum", { enumerable: true, get: function () { return DeviceNotifyIntensityEnum_1.DeviceNotifyIntensityEnum; } });
68
+ var MdmNoticeTypeEnum_1 = require("../mdm/enums/MdmNoticeTypeEnum");
69
+ Object.defineProperty(exports, "MdmNoticeTypeEnum", { enumerable: true, get: function () { return MdmNoticeTypeEnum_1.MdmNoticeTypeEnum; } });
68
70
  var DeviceReleaseReasonEnum_1 = require("../mdm/enums/DeviceReleaseReasonEnum");
69
71
  Object.defineProperty(exports, "DeviceReleaseReasonEnum", { enumerable: true, get: function () { return DeviceReleaseReasonEnum_1.DeviceReleaseReasonEnum; } });
70
72
  var MdmError_1 = require("../mdm/dtos/MdmError");
@@ -1,22 +1,19 @@
1
1
  import { DeviceNotifyIntensityEnum } from "../enums/DeviceNotifyIntensityEnum";
2
+ import { MdmNoticeTypeEnum } from "../enums/MdmNoticeTypeEnum";
2
3
  export declare class DeviceNotifyRequest {
3
4
  imei: string;
4
5
  intensity: DeviceNotifyIntensityEnum;
5
6
  /**
6
- * Código de notificación del catálogo (usado por Datacultr en su catálogo de mensajes
7
- * predefinidos). Trustonic lo ignora porque exige texto crudo en `title + content`.
8
- * Ver `trustonic-connector/docs/ARCHITECTURE.md` §7.6.
7
+ * Id agnóstico del aviso; cada connector lo traduce a lo que su proveedor entiende.
8
+ * Los connectors lo van a preferir sobre `notificationCode`/`title`/`content`;
9
+ * hasta entonces esos tres siguen siendo la fuente.
9
10
  */
11
+ noticeType?: MdmNoticeTypeEnum;
12
+ /** Código de notificación del catálogo de Datacultr. Queda por compatibilidad durante la migración a `noticeType`. */
10
13
  notificationCode: string;
11
- /**
12
- * Título de la notificación. Usado por Trustonic (`notificationTitle`). Datacultr lo
13
- * ignora — el texto del título vive en su catálogo indexado por `notificationCode`.
14
- */
14
+ /** Título crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
15
15
  title: string;
16
- /**
17
- * Cuerpo de la notificación. Usado por Trustonic (`notificationContent`). Datacultr lo
18
- * ignora.
19
- */
16
+ /** Cuerpo crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
20
17
  content: string;
21
18
  operationReference: string;
22
19
  }
@@ -13,6 +13,7 @@ exports.DeviceNotifyRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const DeviceNotifyIntensityEnum_1 = require("../enums/DeviceNotifyIntensityEnum");
16
+ const MdmNoticeTypeEnum_1 = require("../enums/MdmNoticeTypeEnum");
16
17
  class DeviceNotifyRequest {
17
18
  }
18
19
  exports.DeviceNotifyRequest = DeviceNotifyRequest;
@@ -27,6 +28,12 @@ __decorate([
27
28
  (0, class_validator_1.IsEnum)(DeviceNotifyIntensityEnum_1.DeviceNotifyIntensityEnum),
28
29
  __metadata("design:type", String)
29
30
  ], DeviceNotifyRequest.prototype, "intensity", void 0);
31
+ __decorate([
32
+ (0, class_transformer_1.Expose)(),
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.IsEnum)(MdmNoticeTypeEnum_1.MdmNoticeTypeEnum),
35
+ __metadata("design:type", String)
36
+ ], DeviceNotifyRequest.prototype, "noticeType", void 0);
30
37
  __decorate([
31
38
  (0, class_transformer_1.Expose)(),
32
39
  (0, class_validator_1.IsString)(),
@@ -1,6 +1,8 @@
1
1
  export declare enum MdmErrorCodeEnum {
2
- /** El proveedor no soporta la operación para ESE equipo. Lo adjudica el connector. */
2
+ /** El proveedor no tiene la operación: no depende de cómo se enroló el equipo. */
3
3
  PROVIDER_NOT_SUPPORTED = "PROVIDER_NOT_SUPPORTED",
4
+ /** El proveedor la tiene, pero ESTE equipo no la admite por cómo se enroló. No es terminal. */
5
+ DEVICE_CAPABILITY_NOT_SUPPORTED = "DEVICE_CAPABILITY_NOT_SUPPORTED",
4
6
  /** No hay connector cableado para ese proveedor: reintentar nunca lo resuelve. */
5
7
  CONNECTOR_NOT_WIRED = "CONNECTOR_NOT_WIRED",
6
8
  DEVICE_NOT_FOUND = "DEVICE_NOT_FOUND",
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MdmErrorCodeEnum = void 0;
4
4
  var MdmErrorCodeEnum;
5
5
  (function (MdmErrorCodeEnum) {
6
- /** El proveedor no soporta la operación para ESE equipo. Lo adjudica el connector. */
6
+ /** El proveedor no tiene la operación: no depende de cómo se enroló el equipo. */
7
7
  MdmErrorCodeEnum["PROVIDER_NOT_SUPPORTED"] = "PROVIDER_NOT_SUPPORTED";
8
+ /** El proveedor la tiene, pero ESTE equipo no la admite por cómo se enroló. No es terminal. */
9
+ MdmErrorCodeEnum["DEVICE_CAPABILITY_NOT_SUPPORTED"] = "DEVICE_CAPABILITY_NOT_SUPPORTED";
8
10
  /** No hay connector cableado para ese proveedor: reintentar nunca lo resuelve. */
9
11
  MdmErrorCodeEnum["CONNECTOR_NOT_WIRED"] = "CONNECTOR_NOT_WIRED";
10
12
  MdmErrorCodeEnum["DEVICE_NOT_FOUND"] = "DEVICE_NOT_FOUND";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Catálogo agnóstico de avisos automáticos de cobranza que se muestran en la pantalla del equipo.
3
+ * Cada connector traduce el valor a lo que su proveedor entiende (código de catálogo o texto crudo).
4
+ * No es la cadencia completa de cobranza: los hitos de otros canales (tarde del día 0, días 90 y 180) no se pintan acá.
5
+ */
6
+ export declare enum MdmNoticeTypeEnum {
7
+ /** Dos días antes del vencimiento de la cuota. */
8
+ PRE_DUE_2_DAYS = "PRE_DUE_2_DAYS",
9
+ /** Un día antes del vencimiento de la cuota. */
10
+ PRE_DUE_1_DAY = "PRE_DUE_1_DAY",
11
+ /** El día del vencimiento, mientras la cuota todavía no cae en mora. */
12
+ DUE_TODAY = "DUE_TODAY",
13
+ /** Día 1 de mora: el equipo ya está bloqueado. */
14
+ OVERDUE_1_DAY = "OVERDUE_1_DAY",
15
+ /** Día 3 de mora. */
16
+ OVERDUE_3_DAYS = "OVERDUE_3_DAYS",
17
+ /** Día 7 de mora. */
18
+ OVERDUE_7_DAYS = "OVERDUE_7_DAYS",
19
+ /** Día 14 de mora. */
20
+ OVERDUE_14_DAYS = "OVERDUE_14_DAYS",
21
+ /** Día 25 de mora: aviso previo al reporte a sociedades de información crediticia. */
22
+ OVERDUE_25_DAYS = "OVERDUE_25_DAYS",
23
+ /** Día 30 de mora: el crédito ya fue reportado a sociedades de información crediticia. */
24
+ OVERDUE_30_DAYS = "OVERDUE_30_DAYS",
25
+ /** Día 60 de mora: último aviso, previo a la baja contable. */
26
+ OVERDUE_60_DAYS = "OVERDUE_60_DAYS"
27
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MdmNoticeTypeEnum = void 0;
4
+ /**
5
+ * Catálogo agnóstico de avisos automáticos de cobranza que se muestran en la pantalla del equipo.
6
+ * Cada connector traduce el valor a lo que su proveedor entiende (código de catálogo o texto crudo).
7
+ * No es la cadencia completa de cobranza: los hitos de otros canales (tarde del día 0, días 90 y 180) no se pintan acá.
8
+ */
9
+ var MdmNoticeTypeEnum;
10
+ (function (MdmNoticeTypeEnum) {
11
+ /** Dos días antes del vencimiento de la cuota. */
12
+ MdmNoticeTypeEnum["PRE_DUE_2_DAYS"] = "PRE_DUE_2_DAYS";
13
+ /** Un día antes del vencimiento de la cuota. */
14
+ MdmNoticeTypeEnum["PRE_DUE_1_DAY"] = "PRE_DUE_1_DAY";
15
+ /** El día del vencimiento, mientras la cuota todavía no cae en mora. */
16
+ MdmNoticeTypeEnum["DUE_TODAY"] = "DUE_TODAY";
17
+ /** Día 1 de mora: el equipo ya está bloqueado. */
18
+ MdmNoticeTypeEnum["OVERDUE_1_DAY"] = "OVERDUE_1_DAY";
19
+ /** Día 3 de mora. */
20
+ MdmNoticeTypeEnum["OVERDUE_3_DAYS"] = "OVERDUE_3_DAYS";
21
+ /** Día 7 de mora. */
22
+ MdmNoticeTypeEnum["OVERDUE_7_DAYS"] = "OVERDUE_7_DAYS";
23
+ /** Día 14 de mora. */
24
+ MdmNoticeTypeEnum["OVERDUE_14_DAYS"] = "OVERDUE_14_DAYS";
25
+ /** Día 25 de mora: aviso previo al reporte a sociedades de información crediticia. */
26
+ MdmNoticeTypeEnum["OVERDUE_25_DAYS"] = "OVERDUE_25_DAYS";
27
+ /** Día 30 de mora: el crédito ya fue reportado a sociedades de información crediticia. */
28
+ MdmNoticeTypeEnum["OVERDUE_30_DAYS"] = "OVERDUE_30_DAYS";
29
+ /** Día 60 de mora: último aviso, previo a la baja contable. */
30
+ MdmNoticeTypeEnum["OVERDUE_60_DAYS"] = "OVERDUE_60_DAYS";
31
+ })(MdmNoticeTypeEnum || (exports.MdmNoticeTypeEnum = MdmNoticeTypeEnum = {}));
@@ -45,4 +45,5 @@ export * from "./enums/MdmOperationStatusEnum";
45
45
  export * from "./enums/MdmErrorCodeEnum";
46
46
  export * from "./enums/MdmProviderEnum";
47
47
  export * from "./enums/MdmOperationTypeEnum";
48
+ export * from "./enums/MdmNoticeTypeEnum";
48
49
  export { MdmLockModeEnum } from "../retailCatalog/enums/MdmLockModeEnum";
package/bin/mdm/index.js CHANGED
@@ -69,6 +69,7 @@ __exportStar(require("./enums/MdmOperationStatusEnum"), exports);
69
69
  __exportStar(require("./enums/MdmErrorCodeEnum"), exports);
70
70
  __exportStar(require("./enums/MdmProviderEnum"), exports);
71
71
  __exportStar(require("./enums/MdmOperationTypeEnum"), exports);
72
+ __exportStar(require("./enums/MdmNoticeTypeEnum"), exports);
72
73
  // enums de otro dominio — el modo de bloqueo lo define el producto en el catálogo
73
74
  var MdmLockModeEnum_1 = require("../retailCatalog/enums/MdmLockModeEnum");
74
75
  Object.defineProperty(exports, "MdmLockModeEnum", { enumerable: true, get: function () { return MdmLockModeEnum_1.MdmLockModeEnum; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.404.0",
3
+ "version": "3.405.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -1,11 +1,13 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsEnum, IsNotEmpty, IsString, Matches, MaxLength } from 'class-validator';
2
+ import { IsEnum, IsNotEmpty, IsOptional, IsString, Matches, MaxLength } from 'class-validator';
3
3
  import { DeviceNotifyIntensityEnum } from '../../mdm/enums/DeviceNotifyIntensityEnum';
4
+ import { MdmNoticeTypeEnum } from '../../mdm/enums/MdmNoticeTypeEnum';
4
5
  import { CREDIT_ID_MESSAGE, CREDIT_ID_PATTERN } from '../constants/CreditIdPattern';
5
6
 
6
7
  /**
7
- * Ítem de notificación: a qué crédito se le avisa y con qué texto.
8
- * Los tres campos de texto son obligatorios: Datacultr usa el código y Trustonic el texto crudo.
8
+ * Ítem de notificación: a qué crédito se le avisa y con qué aviso.
9
+ * El aviso viaja como `noticeType`; los tres campos de texto siguen siendo obligatorios porque
10
+ * Datacultr usa el código del catálogo y Trustonic el texto crudo.
9
11
  */
10
12
  export class LoanDeviceNotifyItem {
11
13
  @Expose()
@@ -16,18 +18,31 @@ export class LoanDeviceNotifyItem {
16
18
  @IsEnum(DeviceNotifyIntensityEnum)
17
19
  intensity: DeviceNotifyIntensityEnum;
18
20
 
21
+ /**
22
+ * Id agnóstico del aviso; cada connector lo traduce a lo que su proveedor entiende.
23
+ * Los connectors lo van a preferir sobre `notificationCode`/`title`/`content`;
24
+ * hasta entonces esos tres siguen siendo la fuente.
25
+ */
26
+ @Expose()
27
+ @IsOptional()
28
+ @IsEnum(MdmNoticeTypeEnum)
29
+ noticeType?: MdmNoticeTypeEnum;
30
+
31
+ /** Código de notificación del catálogo de Datacultr. Queda por compatibilidad durante la migración a `noticeType`. */
19
32
  @Expose()
20
33
  @IsString()
21
34
  @IsNotEmpty()
22
35
  @MaxLength(64)
23
36
  notificationCode: string;
24
37
 
38
+ /** Título crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
25
39
  @Expose()
26
40
  @IsString()
27
41
  @IsNotEmpty()
28
42
  @MaxLength(128)
29
43
  title: string;
30
44
 
45
+ /** Cuerpo crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
31
46
  @Expose()
32
47
  @IsString()
33
48
  @IsNotEmpty()
@@ -45,6 +45,7 @@ export { MdmOperationTypeEnum } from '../mdm/enums/MdmOperationTypeEnum';
45
45
  export { MdmProviderEnum } from '../mdm/enums/MdmProviderEnum';
46
46
  export { DeviceEnrollmentModeEnum } from '../mdm/enums/DeviceEnrollmentModeEnum';
47
47
  export { DeviceNotifyIntensityEnum } from '../mdm/enums/DeviceNotifyIntensityEnum';
48
+ export { MdmNoticeTypeEnum } from '../mdm/enums/MdmNoticeTypeEnum';
48
49
  export { DeviceReleaseReasonEnum } from '../mdm/enums/DeviceReleaseReasonEnum';
49
50
  export { MdmError } from '../mdm/dtos/MdmError';
50
51
  export { DeviceLockScreenMessage } from '../mdm/dtos/DeviceLockScreenMessage';
@@ -1,6 +1,7 @@
1
1
  import { Expose } from "class-transformer";
2
- import { IsString, IsNotEmpty, IsEnum } from "class-validator";
2
+ import { IsString, IsNotEmpty, IsEnum, IsOptional } from "class-validator";
3
3
  import { DeviceNotifyIntensityEnum } from "../enums/DeviceNotifyIntensityEnum";
4
+ import { MdmNoticeTypeEnum } from "../enums/MdmNoticeTypeEnum";
4
5
 
5
6
  export class DeviceNotifyRequest {
6
7
  @Expose()
@@ -13,28 +14,28 @@ export class DeviceNotifyRequest {
13
14
  intensity: DeviceNotifyIntensityEnum;
14
15
 
15
16
  /**
16
- * Código de notificación del catálogo (usado por Datacultr en su catálogo de mensajes
17
- * predefinidos). Trustonic lo ignora porque exige texto crudo en `title + content`.
18
- * Ver `trustonic-connector/docs/ARCHITECTURE.md` §7.6.
17
+ * Id agnóstico del aviso; cada connector lo traduce a lo que su proveedor entiende.
18
+ * Los connectors lo van a preferir sobre `notificationCode`/`title`/`content`;
19
+ * hasta entonces esos tres siguen siendo la fuente.
19
20
  */
20
21
  @Expose()
22
+ @IsOptional()
23
+ @IsEnum(MdmNoticeTypeEnum)
24
+ noticeType?: MdmNoticeTypeEnum;
25
+
26
+ /** Código de notificación del catálogo de Datacultr. Queda por compatibilidad durante la migración a `noticeType`. */
27
+ @Expose()
21
28
  @IsString()
22
29
  @IsNotEmpty()
23
30
  notificationCode: string;
24
31
 
25
- /**
26
- * Título de la notificación. Usado por Trustonic (`notificationTitle`). Datacultr lo
27
- * ignora — el texto del título vive en su catálogo indexado por `notificationCode`.
28
- */
32
+ /** Título crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
29
33
  @Expose()
30
34
  @IsString()
31
35
  @IsNotEmpty()
32
36
  title: string;
33
37
 
34
- /**
35
- * Cuerpo de la notificación. Usado por Trustonic (`notificationContent`). Datacultr lo
36
- * ignora.
37
- */
38
+ /** Cuerpo crudo que exige Trustonic. Queda por compatibilidad durante la migración a `noticeType`. */
38
39
  @Expose()
39
40
  @IsString()
40
41
  @IsNotEmpty()
@@ -1,6 +1,8 @@
1
1
  export enum MdmErrorCodeEnum {
2
- /** El proveedor no soporta la operación para ESE equipo. Lo adjudica el connector. */
2
+ /** El proveedor no tiene la operación: no depende de cómo se enroló el equipo. */
3
3
  PROVIDER_NOT_SUPPORTED = "PROVIDER_NOT_SUPPORTED",
4
+ /** El proveedor la tiene, pero ESTE equipo no la admite por cómo se enroló. No es terminal. */
5
+ DEVICE_CAPABILITY_NOT_SUPPORTED = "DEVICE_CAPABILITY_NOT_SUPPORTED",
4
6
  /** No hay connector cableado para ese proveedor: reintentar nunca lo resuelve. */
5
7
  CONNECTOR_NOT_WIRED = "CONNECTOR_NOT_WIRED",
6
8
  DEVICE_NOT_FOUND = "DEVICE_NOT_FOUND",
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Catálogo agnóstico de avisos automáticos de cobranza que se muestran en la pantalla del equipo.
3
+ * Cada connector traduce el valor a lo que su proveedor entiende (código de catálogo o texto crudo).
4
+ * No es la cadencia completa de cobranza: los hitos de otros canales (tarde del día 0, días 90 y 180) no se pintan acá.
5
+ */
6
+ export enum MdmNoticeTypeEnum {
7
+ /** Dos días antes del vencimiento de la cuota. */
8
+ PRE_DUE_2_DAYS = "PRE_DUE_2_DAYS",
9
+ /** Un día antes del vencimiento de la cuota. */
10
+ PRE_DUE_1_DAY = "PRE_DUE_1_DAY",
11
+ /** El día del vencimiento, mientras la cuota todavía no cae en mora. */
12
+ DUE_TODAY = "DUE_TODAY",
13
+ /** Día 1 de mora: el equipo ya está bloqueado. */
14
+ OVERDUE_1_DAY = "OVERDUE_1_DAY",
15
+ /** Día 3 de mora. */
16
+ OVERDUE_3_DAYS = "OVERDUE_3_DAYS",
17
+ /** Día 7 de mora. */
18
+ OVERDUE_7_DAYS = "OVERDUE_7_DAYS",
19
+ /** Día 14 de mora. */
20
+ OVERDUE_14_DAYS = "OVERDUE_14_DAYS",
21
+ /** Día 25 de mora: aviso previo al reporte a sociedades de información crediticia. */
22
+ OVERDUE_25_DAYS = "OVERDUE_25_DAYS",
23
+ /** Día 30 de mora: el crédito ya fue reportado a sociedades de información crediticia. */
24
+ OVERDUE_30_DAYS = "OVERDUE_30_DAYS",
25
+ /** Día 60 de mora: último aviso, previo a la baja contable. */
26
+ OVERDUE_60_DAYS = "OVERDUE_60_DAYS"
27
+ }
package/src/mdm/index.ts CHANGED
@@ -58,6 +58,7 @@ export * from "./enums/MdmOperationStatusEnum";
58
58
  export * from "./enums/MdmErrorCodeEnum";
59
59
  export * from "./enums/MdmProviderEnum";
60
60
  export * from "./enums/MdmOperationTypeEnum";
61
+ export * from "./enums/MdmNoticeTypeEnum";
61
62
 
62
63
  // enums de otro dominio — el modo de bloqueo lo define el producto en el catálogo
63
64
  export { MdmLockModeEnum } from "../retailCatalog/enums/MdmLockModeEnum";