@fiado/type-kit 3.386.0 → 3.388.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 (31) hide show
  1. package/bin/centralPayments/dtos/ConfirmMicroDepositsRequest.d.ts +3 -0
  2. package/bin/centralPayments/dtos/ConfirmMicroDepositsRequest.js +22 -0
  3. package/bin/centralPayments/dtos/ConfirmMicroDepositsResponse.d.ts +3 -0
  4. package/bin/centralPayments/dtos/ConfirmMicroDepositsResponse.js +6 -0
  5. package/bin/centralPayments/dtos/GetMicroDepositsResponse.d.ts +4 -0
  6. package/bin/centralPayments/dtos/GetMicroDepositsResponse.js +6 -0
  7. package/bin/centralPayments/dtos/MicroDepositBankGroupDto.d.ts +5 -0
  8. package/bin/centralPayments/dtos/MicroDepositBankGroupDto.js +6 -0
  9. package/bin/centralPayments/dtos/MicroDepositDto.d.ts +5 -0
  10. package/bin/centralPayments/dtos/MicroDepositDto.js +6 -0
  11. package/bin/centralPayments/enums/MicroDepositStatusEnum.d.ts +5 -0
  12. package/bin/centralPayments/enums/MicroDepositStatusEnum.js +9 -0
  13. package/bin/centralPayments/index.d.ts +6 -0
  14. package/bin/centralPayments/index.js +6 -0
  15. package/bin/collection/dtos/CollectRequest.d.ts +6 -0
  16. package/bin/collection/dtos/CollectRequest.js +8 -0
  17. package/bin/collection/dtos/CollectionAttemptDto.d.ts +8 -0
  18. package/bin/collection/dtos/CollectionAttemptDto.js +13 -0
  19. package/bin/collection/dtos/PendingChargeDto.d.ts +7 -0
  20. package/bin/collection/dtos/PendingChargeDto.js +13 -0
  21. package/package.json +1 -1
  22. package/src/centralPayments/dtos/ConfirmMicroDepositsRequest.ts +8 -0
  23. package/src/centralPayments/dtos/ConfirmMicroDepositsResponse.ts +3 -0
  24. package/src/centralPayments/dtos/GetMicroDepositsResponse.ts +5 -0
  25. package/src/centralPayments/dtos/MicroDepositBankGroupDto.ts +6 -0
  26. package/src/centralPayments/dtos/MicroDepositDto.ts +5 -0
  27. package/src/centralPayments/enums/MicroDepositStatusEnum.ts +5 -0
  28. package/src/centralPayments/index.ts +6 -0
  29. package/src/collection/dtos/CollectRequest.ts +9 -1
  30. package/src/collection/dtos/CollectionAttemptDto.ts +11 -1
  31. package/src/collection/dtos/PendingChargeDto.ts +9 -1
