@fiado/type-kit 3.327.0 → 3.329.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 (125) hide show
  1. package/_test_/unit/loanCredit/dtos/loanDeviceContract.test.ts +283 -0
  2. package/bin/loanCredit/constants/LoanDeviceBatchLimits.d.ts +2 -0
  3. package/bin/loanCredit/constants/LoanDeviceBatchLimits.js +5 -0
  4. package/bin/loanCredit/dtos/LoanDeviceCreditRefItem.d.ts +4 -0
  5. package/bin/{retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.js → loanCredit/dtos/LoanDeviceCreditRefItem.js} +6 -6
  6. package/bin/loanCredit/dtos/LoanDeviceEnrollItem.d.ts +11 -0
  7. package/bin/loanCredit/dtos/LoanDeviceEnrollItem.js +62 -0
  8. package/bin/loanCredit/dtos/LoanDeviceManualLockItem.d.ts +9 -0
  9. package/bin/loanCredit/dtos/LoanDeviceManualLockItem.js +37 -0
  10. package/bin/loanCredit/dtos/LoanDeviceOperationResult.d.ts +9 -0
  11. package/bin/loanCredit/dtos/LoanDeviceOperationResult.js +8 -0
  12. package/bin/loanCredit/dtos/LoanDeviceResult.d.ts +9 -0
  13. package/bin/loanCredit/dtos/LoanDeviceResult.js +7 -0
  14. package/bin/loanCredit/dtos/requests/LoanDeviceEnrollRequest.d.ts +7 -0
  15. package/bin/loanCredit/dtos/requests/LoanDeviceEnrollRequest.js +37 -0
  16. package/bin/loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.d.ts +4 -0
  17. package/bin/{retailWizard/dtos/requests/CompleteSaleRequest.js → loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.js} +12 -13
  18. package/bin/loanCredit/dtos/requests/LoanDeviceLastSeenRequest.d.ts +4 -0
  19. package/bin/{retailCards/dtos/requests/CancelCardRequest.js → loanCredit/dtos/requests/LoanDeviceLastSeenRequest.js} +14 -8
  20. package/bin/loanCredit/dtos/requests/LoanDeviceManualLockRequest.d.ts +7 -0
  21. package/bin/loanCredit/dtos/requests/LoanDeviceManualLockRequest.js +37 -0
  22. package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.d.ts +7 -0
  23. package/bin/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.js +37 -0
  24. package/bin/loanCredit/dtos/requests/LoanDeviceStatusRequest.d.ts +4 -0
  25. package/bin/{retailCards/dtos/requests/AssignCardRequest.js → loanCredit/dtos/requests/LoanDeviceStatusRequest.js} +14 -16
  26. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResponse.d.ts +5 -0
  27. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResponse.js +7 -0
  28. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResult.d.ts +7 -0
  29. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollResult.js +8 -0
  30. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.d.ts +5 -0
  31. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.js +7 -0
  32. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.d.ts +16 -0
  33. package/bin/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.js +8 -0
  34. package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.d.ts +5 -0
  35. package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.js +7 -0
  36. package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResult.d.ts +5 -0
  37. package/bin/loanCredit/dtos/responses/LoanDeviceLastSeenResult.js +8 -0
  38. package/bin/loanCredit/dtos/responses/LoanDeviceLockResult.d.ts +8 -0
  39. package/bin/loanCredit/dtos/responses/LoanDeviceLockResult.js +8 -0
  40. package/bin/loanCredit/dtos/responses/LoanDeviceManualLockResponse.d.ts +5 -0
  41. package/bin/loanCredit/dtos/responses/LoanDeviceManualLockResponse.js +7 -0
  42. package/bin/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.d.ts +5 -0
  43. package/bin/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.js +7 -0
  44. package/bin/loanCredit/dtos/responses/LoanDeviceStatusResponse.d.ts +5 -0
  45. package/bin/loanCredit/dtos/responses/LoanDeviceStatusResponse.js +7 -0
  46. package/bin/loanCredit/dtos/responses/LoanDeviceStatusResult.d.ts +28 -0
  47. package/bin/loanCredit/dtos/responses/LoanDeviceStatusResult.js +8 -0
  48. package/bin/loanCredit/dtos/responses/LoanDeviceUnlockResult.d.ts +8 -0
  49. package/bin/loanCredit/dtos/responses/LoanDeviceUnlockResult.js +8 -0
  50. package/bin/loanCredit/enums/LoanDeviceLockReasonEnum.d.ts +12 -0
  51. package/bin/loanCredit/enums/LoanDeviceLockReasonEnum.js +16 -0
  52. package/bin/loanCredit/enums/LoanDeviceMdmStatusEnum.d.ts +25 -0
  53. package/bin/loanCredit/enums/LoanDeviceMdmStatusEnum.js +29 -0
  54. package/bin/loanCredit/index.d.ts +34 -0
  55. package/bin/loanCredit/index.js +45 -1
  56. package/bin/transaction/dtos/Product.d.ts +17 -0
  57. package/bin/transaction/dtos/Product.js +5 -0
  58. package/package.json +2 -2
  59. package/src/loanCredit/constants/LoanDeviceBatchLimits.ts +2 -0
  60. package/src/loanCredit/dtos/LoanDeviceCreditRefItem.ts +9 -0
  61. package/src/loanCredit/dtos/LoanDeviceEnrollItem.ts +47 -0
  62. package/src/loanCredit/dtos/LoanDeviceManualLockItem.ts +22 -0
  63. package/src/loanCredit/dtos/LoanDeviceOperationResult.ts +11 -0
  64. package/src/loanCredit/dtos/LoanDeviceResult.ts +12 -0
  65. package/src/loanCredit/dtos/requests/LoanDeviceEnrollRequest.ts +23 -0
  66. package/src/loanCredit/dtos/requests/LoanDeviceEnrollStatusRequest.ts +14 -0
  67. package/src/loanCredit/dtos/requests/LoanDeviceLastSeenRequest.ts +14 -0
  68. package/src/loanCredit/dtos/requests/LoanDeviceManualLockRequest.ts +23 -0
  69. package/src/loanCredit/dtos/requests/LoanDeviceManualUnlockRequest.ts +23 -0
  70. package/src/loanCredit/dtos/requests/LoanDeviceStatusRequest.ts +14 -0
  71. package/src/loanCredit/dtos/responses/LoanDeviceEnrollResponse.ts +6 -0
  72. package/src/loanCredit/dtos/responses/LoanDeviceEnrollResult.ts +8 -0
  73. package/src/loanCredit/dtos/responses/LoanDeviceEnrollStatusResponse.ts +6 -0
  74. package/src/loanCredit/dtos/responses/LoanDeviceEnrollStatusResult.ts +21 -0
  75. package/src/loanCredit/dtos/responses/LoanDeviceLastSeenResponse.ts +6 -0
  76. package/src/loanCredit/dtos/responses/LoanDeviceLastSeenResult.ts +6 -0
  77. package/src/loanCredit/dtos/responses/LoanDeviceLockResult.ts +10 -0
  78. package/src/loanCredit/dtos/responses/LoanDeviceManualLockResponse.ts +6 -0
  79. package/src/loanCredit/dtos/responses/LoanDeviceManualUnlockResponse.ts +6 -0
  80. package/src/loanCredit/dtos/responses/LoanDeviceStatusResponse.ts +6 -0
  81. package/src/loanCredit/dtos/responses/LoanDeviceStatusResult.ts +39 -0
  82. package/src/loanCredit/dtos/responses/LoanDeviceUnlockResult.ts +10 -0
  83. package/src/loanCredit/enums/LoanDeviceLockReasonEnum.ts +12 -0
  84. package/src/loanCredit/enums/LoanDeviceMdmStatusEnum.ts +25 -0
  85. package/src/loanCredit/index.ts +41 -0
  86. package/src/mdm/README.md +4 -10
  87. package/src/transaction/dtos/Product.ts +20 -0
  88. package/bin/benefitCenter/enums/BenefitFlowEnum.d.ts +0 -11
  89. package/bin/benefitCenter/enums/BenefitFlowEnum.js +0 -15
  90. package/bin/identity/enums/SelfieSourceEnum.d.ts +0 -10
  91. package/bin/identity/enums/SelfieSourceEnum.js +0 -14
  92. package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.d.ts +0 -11
  93. package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.js +0 -46
  94. package/bin/loanCredit/enums/ClientLevelEnum.d.ts +0 -11
  95. package/bin/loanCredit/enums/ClientLevelEnum.js +0 -15
  96. package/bin/retailCards/dtos/requests/AssignCardRequest.d.ts +0 -6
  97. package/bin/retailCards/dtos/requests/CancelCardRequest.d.ts +0 -5
  98. package/bin/retailCards/dtos/responses/RetailCardResponse.d.ts +0 -12
  99. package/bin/retailCards/dtos/responses/RetailCardResponse.js +0 -2
  100. package/bin/retailCards/enums/CardBatchStatusEnum.d.ts +0 -17
  101. package/bin/retailCards/enums/CardBatchStatusEnum.js +0 -21
  102. package/bin/retailCards/enums/CardCancelReasonEnum.d.ts +0 -13
  103. package/bin/retailCards/enums/CardCancelReasonEnum.js +0 -17
  104. package/bin/retailCards/enums/RetailCardStatusEnum.d.ts +0 -13
  105. package/bin/retailCards/enums/RetailCardStatusEnum.js +0 -17
  106. package/bin/retailCards/events/RetailCardAssignedV1.d.ts +0 -10
  107. package/bin/retailCards/events/RetailCardAssignedV1.js +0 -2
  108. package/bin/retailCards/events/RetailCardCancelledV1.d.ts +0 -9
  109. package/bin/retailCards/events/RetailCardCancelledV1.js +0 -2
  110. package/bin/retailCards/events/RetailCardReleasedV1.d.ts +0 -7
  111. package/bin/retailCards/events/RetailCardReleasedV1.js +0 -2
  112. package/bin/retailWizard/dtos/requests/CompleteSaleRequest.d.ts +0 -9
  113. package/bin/retailWizard/dtos/requests/MarkPcfCardDeliveredRequest.d.ts +0 -4
  114. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +0 -6
  115. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +0 -31
  116. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +0 -7
  117. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +0 -6
  118. package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +0 -11
  119. package/bin/walletFunding/dtos/CancelFundingRequest.js +0 -33
  120. package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +0 -14
  121. package/bin/walletFunding/dtos/CancelFundingResponse.js +0 -12
  122. package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +0 -3
  123. package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +0 -21
  124. package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +0 -7
  125. package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +0 -6