@@ -0,0 +1,3 @@
1
+ export declare class ConfirmMicroDepositsRequest {
2
+ ids: string[];
3
+ }
@@ -0,0 +1,22 @@
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.ConfirmMicroDepositsRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class ConfirmMicroDepositsRequest {
15
+ }
16
+ exports.ConfirmMicroDepositsRequest = ConfirmMicroDepositsRequest;
17
+ __decorate([
18
+ (0, class_validator_1.IsArray)(),
19
+ (0, class_validator_1.ArrayNotEmpty)(),
20
+ (0, class_validator_1.IsString)({ each: true }),
21
+ __metadata("design:type", Array)
22
+ ], ConfirmMicroDepositsRequest.prototype, "ids", void 0);
@@ -0,0 +1,3 @@
1
+ export declare class ConfirmMicroDepositsResponse {
2
+ confirmed: number;
3
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfirmMicroDepositsResponse = void 0;
4
+ class ConfirmMicroDepositsResponse {
5
+ }
6
+ exports.ConfirmMicroDepositsResponse = ConfirmMicroDepositsResponse;
@@ -0,0 +1,4 @@
1
+ import { MicroDepositBankGroupDto } from "./MicroDepositBankGroupDto";
2
+ export declare class GetMicroDepositsResponse {
3
+ banks: MicroDepositBankGroupDto[];
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetMicroDepositsResponse = void 0;
4
+ class GetMicroDepositsResponse {
5
+ }
6
+ exports.GetMicroDepositsResponse = GetMicroDepositsResponse;
@@ -0,0 +1,5 @@
1
+ import { MicroDepositDto } from "./MicroDepositDto";
2
+ export declare class MicroDepositBankGroupDto {
3
+ bankName: string;
4
+ deposits: MicroDepositDto[];
5
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MicroDepositBankGroupDto = void 0;
4
+ class MicroDepositBankGroupDto {
5
+ }
6
+ exports.MicroDepositBankGroupDto = MicroDepositBankGroupDto;
@@ -0,0 +1,5 @@
1
+ export declare class MicroDepositDto {
2
+ id: string;
3
+ amount: number;
4
+ currencyCode: string;
5
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MicroDepositDto = void 0;
4
+ class MicroDepositDto {
5
+ }
6
+ exports.MicroDepositDto = MicroDepositDto;
@@ -0,0 +1,5 @@
1
+ export declare enum MicroDepositStatusEnum {
2
+ PENDING = "PENDING",
3
+ CONFIRMED = "CONFIRMED",
4
+ SUPERSEDED = "SUPERSEDED"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MicroDepositStatusEnum = void 0;
4
+ var MicroDepositStatusEnum;
5
+ (function (MicroDepositStatusEnum) {
6
+ MicroDepositStatusEnum["PENDING"] = "PENDING";
7
+ MicroDepositStatusEnum["CONFIRMED"] = "CONFIRMED";
8
+ MicroDepositStatusEnum["SUPERSEDED"] = "SUPERSEDED";
9
+ })(MicroDepositStatusEnum || (exports.MicroDepositStatusEnum = MicroDepositStatusEnum = {}));
@@ -9,7 +9,13 @@ export * from './dtos/CentralPaymentsTransactionInfo';
9
9
  export * from './dtos/CentralWebhookEventRequest';
10
10
  export * from './dtos/WebhookEventItem';
11
11
  export * from './dtos/GetEventsSinceResponse';
12
+ export * from './dtos/MicroDepositDto';
13
+ export * from './dtos/MicroDepositBankGroupDto';
14
+ export * from './dtos/GetMicroDepositsResponse';
15
+ export * from './dtos/ConfirmMicroDepositsRequest';
16
+ export * from './dtos/ConfirmMicroDepositsResponse';
12
17
  export * from './enums/ServiceStatusEnum';
13
18
  export * from './enums/MerchantLocationDistanceUnitEnum';
14
19
  export * from './enums/CentralPaymentTransactionTypeEnum';
15
20
  export * from './enums/CentralPaymentMetadataTypeEnum';
21
+ export * from './enums/MicroDepositStatusEnum';
@@ -26,8 +26,14 @@ __exportStar(require("./dtos/CentralPaymentsTransactionInfo"), exports);
26
26
  __exportStar(require("./dtos/CentralWebhookEventRequest"), exports);
27
27
  __exportStar(require("./dtos/WebhookEventItem"), exports);
28
28
  __exportStar(require("./dtos/GetEventsSinceResponse"), exports);
29
+ __exportStar(require("./dtos/MicroDepositDto"), exports);
30
+ __exportStar(require("./dtos/MicroDepositBankGroupDto"), exports);
31
+ __exportStar(require("./dtos/GetMicroDepositsResponse"), exports);
32
+ __exportStar(require("./dtos/ConfirmMicroDepositsRequest"), exports);
33
+ __exportStar(require("./dtos/ConfirmMicroDepositsResponse"), exports);
29
34
  // central payments enums
30
35
  __exportStar(require("./enums/ServiceStatusEnum"), exports);
31
36
  __exportStar(require("./enums/MerchantLocationDistanceUnitEnum"), exports);
32
37
  __exportStar(require("./enums/CentralPaymentTransactionTypeEnum"), exports);
33
38
  __exportStar(require("./enums/CentralPaymentMetadataTypeEnum"), exports);
39
+ __exportStar(require("./enums/MicroDepositStatusEnum"), exports);
@@ -1,3 +1,4 @@
1
+ import { CollectionPricingDto } from './CollectionPricingDto';
1
2
  /**
2
3
  * Cobro inmediato y síncrono, con el importe ya resuelto por el dominio.
3
4
  *
@@ -14,4 +15,9 @@ export declare class CollectRequest {
14
15
  productId: string;
15
16
  chargeId: string;
16
17
  amount: number;
18
+ /**
19
+ * Tarifa con la que se cobra este cargo. Ausente, se aplica la configurada para la fuente — que es
20
+ * lo normal; se manda sólo cuando este cobro tiene condiciones propias.
21
+ */
22
+ pricing?: CollectionPricingDto;
17
23
  }
@@ -11,6 +11,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CollectRequest = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const CollectionPricingDto_1 = require("./CollectionPricingDto");
14
16
  /**
15
17
  * Cobro inmediato y síncrono, con el importe ya resuelto por el dominio.
16
18
  *
@@ -47,3 +49,9 @@ __decorate([
47
49
  (0, class_validator_1.IsNumber)(),
48
50
  __metadata("design:type", Number)
49
51
  ], CollectRequest.prototype, "amount", void 0);
52
+ __decorate([
53
+ (0, class_validator_1.IsOptional)(),
54
+ (0, class_validator_1.ValidateNested)(),
55
+ (0, class_transformer_1.Type)(() => CollectionPricingDto_1.CollectionPricingDto),
56
+ __metadata("design:type", CollectionPricingDto_1.CollectionPricingDto)
57
+ ], CollectRequest.prototype, "pricing", void 0);
@@ -1,3 +1,4 @@
1
+ import { CollectionPricingDto } from './CollectionPricingDto';
1
2
  import { MechanismType } from '../enums/MechanismType';
2
3
  import { CollectionResultStatus } from '../enums/CollectionResultStatus';
3
4
  /** Un intento de cobro ejecutado sobre un intent, para el backoffice de monitoreo. */
@@ -11,5 +12,12 @@ export declare class CollectionAttemptDto {
11
12
  result?: CollectionResultStatus;
12
13
  errorCode?: string;
13
14
  errorDetail?: string;
15
+ /**
16
+ * La tarifa que se aplicó en ESTE intento. Se guarda por intento y no se deduce de la config
17
+ * porque la config puede haber cambiado desde entonces, y sin esto no habría forma de reconstruir
18
+ * con qué comisión se cobró.
19
+ */
20
+ pricing?: CollectionPricingDto;
21
+ collectionCycle?: number;
14
22
  createdAt: number;
15
23
  }
@@ -11,6 +11,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CollectionAttemptDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const CollectionPricingDto_1 = require("./CollectionPricingDto");
14
16
  const MechanismType_1 = require("../enums/MechanismType");
15
17
  const CollectionResultStatus_1 = require("../enums/CollectionResultStatus");
16
18
  /** Un intento de cobro ejecutado sobre un intent, para el backoffice de monitoreo. */
@@ -57,6 +59,17 @@ __decorate([
57
59
  (0, class_validator_1.IsString)(),
58
60
  __metadata("design:type", String)
59
61
  ], CollectionAttemptDto.prototype, "errorDetail", void 0);
62
+ __decorate([
63
+ (0, class_validator_1.IsOptional)(),
64
+ (0, class_validator_1.ValidateNested)(),
65
+ (0, class_transformer_1.Type)(() => CollectionPricingDto_1.CollectionPricingDto),
66
+ __metadata("design:type", CollectionPricingDto_1.CollectionPricingDto)
67
+ ], CollectionAttemptDto.prototype, "pricing", void 0);
68
+ __decorate([
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsInt)(),
71
+ __metadata("design:type", Number)
72
+ ], CollectionAttemptDto.prototype, "collectionCycle", void 0);
60
73
  __decorate([
61
74
  (0, class_validator_1.IsInt)(),
62
75
  __metadata("design:type", Number)
@@ -1,4 +1,5 @@
1
1
  import { CurrencyId } from '../../currency/enums/CurrencyId';
2
+ import { CollectionPricingDto } from './CollectionPricingDto';
2
3
  /**
3
4
  * Un cargo vivo, según el dominio que lleva la deuda.
4
5
  *
@@ -8,6 +9,11 @@ import { CurrencyId } from '../../currency/enums/CurrencyId';
8
9
  *
9
10
  * El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
10
11
  * asiento y los reportes puedan reconstruirlo.
12
+ *
13
+ * `pricing` sigue el mismo criterio que `amount`: las condiciones comerciales de una cartera las
14
+ * conoce el dominio, no el motor. Va por cargo y no por producto porque la misma mecánica de cobro
15
+ * puede tarifarse distinto para un cliente concreto —una promoción, un beneficio, la comisión
16
+ * perdonada de la primera cuota—. Ausente, el motor aplica la tarifa configurada para la fuente.
11
17
  */
12
18
  export declare class PendingChargeDto {
13
19
  chargeId: string;
@@ -25,5 +31,6 @@ export declare class PendingChargeDto {
25
31
  taxAmount?: number;
26
32
  outstandingBalance?: number;
27
33
  amountCollected?: number;
34
+ pricing?: CollectionPricingDto;
28
35
  metadata?: Record<string, unknown>;
29
36
  }
@@ -11,7 +11,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.PendingChargeDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
14
15
  const CurrencyId_1 = require("../../currency/enums/CurrencyId");
16
+ const CollectionPricingDto_1 = require("./CollectionPricingDto");
15
17
  /**
16
18
  * Un cargo vivo, según el dominio que lleva la deuda.
17
19
  *
@@ -21,6 +23,11 @@ const CurrencyId_1 = require("../../currency/enums/CurrencyId");
21
23
  *
22
24
  * El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
23
25
  * asiento y los reportes puedan reconstruirlo.
26
+ *
27
+ * `pricing` sigue el mismo criterio que `amount`: las condiciones comerciales de una cartera las
28
+ * conoce el dominio, no el motor. Va por cargo y no por producto porque la misma mecánica de cobro
29
+ * puede tarifarse distinto para un cliente concreto —una promoción, un beneficio, la comisión
30
+ * perdonada de la primera cuota—. Ausente, el motor aplica la tarifa configurada para la fuente.
24
31
  */
25
32
  class PendingChargeDto {
26
33
  }
@@ -90,6 +97,12 @@ __decorate([
90
97
  (0, class_validator_1.IsNumber)(),
91
98
  __metadata("design:type", Number)
92
99
  ], PendingChargeDto.prototype, "amountCollected", void 0);
100
+ __decorate([
101
+ (0, class_validator_1.IsOptional)(),
102
+ (0, class_validator_1.ValidateNested)(),
103
+ (0, class_transformer_1.Type)(() => CollectionPricingDto_1.CollectionPricingDto),
104
+ __metadata("design:type", CollectionPricingDto_1.CollectionPricingDto)
105
+ ], PendingChargeDto.prototype, "pricing", void 0);
93
106
  __decorate([
94
107
  (0, class_validator_1.IsOptional)(),
95
108
  (0, class_validator_1.IsObject)(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.386.0",
3
+ "version": "3.388.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,8 @@
1
+ import {ArrayNotEmpty, IsArray, IsString} from "class-validator";
2
+
3
+ export class ConfirmMicroDepositsRequest {
4
+ @IsArray()
5
+ @ArrayNotEmpty()
6
+ @IsString({each: true})
7
+ ids: string[];
8
+ }
@@ -0,0 +1,3 @@
1
+ export class ConfirmMicroDepositsResponse {
2
+ confirmed: number;
3
+ }
@@ -0,0 +1,5 @@
1
+ import {MicroDepositBankGroupDto} from "./MicroDepositBankGroupDto";
2
+
3
+ export class GetMicroDepositsResponse {
4
+ banks: MicroDepositBankGroupDto[];
5
+ }
@@ -0,0 +1,6 @@
1
+ import {MicroDepositDto} from "./MicroDepositDto";
2
+
3
+ export class MicroDepositBankGroupDto {
4
+ bankName: string;
5
+ deposits: MicroDepositDto[];
6
+ }
@@ -0,0 +1,5 @@
1
+ export class MicroDepositDto {
2
+ id: string;
3
+ amount: number;
4
+ currencyCode: string;
5
+ }
@@ -0,0 +1,5 @@
1
+ export enum MicroDepositStatusEnum {
2
+ PENDING = "PENDING",
3
+ CONFIRMED = "CONFIRMED",
4
+ SUPERSEDED = "SUPERSEDED"
5
+ }
@@ -11,9 +11,15 @@ export * from './dtos/CentralPaymentsTransactionInfo';
11
11
  export * from './dtos/CentralWebhookEventRequest';
12
12
  export * from './dtos/WebhookEventItem';
13
13
  export * from './dtos/GetEventsSinceResponse';
14
+ export * from './dtos/MicroDepositDto';
15
+ export * from './dtos/MicroDepositBankGroupDto';
16
+ export * from './dtos/GetMicroDepositsResponse';
17
+ export * from './dtos/ConfirmMicroDepositsRequest';
18
+ export * from './dtos/ConfirmMicroDepositsResponse';
14
19
 
15
20
  // central payments enums
16
21
  export * from './enums/ServiceStatusEnum';
17
22
  export * from './enums/MerchantLocationDistanceUnitEnum';
18
23
  export * from './enums/CentralPaymentTransactionTypeEnum';
19
24
  export * from './enums/CentralPaymentMetadataTypeEnum';
25
+ export * from './enums/MicroDepositStatusEnum';
@@ -1,4 +1,6 @@
1
- import { IsString, IsNumber } from 'class-validator';
1
+ import { IsString, IsNumber, IsOptional, ValidateNested } from 'class-validator';
2
+ import { Type } from 'class-transformer';
3
+ import { CollectionPricingDto } from './CollectionPricingDto';
2
4
 
3
5
  /**
4
6
  * Cobro inmediato y síncrono, con el importe ya resuelto por el dominio.
@@ -16,4 +18,10 @@ export class CollectRequest {
16
18
  @IsString() productId!: string;
17
19
  @IsString() chargeId!: string;
18
20
  @IsNumber() amount!: number;
21
+
22
+ /**
23
+ * Tarifa con la que se cobra este cargo. Ausente, se aplica la configurada para la fuente — que es
24
+ * lo normal; se manda sólo cuando este cobro tiene condiciones propias.
25
+ */
26
+ @IsOptional() @ValidateNested() @Type(() => CollectionPricingDto) pricing?: CollectionPricingDto;
19
27
  }
@@ -1,4 +1,6 @@
1
- import { IsString, IsInt, IsEnum, IsOptional, IsNumber } from 'class-validator';
1
+ import { IsString, IsInt, IsEnum, IsOptional, IsNumber, ValidateNested } from 'class-validator';
2
+ import { Type } from 'class-transformer';
3
+ import { CollectionPricingDto } from './CollectionPricingDto';
2
4
  import { MechanismType } from '../enums/MechanismType';
3
5
  import { CollectionResultStatus } from '../enums/CollectionResultStatus';
4
6
 
@@ -13,5 +15,13 @@ export class CollectionAttemptDto {
13
15
  @IsOptional() @IsEnum(CollectionResultStatus) result?: CollectionResultStatus;
14
16
  @IsOptional() @IsString() errorCode?: string;
15
17
  @IsOptional() @IsString() errorDetail?: string;
18
+
19
+ /**
20
+ * La tarifa que se aplicó en ESTE intento. Se guarda por intento y no se deduce de la config
21
+ * porque la config puede haber cambiado desde entonces, y sin esto no habría forma de reconstruir
22
+ * con qué comisión se cobró.
23
+ */
24
+ @IsOptional() @ValidateNested() @Type(() => CollectionPricingDto) pricing?: CollectionPricingDto;
25
+ @IsOptional() @IsInt() collectionCycle?: number;
16
26
  @IsInt() createdAt!: number; // epoch ms
17
27
  }
@@ -1,5 +1,7 @@
1
- import { IsString, IsInt, IsOptional, IsEnum, IsObject, IsNumber } from 'class-validator';
1
+ import { IsString, IsInt, IsOptional, IsEnum, IsObject, IsNumber, ValidateNested } from 'class-validator';
2
+ import { Type } from 'class-transformer';
2
3
  import { CurrencyId } from '../../currency/enums/CurrencyId';
4
+ import { CollectionPricingDto } from './CollectionPricingDto';
3
5
 
4
6
  /**
5
7
  * Un cargo vivo, según el dominio que lleva la deuda.
@@ -10,6 +12,11 @@ import { CurrencyId } from '../../currency/enums/CurrencyId';
10
12
  *
11
13
  * El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
12
14
  * asiento y los reportes puedan reconstruirlo.
15
+ *
16
+ * `pricing` sigue el mismo criterio que `amount`: las condiciones comerciales de una cartera las
17
+ * conoce el dominio, no el motor. Va por cargo y no por producto porque la misma mecánica de cobro
18
+ * puede tarifarse distinto para un cliente concreto —una promoción, un beneficio, la comisión
19
+ * perdonada de la primera cuota—. Ausente, el motor aplica la tarifa configurada para la fuente.
13
20
  */
14
21
  export class PendingChargeDto {
15
22
  @IsString() chargeId!: string; // record_id / INSTALLMENT#n
@@ -27,5 +34,6 @@ export class PendingChargeDto {
27
34
  @IsOptional() @IsNumber() taxAmount?: number;
28
35
  @IsOptional() @IsNumber() outstandingBalance?: number;
29
36
  @IsOptional() @IsNumber() amountCollected?: number;
37
+ @IsOptional() @ValidateNested() @Type(() => CollectionPricingDto) pricing?: CollectionPricingDto;
30
38
  @IsOptional() @IsObject() metadata?: Record<string, unknown>; // por-dominio (fiado_/loanco_interest, imei…)
31
39
  }