@@ -0,0 +1,47 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsISO8601, IsInt, IsNotEmpty, IsOptional, IsPositive, IsString, IsUUID, Matches, Max, MaxLength } from 'class-validator';
3
+ import { SKU_PATTERN } from '../../retailCatalog/constants/SkuPattern';
4
+
5
+ /** Charset y largo del IMEI: exactamente 15 dígitos. */
6
+ const IMEI_PATTERN = /^\d{15}$/;
7
+
8
+ /** Plazo máximo del crédito en meses. */
9
+ const MAX_TERM_MONTHS = 60;
10
+
11
+ /** Ítem de enrolamiento: un crédito con el equipo que se va a enrolar en el MDM. */
12
+ export class LoanDeviceEnrollItem {
13
+ @Expose()
14
+ @IsUUID()
15
+ creditId: string;
16
+
17
+ @Expose()
18
+ @IsString()
19
+ @IsNotEmpty()
20
+ @Matches(IMEI_PATTERN, { message: 'imei admite solo 15 dígitos' })
21
+ imei: string;
22
+
23
+ /** Segundo IMEI del equipo (dual SIM), si lo tiene. */
24
+ @Expose()
25
+ @IsOptional()
26
+ @IsString()
27
+ @Matches(IMEI_PATTERN, { message: 'imei2 admite solo 15 dígitos' })
28
+ imei2?: string;
29
+
30
+ @Expose()
31
+ @IsString()
32
+ @IsNotEmpty()
33
+ @MaxLength(64)
34
+ @Matches(SKU_PATTERN, { message: 'productSku admite solo [A-Za-z0-9-]' })
35
+ productSku: string;
36
+
37
+ @Expose()
38
+ @IsInt()
39
+ @IsPositive()
40
+ @Max(MAX_TERM_MONTHS)
41
+ termMonths: number;
42
+
43
+ /** En modo SCHEDULED es el primer autolock. */
44
+ @Expose()
45
+ @IsISO8601()
46
+ firstDueDate: string;
47
+ }
@@ -0,0 +1,22 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsEnum, IsOptional, IsUUID, ValidateNested } from 'class-validator';
3
+ import { LoanDeviceLockReasonEnum } from '../enums/LoanDeviceLockReasonEnum';
4
+ import { DeviceLockScreenMessage } from '../../mdm/dtos/DeviceLockScreenMessage';
5
+
6
+ /** Ítem de bloqueo manual: qué crédito se bloquea, por qué y con qué mensaje en pantalla. */
7
+ export class LoanDeviceManualLockItem {
8
+ @Expose()
9
+ @IsUUID()
10
+ creditId: string;
11
+
12
+ @Expose()
13
+ @IsEnum(LoanDeviceLockReasonEnum)
14
+ reason: LoanDeviceLockReasonEnum;
15
+
16
+ /** Mensaje que ve el usuario en la pantalla bloqueada; si no viene, el lambda usa el default. */
17
+ @Expose()
18
+ @IsOptional()
19
+ @ValidateNested()
20
+ @Type(() => DeviceLockScreenMessage)
21
+ screenMessage?: DeviceLockScreenMessage;
22
+ }
@@ -0,0 +1,11 @@
1
+ import { LoanDeviceResult } from './LoanDeviceResult';
2
+
3
+ /** Resultado por ítem de las mutaciones (enroll, lock, unlock), que sí llevan referencia de operación. */
4
+ export class LoanDeviceOperationResult extends LoanDeviceResult {
5
+ /** Referencia de la operación con la que el caller correlaciona el batch. */
6
+ operationReference: string;
7
+
8
+ /** Referencia opaca del proveedor, solo para trazabilidad de soporte.
9
+ * El avance se consulta por `creditId` en `enroll-status` (enroll) o `status` (lock/unlock). */
10
+ pollingHandle?: string;
11
+ }
@@ -0,0 +1,12 @@
1
+ import { MdmOperationStatusEnum } from '../../mdm/enums/MdmOperationStatusEnum';
2
+ import { MdmError } from '../../mdm/dtos/MdmError';
3
+
4
+ /** Base de todo resultado por ítem: un ítem puede fallar sin tumbar el batch completo. */
5
+ export class LoanDeviceResult {
6
+ creditId: string;
7
+
8
+ /** Solo toma SUCCESS | PENDING | ERROR; el motivo del fallo viaja en `error.code`. */
9
+ status: MdmOperationStatusEnum;
10
+
11
+ error?: MdmError;
12
+ }
@@ -0,0 +1,23 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsNotEmpty, IsString, Length, ValidateNested } from 'class-validator';
3
+ import { LoanDeviceEnrollItem } from '../LoanDeviceEnrollItem';
4
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
5
+
6
+ /** Body de `POST /private/devices/enroll` (loan-credit-business). Enrola en lote. */
7
+ export class LoanDeviceEnrollRequest {
8
+ @Expose()
9
+ @IsArray()
10
+ @ArrayNotEmpty()
11
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
12
+ @ArrayUnique((item: LoanDeviceEnrollItem) => item.creditId)
13
+ @ValidateNested({ each: true })
14
+ @Type(() => LoanDeviceEnrollItem)
15
+ items: LoanDeviceEnrollItem[];
16
+
17
+ /** Referencia con la que el caller correlaciona este batch; vuelve en cada resultado. */
18
+ @Expose()
19
+ @IsString()
20
+ @IsNotEmpty()
21
+ @Length(1, 64)
22
+ operationReference: string;
23
+ }
@@ -0,0 +1,14 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsUUID } from 'class-validator';
3
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
4
+
5
+ /** Body de `POST /private/devices/enroll-status` (loan-credit-business). Consulta en lote. */
6
+ export class LoanDeviceEnrollStatusRequest {
7
+ @Expose()
8
+ @IsArray()
9
+ @ArrayNotEmpty()
10
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
11
+ @ArrayUnique()
12
+ @IsUUID(undefined, { each: true })
13
+ creditIds: string[];
14
+ }
@@ -0,0 +1,14 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsUUID } from 'class-validator';
3
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
4
+
5
+ /** Body de `POST /private/devices/last-seen` (loan-credit-business). Consulta en lote. */
6
+ export class LoanDeviceLastSeenRequest {
7
+ @Expose()
8
+ @IsArray()
9
+ @ArrayNotEmpty()
10
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
11
+ @ArrayUnique()
12
+ @IsUUID(undefined, { each: true })
13
+ creditIds: string[];
14
+ }
@@ -0,0 +1,23 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsNotEmpty, IsString, Length, ValidateNested } from 'class-validator';
3
+ import { LoanDeviceManualLockItem } from '../LoanDeviceManualLockItem';
4
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
5
+
6
+ /** Body de `POST /private/devices/manual-lock` (loan-credit-business). Bloquea en lote. */
7
+ export class LoanDeviceManualLockRequest {
8
+ @Expose()
9
+ @IsArray()
10
+ @ArrayNotEmpty()
11
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
12
+ @ArrayUnique((item: LoanDeviceManualLockItem) => item.creditId)
13
+ @ValidateNested({ each: true })
14
+ @Type(() => LoanDeviceManualLockItem)
15
+ items: LoanDeviceManualLockItem[];
16
+
17
+ /** Referencia con la que el caller correlaciona este batch; vuelve en cada resultado. */
18
+ @Expose()
19
+ @IsString()
20
+ @IsNotEmpty()
21
+ @Length(1, 64)
22
+ operationReference: string;
23
+ }
@@ -0,0 +1,23 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsNotEmpty, IsString, Length, ValidateNested } from 'class-validator';
3
+ import { LoanDeviceCreditRefItem } from '../LoanDeviceCreditRefItem';
4
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
5
+
6
+ /** Body de `POST /private/devices/manual-unlock` (loan-credit-business). Desbloquea en lote. */
7
+ export class LoanDeviceManualUnlockRequest {
8
+ @Expose()
9
+ @IsArray()
10
+ @ArrayNotEmpty()
11
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
12
+ @ArrayUnique((item: LoanDeviceCreditRefItem) => item.creditId)
13
+ @ValidateNested({ each: true })
14
+ @Type(() => LoanDeviceCreditRefItem)
15
+ items: LoanDeviceCreditRefItem[];
16
+
17
+ /** Referencia con la que el caller correlaciona este batch; vuelve en cada resultado. */
18
+ @Expose()
19
+ @IsString()
20
+ @IsNotEmpty()
21
+ @Length(1, 64)
22
+ operationReference: string;
23
+ }
@@ -0,0 +1,14 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { ArrayMaxSize, ArrayNotEmpty, ArrayUnique, IsArray, IsUUID } from 'class-validator';
3
+ import { LOAN_DEVICE_MAX_BATCH } from '../../constants/LoanDeviceBatchLimits';
4
+
5
+ /** Body de `POST /private/devices/status` (loan-credit-business). Consulta en lote. */
6
+ export class LoanDeviceStatusRequest {
7
+ @Expose()
8
+ @IsArray()
9
+ @ArrayNotEmpty()
10
+ @ArrayMaxSize(LOAN_DEVICE_MAX_BATCH)
11
+ @ArrayUnique()
12
+ @IsUUID(undefined, { each: true })
13
+ creditIds: string[];
14
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceEnrollResult } from './LoanDeviceEnrollResult';
2
+
3
+ /** Response de `POST /private/devices/enroll`. Un resultado por ítem enviado. */
4
+ export class LoanDeviceEnrollResponse {
5
+ results: LoanDeviceEnrollResult[];
6
+ }
@@ -0,0 +1,8 @@
1
+ import { LoanDeviceOperationResult } from '../LoanDeviceOperationResult';
2
+ import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
3
+
4
+ /** Resultado por crédito del enrolamiento en lote. */
5
+ export class LoanDeviceEnrollResult extends LoanDeviceOperationResult {
6
+ /** Estado nuestro del expediente después de intentar el enroll. */
7
+ mdmStatus: LoanDeviceMdmStatusEnum;
8
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceEnrollStatusResult } from './LoanDeviceEnrollStatusResult';
2
+
3
+ /** Response de `POST /private/devices/enroll-status`. Un resultado por crédito consultado. */
4
+ export class LoanDeviceEnrollStatusResponse {
5
+ results: LoanDeviceEnrollStatusResult[];
6
+ }
@@ -0,0 +1,21 @@
1
+ import { LoanDeviceResult } from '../LoanDeviceResult';
2
+ import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
3
+ import { DeviceEnrollmentModeEnum } from '../../../mdm/enums/DeviceEnrollmentModeEnum';
4
+
5
+ /** Resultado por crédito del avance del enrolamiento. */
6
+ export class LoanDeviceEnrollStatusResult extends LoanDeviceResult {
7
+ /** Estado nuestro del expediente. */
8
+ mdmStatus: LoanDeviceMdmStatusEnum;
9
+
10
+ /** Referencia de la operación de enroll que dejó el expediente en este estado. */
11
+ operationReference?: string;
12
+
13
+ /** Referencia opaca del proveedor, solo para trazabilidad de soporte.
14
+ * El avance se consulta por `creditId` en este mismo endpoint. */
15
+ pollingHandle?: string;
16
+
17
+ enrolledAt?: string;
18
+
19
+ /** Modo con el que se resolvió el enroll (por API o esperando al dispositivo). */
20
+ enrollmentMode?: DeviceEnrollmentModeEnum;
21
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceLastSeenResult } from './LoanDeviceLastSeenResult';
2
+
3
+ /** Response de `POST /private/devices/last-seen`. Un resultado por crédito consultado. */
4
+ export class LoanDeviceLastSeenResponse {
5
+ results: LoanDeviceLastSeenResult[];
6
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceResult } from '../LoanDeviceResult';
2
+
3
+ /** Resultado por crédito de la última vez que se vio el dispositivo. */
4
+ export class LoanDeviceLastSeenResult extends LoanDeviceResult {
5
+ lastSeenAt?: string;
6
+ }
@@ -0,0 +1,10 @@
1
+ import { LoanDeviceOperationResult } from '../LoanDeviceOperationResult';
2
+ import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
3
+
4
+ /** Resultado por crédito del bloqueo manual en lote. */
5
+ export class LoanDeviceLockResult extends LoanDeviceOperationResult {
6
+ /** Estado nuestro del expediente después de intentar el bloqueo. */
7
+ mdmStatus: LoanDeviceMdmStatusEnum;
8
+
9
+ lockedAt?: string;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceLockResult } from './LoanDeviceLockResult';
2
+
3
+ /** Response de `POST /private/devices/manual-lock`. Un resultado por ítem enviado. */
4
+ export class LoanDeviceManualLockResponse {
5
+ results: LoanDeviceLockResult[];
6
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceUnlockResult } from './LoanDeviceUnlockResult';
2
+
3
+ /** Response de `POST /private/devices/manual-unlock`. Un resultado por ítem enviado. */
4
+ export class LoanDeviceManualUnlockResponse {
5
+ results: LoanDeviceUnlockResult[];
6
+ }
@@ -0,0 +1,6 @@
1
+ import { LoanDeviceStatusResult } from './LoanDeviceStatusResult';
2
+
3
+ /** Response de `POST /private/devices/status`. Un resultado por crédito consultado. */
4
+ export class LoanDeviceStatusResponse {
5
+ results: LoanDeviceStatusResult[];
6
+ }
@@ -0,0 +1,39 @@
1
+ import { LoanDeviceResult } from '../LoanDeviceResult';
2
+ import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
3
+ import { LoanDeviceLockReasonEnum } from '../../enums/LoanDeviceLockReasonEnum';
4
+ import { MdmDeviceStatusEnum } from '../../../mdm/enums/MdmDeviceStatusEnum';
5
+ import { MdmOperationTypeEnum } from '../../../mdm/enums/MdmOperationTypeEnum';
6
+ import { MdmProviderEnum } from '../../../mdm/enums/MdmProviderEnum';
7
+ import { MdmLockModeEnum } from '../../../retailCatalog/enums/MdmLockModeEnum';
8
+
9
+ /** Resultado por crédito del estado del dispositivo. */
10
+ export class LoanDeviceStatusResult extends LoanDeviceResult {
11
+ /** Estado nuestro del expediente; es el autoritativo. */
12
+ mdmStatus: LoanDeviceMdmStatusEnum;
13
+
14
+ /** Observación del proveedor, solo informativa: el autoritativo es `mdmStatus`. */
15
+ providerStatus?: MdmDeviceStatusEnum;
16
+
17
+ /** Proveedor con el que se enroló; queda congelado al enrolar. */
18
+ mdmProvider?: MdmProviderEnum;
19
+
20
+ /** Modo de bloqueo con el que se enroló; queda congelado al enrolar. */
21
+ mdmLockMode?: MdmLockModeEnum;
22
+
23
+ imei?: string;
24
+
25
+ /** Motivo del bloqueo vigente; es lo que decide si el backoffice desbloquea. */
26
+ lockReason?: LoanDeviceLockReasonEnum;
27
+
28
+ lockedAt?: string;
29
+
30
+ /** ISO-8601 del próximo autolock programado; solo aplica en modo SCHEDULED. */
31
+ currentLockScheduledFor?: string;
32
+
33
+ lastSeenAt?: string;
34
+
35
+ /** Operación a la que corresponde `lastOperationAt`. */
36
+ lastOperationType?: MdmOperationTypeEnum;
37
+
38
+ lastOperationAt?: string;
39
+ }
@@ -0,0 +1,10 @@
1
+ import { LoanDeviceOperationResult } from '../LoanDeviceOperationResult';
2
+ import { LoanDeviceMdmStatusEnum } from '../../enums/LoanDeviceMdmStatusEnum';
3
+
4
+ /** Resultado por crédito del desbloqueo manual en lote. */
5
+ export class LoanDeviceUnlockResult extends LoanDeviceOperationResult {
6
+ /** Estado nuestro del expediente después de intentar el desbloqueo. */
7
+ mdmStatus: LoanDeviceMdmStatusEnum;
8
+
9
+ unlockedAt?: string;
10
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Motivo por el que se bloquea manualmente el dispositivo de un crédito.
3
+ * @enum {string}
4
+ */
5
+ export enum LoanDeviceLockReasonEnum {
6
+ /** Cuota vencida (T+1). */
7
+ OVERDUE_T_PLUS_1 = 'OVERDUE_T_PLUS_1',
8
+ /** Sospecha o confirmación de fraude. */
9
+ FRAUD = 'FRAUD',
10
+ /** Bloqueo manual disparado por un administrador. */
11
+ ADMIN_MANUAL = 'ADMIN_MANUAL',
12
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Estado NUESTRO del expediente de dispositivo (tabla `LoanDeviceMdmMapping_GT`) — es el autoritativo.
3
+ * El estado que reporta el proveedor es otra cosa: `MdmDeviceStatusEnum` del dominio `mdm`.
4
+ * @enum {string}
5
+ */
6
+ export enum LoanDeviceMdmStatusEnum {
7
+ /** El crédito existe pero el enroll nunca arrancó. */
8
+ NOT_ENROLLED = 'NOT_ENROLLED',
9
+ /** Enroll iniciado, esperando la confirmación del proveedor. */
10
+ ENROLLING = 'ENROLLING',
11
+ /** Enrolado y lo damos por vivo. */
12
+ ACTIVE = 'ACTIVE',
13
+ /** Lo damos por bloqueado. */
14
+ LOCKED = 'LOCKED',
15
+ /** Liberado; es irreversible. */
16
+ RELEASED = 'RELEASED',
17
+ /** Archivado sin enrolar (venta de contado). */
18
+ ARCHIVED = 'ARCHIVED',
19
+ /** El proveedor rechazó el enroll. */
20
+ FAILED = 'FAILED',
21
+ /** El proveedor no conoce ese IMEI. */
22
+ FAILED_NOT_FOUND = 'FAILED_NOT_FOUND',
23
+ /** Trabado más de 24 horas; necesita que lo revise una persona. */
24
+ MANUAL_REVIEW = 'MANUAL_REVIEW',
25
+ }
@@ -30,3 +30,44 @@ export * from './dtos/responses/OriginateLoanCreditResponse';
30
30
  export * from './dtos/responses/QuoteLoanCreditResponse';
31
31
  export * from './dtos/responses/SignLoanCreditResponse';
32
32
  export * from './dtos/responses/ActivationCheckResponse';
33
+
34
+ // Device / MDM — contrato hacia los callers de loan-credit
35
+ export * from './enums/LoanDeviceMdmStatusEnum';
36
+ export * from './enums/LoanDeviceLockReasonEnum';
37
+ // Re-export de los tipos canónicos del dominio `mdm` que este contrato reusa (un solo origen de verdad).
38
+ export { MdmOperationStatusEnum } from '../mdm/enums/MdmOperationStatusEnum';
39
+ export { MdmDeviceStatusEnum } from '../mdm/enums/MdmDeviceStatusEnum';
40
+ export { MdmOperationTypeEnum } from '../mdm/enums/MdmOperationTypeEnum';
41
+ export { MdmProviderEnum } from '../mdm/enums/MdmProviderEnum';
42
+ export { DeviceEnrollmentModeEnum } from '../mdm/enums/DeviceEnrollmentModeEnum';
43
+ export { MdmError } from '../mdm/dtos/MdmError';
44
+ export { DeviceLockScreenMessage } from '../mdm/dtos/DeviceLockScreenMessage';
45
+ export { MdmLockModeEnum } from '../retailCatalog/enums/MdmLockModeEnum';
46
+
47
+ export * from './constants/LoanDeviceBatchLimits';
48
+
49
+ export * from './dtos/LoanDeviceResult';
50
+ export * from './dtos/LoanDeviceOperationResult';
51
+ export * from './dtos/LoanDeviceCreditRefItem';
52
+ export * from './dtos/LoanDeviceEnrollItem';
53
+ export * from './dtos/LoanDeviceManualLockItem';
54
+
55
+ export * from './dtos/requests/LoanDeviceEnrollRequest';
56
+ export * from './dtos/requests/LoanDeviceEnrollStatusRequest';
57
+ export * from './dtos/requests/LoanDeviceStatusRequest';
58
+ export * from './dtos/requests/LoanDeviceLastSeenRequest';
59
+ export * from './dtos/requests/LoanDeviceManualLockRequest';
60
+ export * from './dtos/requests/LoanDeviceManualUnlockRequest';
61
+
62
+ export * from './dtos/responses/LoanDeviceEnrollResult';
63
+ export * from './dtos/responses/LoanDeviceEnrollResponse';
64
+ export * from './dtos/responses/LoanDeviceEnrollStatusResult';
65
+ export * from './dtos/responses/LoanDeviceEnrollStatusResponse';
66
+ export * from './dtos/responses/LoanDeviceStatusResult';
67
+ export * from './dtos/responses/LoanDeviceStatusResponse';
68
+ export * from './dtos/responses/LoanDeviceLastSeenResult';
69
+ export * from './dtos/responses/LoanDeviceLastSeenResponse';
70
+ export * from './dtos/responses/LoanDeviceLockResult';
71
+ export * from './dtos/responses/LoanDeviceManualLockResponse';
72
+ export * from './dtos/responses/LoanDeviceUnlockResult';
73
+ export * from './dtos/responses/LoanDeviceManualUnlockResponse';
package/src/mdm/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Dominio MDM — DTOs prototipo
1
+ # Dominio MDM — DTOs del contrato
2
2
 
3
- > ⚠️ **TEMPORAL.** Estos archivos están aquí como prototipo. **Antes de usarlos en producción** deben moverse a `fiado-type-kit/src/mdm/` para no violar el anti-pattern `DTO_LOCAL` (los DTOs son contrato entre microservicios y no deben vivir locales al lambda).
3
+ > Estos DTOs ya viven en `fiado-type-kit/src/mdm/`: son el contrato publicado del dominio MDM y los consumen lambdas desplegados. No los definas de nuevo local a un lambda (anti-pattern `DTO_LOCAL`); impórtalos desde aquí.
4
4
 
5
5
  ## Qué es esto
6
6
 
@@ -33,13 +33,7 @@ mdm/
33
33
  └── index.ts ← barrel export
34
34
  ```
35
35
 
36
- ## Uso temporal
37
-
38
- ```typescript
39
- import { DeviceLockRequest } from "./mdm";
40
- ```
41
-
42
- ## Uso definitivo (cuando esté en el type-kit)
36
+ ## Uso
43
37
 
44
38
  ```typescript
45
39
  import { DeviceLockRequest } from "@fiado/type-kit/bin/mdm";
@@ -75,4 +69,4 @@ Trustonic no emite webhooks (según el PDF oficial v2.0.1). Para Trustonic se de
75
69
 
76
70
  ---
77
71
 
78
- *Mantenido en este repo solo como prototipo. Subir al `fiado-type-kit` antes de producción.*
72
+ *Contrato publicado del dominio MDM. Todo cambio es aditivo: hay lambdas desplegados consumiéndolo.*
@@ -23,4 +23,24 @@ export class Product {
23
23
  @IsString()
24
24
  @IsOptional()
25
25
  originalRelatedId: string;
26
+
27
+ /**
28
+ * Id del producto de `ProductCatalog_GT` con el que se tarifo esta
29
+ * transaccion (ej. `SP_CASH_IN`, `SP_CASH_IN_OXXO`).
30
+ *
31
+ * POR QUE NO ALCANZA CON `type`/`subType`: esos dos describen la OPERACION,
32
+ * no el producto ni el proveedor. Un cash-in de SinergyPay se persiste con
33
+ * `type=EQ_CASH_SA` —el tipo de Equality, hardcodeado a proposito para que
34
+ * la UI aplique su template— asi que por ellos NO se distingue quien lo
35
+ * proceso ni con que tarifa. Este campo si: `SP_CASH_IN` (cuota fija) contra
36
+ * `SP_CASH_IN_OXXO` (porcentual) son productos distintos con cobros
37
+ * distintos.
38
+ *
39
+ * OPCIONAL y aditivo: las filas historicas no lo tienen, y ninguna que se
40
+ * cree sin el cambia de comportamiento. Cualquier consulta que lo use debe
41
+ * tolerar su ausencia.
42
+ */
43
+ @IsString()
44
+ @IsOptional()
45
+ productCatalogId?: string;
26
46
  }
@@ -1,11 +0,0 @@
1
- export declare enum BenefitFlowEnum {
2
- TOPUPS = "TOPUPS",
3
- BILL_PAYMENT = "BILL_PAYMENT",
4
- CREDIT = "CREDIT",
5
- INSURANCE = "INSURANCE",
6
- DONATION = "DONATION",
7
- PHARMACY = "PHARMACY",
8
- REMITTANCE = "REMITTANCE",
9
- /** Fondeo de wallet PCF con efectivo via provider externo (Equality/Passport, OpenPay, …) — spec 13. */
10
- WALLET_FUNDING = "WALLET_FUNDING"
11
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BenefitFlowEnum = void 0;
4
- var BenefitFlowEnum;
5
- (function (BenefitFlowEnum) {
6
- BenefitFlowEnum["TOPUPS"] = "TOPUPS";
7
- BenefitFlowEnum["BILL_PAYMENT"] = "BILL_PAYMENT";
8
- BenefitFlowEnum["CREDIT"] = "CREDIT";
9
- BenefitFlowEnum["INSURANCE"] = "INSURANCE";
10
- BenefitFlowEnum["DONATION"] = "DONATION";
11
- BenefitFlowEnum["PHARMACY"] = "PHARMACY";
12
- BenefitFlowEnum["REMITTANCE"] = "REMITTANCE";
13
- /** Fondeo de wallet PCF con efectivo via provider externo (Equality/Passport, OpenPay, …) — spec 13. */
14
- BenefitFlowEnum["WALLET_FUNDING"] = "WALLET_FUNDING";
15
- })(BenefitFlowEnum || (exports.BenefitFlowEnum = BenefitFlowEnum = {}));
@@ -1,10 +0,0 @@
1
- /**
2
- * Con qué criterio se resolvió cuál archivo de S3 es la selfie del usuario.
3
- * Le dice al consumidor qué tan confiable es el match antes de mandarla a un facematch.
4
- */
5
- export declare enum SelfieSourceEnum {
6
- /** Matcheó el verificationId de la verificación vigente en People. */
7
- VERIFICATION = "VERIFICATION",
8
- /** No hubo match por verificación: se tomó el archivo de selfie más reciente del bucket. */
9
- LATEST = "LATEST"
10
- }
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelfieSourceEnum = void 0;
4
- /**
5
- * Con qué criterio se resolvió cuál archivo de S3 es la selfie del usuario.
6
- * Le dice al consumidor qué tan confiable es el match antes de mandarla a un facematch.
7
- */
8
- var SelfieSourceEnum;
9
- (function (SelfieSourceEnum) {
10
- /** Matcheó el verificationId de la verificación vigente en People. */
11
- SelfieSourceEnum["VERIFICATION"] = "VERIFICATION";
12
- /** No hubo match por verificación: se tomó el archivo de selfie más reciente del bucket. */
13
- SelfieSourceEnum["LATEST"] = "LATEST";
14
- })(SelfieSourceEnum || (exports.SelfieSourceEnum = SelfieSourceEnum = {}));
@@ -1,11 +0,0 @@
1
- /**
2
- * Body de PUT /credits/:creditId/checklist (loan-credit-business). Marca condiciones de activación
3
- * cumplidas. Solo se mandan las que cambian; en F3 las marcarán los flujos de firma de contrato
4
- * (`downPayment` + `contractSigned`) y de enrolamiento MDM (`imeiEnrolled` + `lockVerified`).
5
- */
6
- export declare class UpdateActivationChecklistRequest {
7
- downPayment?: boolean;
8
- contractSigned?: boolean;
9
- imeiEnrolled?: boolean;
10
- lockVerified?: boolean;
11
- }
@@ -1,46 +0,0 @@
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.UpdateActivationChecklistRequest = void 0;
13
- const class_transformer_1 = require("class-transformer");
14
- const class_validator_1 = require("class-validator");
15
- /**
16
- * Body de PUT /credits/:creditId/checklist (loan-credit-business). Marca condiciones de activación
17
- * cumplidas. Solo se mandan las que cambian; en F3 las marcarán los flujos de firma de contrato
18
- * (`downPayment` + `contractSigned`) y de enrolamiento MDM (`imeiEnrolled` + `lockVerified`).
19
- */
20
- class UpdateActivationChecklistRequest {
21
- }
22
- exports.UpdateActivationChecklistRequest = UpdateActivationChecklistRequest;
23
- __decorate([
24
- (0, class_transformer_1.Expose)(),
25
- (0, class_validator_1.IsOptional)(),
26
- (0, class_validator_1.IsBoolean)(),
27
- __metadata("design:type", Boolean)
28
- ], UpdateActivationChecklistRequest.prototype, "downPayment", void 0);
29
- __decorate([
30
- (0, class_transformer_1.Expose)(),
31
- (0, class_validator_1.IsOptional)(),
32
- (0, class_validator_1.IsBoolean)(),
33
- __metadata("design:type", Boolean)
34
- ], UpdateActivationChecklistRequest.prototype, "contractSigned", void 0);
35
- __decorate([
36
- (0, class_transformer_1.Expose)(),
37
- (0, class_validator_1.IsOptional)(),
38
- (0, class_validator_1.IsBoolean)(),
39
- __metadata("design:type", Boolean)
40
- ], UpdateActivationChecklistRequest.prototype, "imeiEnrolled", void 0);
41
- __decorate([
42
- (0, class_transformer_1.Expose)(),
43
- (0, class_validator_1.IsOptional)(),
44
- (0, class_validator_1.IsBoolean)(),
45
- __metadata("design:type", Boolean)
46
- ], UpdateActivationChecklistRequest.prototype, "lockVerified", void 0);
@@ -1,11 +0,0 @@
1
- /**
2
- * Nivel del cliente según su SCI (M7/05_MOTOR §3.2): 21-60 Bronce · 61-80 Plata · 81-100 Oro.
3
- * Distinto de `CreditPlanLevelEnum` de loanOfferings (que además tiene `ALL` para planes):
4
- * un CLIENTE nunca es `ALL`.
5
- * @enum {string}
6
- */
7
- export declare enum ClientLevelEnum {
8
- BRONZE = "BRONZE",
9
- SILVER = "SILVER",
10
- GOLD = "GOLD"
11
- }