@fiado/type-kit 3.424.0 → 3.426.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/collection/dtos/DeregisterChargeResponse.d.ts +11 -0
- package/bin/collection/dtos/DeregisterChargeResponse.js +17 -0
- package/bin/collection/dtos/PendingChargeDto.d.ts +3 -3
- package/bin/collection/dtos/PendingChargeDto.js +3 -3
- package/bin/remittance/dtos/RemittanceCountryConfig.d.ts +4 -1
- package/bin/remittance/dtos/RemittanceCountryConfig.js +7 -1
- package/bin/remittance/dtos/RemittancePricing.d.ts +5 -1
- package/bin/remittance/dtos/RemittancePricing.js +8 -1
- package/bin/remittance/dtos/internal/RemittancePricingResolve.d.ts +2 -0
- package/bin/remittance/dtos/internal/RemittancePricingSchedule.d.ts +2 -0
- package/bin/remittance/dtos/internal/RemittancePricingSchedule.js +5 -0
- package/package.json +1 -1
- package/src/collection/dtos/DeregisterChargeResponse.ts +12 -1
- package/src/collection/dtos/PendingChargeDto.ts +4 -4
- package/src/remittance/dtos/RemittanceCountryConfig.ts +9 -2
- package/src/remittance/dtos/RemittancePricing.ts +10 -1
- package/src/remittance/dtos/internal/RemittancePricingResolve.ts +2 -0
- package/src/remittance/dtos/internal/RemittancePricingSchedule.ts +5 -0
|
@@ -1,8 +1,19 @@
|
|
|
1
|
+
import { CollectionState } from '../enums/CollectionState';
|
|
1
2
|
import { DeregisterChargeStatus } from '../enums/DeregisterChargeStatus';
|
|
2
3
|
/**
|
|
3
4
|
* Resultado de dar de baja un cargo en el motor de cobro. Un cargo inexistente no viaja en este
|
|
4
5
|
* DTO: el motor responde 404.
|
|
6
|
+
*
|
|
7
|
+
* `finalState` y `amountCollected` describen en qué terminó el cobro, y sólo tienen sentido cuando
|
|
8
|
+
* `status` es `ALREADY_TERMINAL`: ese status por sí solo no distingue el cargo que se cobró del que
|
|
9
|
+
* ya estaba cancelado, y sin esa distinción quien da de baja no puede reconciliar un cobro cuyo
|
|
10
|
+
* resultado se perdió en la cola muerta. Son opcionales para no romper al consumidor que ya lee
|
|
11
|
+
* este DTO.
|
|
5
12
|
*/
|
|
6
13
|
export declare class DeregisterChargeResponse {
|
|
7
14
|
status: DeregisterChargeStatus;
|
|
15
|
+
/** Estado terminal del cobro: `COLLECTED` o `CANCELLED`. */
|
|
16
|
+
finalState?: CollectionState;
|
|
17
|
+
/** Lo que el motor alcanzó a cobrar, en PESOS con decimales. */
|
|
18
|
+
amountCollected?: number;
|
|
8
19
|
}
|
|
@@ -11,10 +11,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DeregisterChargeResponse = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
|
+
const CollectionState_1 = require("../enums/CollectionState");
|
|
14
15
|
const DeregisterChargeStatus_1 = require("../enums/DeregisterChargeStatus");
|
|
15
16
|
/**
|
|
16
17
|
* Resultado de dar de baja un cargo en el motor de cobro. Un cargo inexistente no viaja en este
|
|
17
18
|
* DTO: el motor responde 404.
|
|
19
|
+
*
|
|
20
|
+
* `finalState` y `amountCollected` describen en qué terminó el cobro, y sólo tienen sentido cuando
|
|
21
|
+
* `status` es `ALREADY_TERMINAL`: ese status por sí solo no distingue el cargo que se cobró del que
|
|
22
|
+
* ya estaba cancelado, y sin esa distinción quien da de baja no puede reconciliar un cobro cuyo
|
|
23
|
+
* resultado se perdió en la cola muerta. Son opcionales para no romper al consumidor que ya lee
|
|
24
|
+
* este DTO.
|
|
18
25
|
*/
|
|
19
26
|
class DeregisterChargeResponse {
|
|
20
27
|
}
|
|
@@ -23,3 +30,13 @@ __decorate([
|
|
|
23
30
|
(0, class_validator_1.IsEnum)(DeregisterChargeStatus_1.DeregisterChargeStatus),
|
|
24
31
|
__metadata("design:type", String)
|
|
25
32
|
], DeregisterChargeResponse.prototype, "status", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, class_validator_1.IsOptional)(),
|
|
35
|
+
(0, class_validator_1.IsEnum)(CollectionState_1.CollectionState),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], DeregisterChargeResponse.prototype, "finalState", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, class_validator_1.IsOptional)(),
|
|
40
|
+
(0, class_validator_1.IsNumber)(),
|
|
41
|
+
__metadata("design:type", Number)
|
|
42
|
+
], DeregisterChargeResponse.prototype, "amountCollected", void 0);
|
|
@@ -3,9 +3,9 @@ import { CollectionPricingDto } from './CollectionPricingDto';
|
|
|
3
3
|
/**
|
|
4
4
|
* Un cargo vivo, según el dominio que lleva la deuda.
|
|
5
5
|
*
|
|
6
|
-
* `amount` es lo que queda por cobrar AHORA, con
|
|
7
|
-
* pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
8
|
-
* se declare.
|
|
6
|
+
* `amount` es lo que queda por cobrar AHORA, en PESOS con decimales —no en centavos—, con las reglas
|
|
7
|
+
* del dominio ya aplicadas —mora corrida, pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
8
|
+
* lo valida contra nada: cobra lo que aquí se declare, en la escala en que aquí se declare.
|
|
9
9
|
*
|
|
10
10
|
* El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
|
|
11
11
|
* asiento y los reportes puedan reconstruirlo.
|
|
@@ -17,9 +17,9 @@ const CollectionPricingDto_1 = require("./CollectionPricingDto");
|
|
|
17
17
|
/**
|
|
18
18
|
* Un cargo vivo, según el dominio que lleva la deuda.
|
|
19
19
|
*
|
|
20
|
-
* `amount` es lo que queda por cobrar AHORA, con
|
|
21
|
-
* pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
22
|
-
* se declare.
|
|
20
|
+
* `amount` es lo que queda por cobrar AHORA, en PESOS con decimales —no en centavos—, con las reglas
|
|
21
|
+
* del dominio ya aplicadas —mora corrida, pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
22
|
+
* lo valida contra nada: cobra lo que aquí se declare, en la escala en que aquí se declare.
|
|
23
23
|
*
|
|
24
24
|
* El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
|
|
25
25
|
* asiento y los reportes puedan reconstruirlo.
|
|
@@ -19,15 +19,18 @@ export declare class RemittanceCountryConfigItem {
|
|
|
19
19
|
sortOrder: number;
|
|
20
20
|
enabled: boolean;
|
|
21
21
|
configured: boolean;
|
|
22
|
+
/** Mínimo de envío en USD (piso de UniTeller: 25). Los tramos de precio arrancan aquí. */
|
|
23
|
+
minAmountUSD: number;
|
|
22
24
|
}
|
|
23
25
|
/** Response de GET /backoffice/config/countries (config chica, sin paginación). */
|
|
24
26
|
export declare class RemittanceCountryConfigListResponse {
|
|
25
27
|
items: RemittanceCountryConfigItem[];
|
|
26
28
|
}
|
|
27
|
-
/** Body de PUT /backoffice/config/countries/{countryISO}.
|
|
29
|
+
/** Body de PUT /backoffice/config/countries/{countryISO}. Todos opcionales (merge con lo existente). */
|
|
28
30
|
export declare class RemittanceCountryUpdateRequest {
|
|
29
31
|
enabled?: boolean;
|
|
30
32
|
name?: string;
|
|
33
|
+
minAmountUSD?: number;
|
|
31
34
|
}
|
|
32
35
|
/** Un país + su orden final. */
|
|
33
36
|
export declare class RemittanceCountryOrderItem {
|
|
@@ -30,7 +30,7 @@ exports.RemittanceCountryConfigItem = RemittanceCountryConfigItem;
|
|
|
30
30
|
class RemittanceCountryConfigListResponse {
|
|
31
31
|
}
|
|
32
32
|
exports.RemittanceCountryConfigListResponse = RemittanceCountryConfigListResponse;
|
|
33
|
-
/** Body de PUT /backoffice/config/countries/{countryISO}.
|
|
33
|
+
/** Body de PUT /backoffice/config/countries/{countryISO}. Todos opcionales (merge con lo existente). */
|
|
34
34
|
class RemittanceCountryUpdateRequest {
|
|
35
35
|
}
|
|
36
36
|
exports.RemittanceCountryUpdateRequest = RemittanceCountryUpdateRequest;
|
|
@@ -45,6 +45,12 @@ __decorate([
|
|
|
45
45
|
(0, class_validator_1.Length)(1, 60),
|
|
46
46
|
__metadata("design:type", String)
|
|
47
47
|
], RemittanceCountryUpdateRequest.prototype, "name", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, class_validator_1.IsOptional)(),
|
|
50
|
+
(0, class_validator_1.IsNumber)(),
|
|
51
|
+
(0, class_validator_1.Min)(1),
|
|
52
|
+
__metadata("design:type", Number)
|
|
53
|
+
], RemittanceCountryUpdateRequest.prototype, "minAmountUSD", void 0);
|
|
48
54
|
/** Un país + su orden final. */
|
|
49
55
|
class RemittanceCountryOrderItem {
|
|
50
56
|
}
|
|
@@ -9,12 +9,14 @@ import { RemittanceCorridor } from "../enums/RemittanceCorridor";
|
|
|
9
9
|
* Promociones. retail = wholesale × (1 − markupBps/10000), SIN clampear
|
|
10
10
|
* (el tope ≤ base de UNIR es transitorio).
|
|
11
11
|
*/
|
|
12
|
-
/** Tramo de service fee. Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
12
|
+
/** Tramo de service fee (+ markup opcional). Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
13
13
|
export declare class PricingTier {
|
|
14
14
|
amountMin: number;
|
|
15
15
|
/** Display ("$1–$49"); null/ausente = sin tope (último tramo). El matching NO lo usa. */
|
|
16
16
|
amountMax?: number | null;
|
|
17
17
|
serviceFee: number;
|
|
18
|
+
/** Override del markup de la combinación para este tramo (bps CON SIGNO). Ausente = hereda. */
|
|
19
|
+
markupBps?: number;
|
|
18
20
|
/** ISO date (YYYY-MM-DD) "FEE DESDE" — informativo. */
|
|
19
21
|
effectiveFrom: string;
|
|
20
22
|
}
|
|
@@ -74,6 +76,8 @@ export declare class SimulatePricingRequest {
|
|
|
74
76
|
export declare class SimulatePricingResponse {
|
|
75
77
|
/** ExternalQuickQuotes (vivo). */
|
|
76
78
|
wholesale: number;
|
|
79
|
+
/** Markup aplicado: el del tramo matcheado o, si no tiene override, el de la combinación. */
|
|
80
|
+
markupBps: number;
|
|
77
81
|
/** round4(wholesale × (1 − markupBps/10000)) — SIN clampear (markup negativo ⇒ retail > wholesale). */
|
|
78
82
|
retail: number;
|
|
79
83
|
/** Del tramo matcheado (mayor amountMin ≤ amountUSD). */
|
|
@@ -23,7 +23,7 @@ const RemittanceCorridor_1 = require("../enums/RemittanceCorridor");
|
|
|
23
23
|
* Promociones. retail = wholesale × (1 − markupBps/10000), SIN clampear
|
|
24
24
|
* (el tope ≤ base de UNIR es transitorio).
|
|
25
25
|
*/
|
|
26
|
-
/** Tramo de service fee. Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
26
|
+
/** Tramo de service fee (+ markup opcional). Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
27
27
|
class PricingTier {
|
|
28
28
|
}
|
|
29
29
|
exports.PricingTier = PricingTier;
|
|
@@ -43,6 +43,13 @@ __decorate([
|
|
|
43
43
|
(0, class_validator_1.Max)(100),
|
|
44
44
|
__metadata("design:type", Number)
|
|
45
45
|
], PricingTier.prototype, "serviceFee", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, class_validator_1.IsOptional)(),
|
|
48
|
+
(0, class_validator_1.IsInt)(),
|
|
49
|
+
(0, class_validator_1.Min)(-500),
|
|
50
|
+
(0, class_validator_1.Max)(500),
|
|
51
|
+
__metadata("design:type", Number)
|
|
52
|
+
], PricingTier.prototype, "markupBps", void 0);
|
|
46
53
|
__decorate([
|
|
47
54
|
(0, class_validator_1.IsString)(),
|
|
48
55
|
(0, class_validator_1.Length)(10, 10),
|
|
@@ -29,5 +29,7 @@ export declare class PricingResolveResponse {
|
|
|
29
29
|
appliedRuleIds: string[];
|
|
30
30
|
/** true si no había combinación (se usó Estándar del corridor o markup 0 + fee 0). */
|
|
31
31
|
fallback: boolean;
|
|
32
|
+
/** Mínimo de envío del país destino (RemittanceCountryConfig_GT). El connector rechaza montos menores. */
|
|
33
|
+
minAmountUSD: number;
|
|
32
34
|
blocked?: PricingResolveBlocked;
|
|
33
35
|
}
|
|
@@ -15,6 +15,8 @@ export declare class PricingScheduleTier {
|
|
|
15
15
|
/** Display; null/ausente = último tramo (sin tope). El matching usa amountMin. */
|
|
16
16
|
amountMax?: number | null;
|
|
17
17
|
serviceFee: number;
|
|
18
|
+
/** Markup efectivo del tramo (bps CON SIGNO, tras promo). Ausente = aplica el markupBps de la respuesta. */
|
|
19
|
+
markupBps?: number;
|
|
18
20
|
}
|
|
19
21
|
/** Promoción AUTOMATIC vigente aplicada al schedule (ausente = no hay). */
|
|
20
22
|
export declare class PricingScheduleAppliedPromo {
|
|
@@ -49,6 +49,11 @@ __decorate([
|
|
|
49
49
|
(0, class_validator_1.Min)(0),
|
|
50
50
|
__metadata("design:type", Number)
|
|
51
51
|
], PricingScheduleTier.prototype, "serviceFee", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_validator_1.IsOptional)(),
|
|
54
|
+
(0, class_validator_1.IsInt)(),
|
|
55
|
+
__metadata("design:type", Number)
|
|
56
|
+
], PricingScheduleTier.prototype, "markupBps", void 0);
|
|
52
57
|
/** Promoción AUTOMATIC vigente aplicada al schedule (ausente = no hay). */
|
|
53
58
|
class PricingScheduleAppliedPromo {
|
|
54
59
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
import { IsEnum } from 'class-validator';
|
|
1
|
+
import { IsEnum, IsNumber, IsOptional } from 'class-validator';
|
|
2
|
+
import { CollectionState } from '../enums/CollectionState';
|
|
2
3
|
import { DeregisterChargeStatus } from '../enums/DeregisterChargeStatus';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Resultado de dar de baja un cargo en el motor de cobro. Un cargo inexistente no viaja en este
|
|
6
7
|
* DTO: el motor responde 404.
|
|
8
|
+
*
|
|
9
|
+
* `finalState` y `amountCollected` describen en qué terminó el cobro, y sólo tienen sentido cuando
|
|
10
|
+
* `status` es `ALREADY_TERMINAL`: ese status por sí solo no distingue el cargo que se cobró del que
|
|
11
|
+
* ya estaba cancelado, y sin esa distinción quien da de baja no puede reconciliar un cobro cuyo
|
|
12
|
+
* resultado se perdió en la cola muerta. Son opcionales para no romper al consumidor que ya lee
|
|
13
|
+
* este DTO.
|
|
7
14
|
*/
|
|
8
15
|
export class DeregisterChargeResponse {
|
|
9
16
|
@IsEnum(DeregisterChargeStatus) status!: DeregisterChargeStatus;
|
|
17
|
+
/** Estado terminal del cobro: `COLLECTED` o `CANCELLED`. */
|
|
18
|
+
@IsOptional() @IsEnum(CollectionState) finalState?: CollectionState;
|
|
19
|
+
/** Lo que el motor alcanzó a cobrar, en PESOS con decimales. */
|
|
20
|
+
@IsOptional() @IsNumber() amountCollected?: number;
|
|
10
21
|
}
|
|
@@ -6,9 +6,9 @@ import { CollectionPricingDto } from './CollectionPricingDto';
|
|
|
6
6
|
/**
|
|
7
7
|
* Un cargo vivo, según el dominio que lleva la deuda.
|
|
8
8
|
*
|
|
9
|
-
* `amount` es lo que queda por cobrar AHORA, con
|
|
10
|
-
* pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
11
|
-
* se declare.
|
|
9
|
+
* `amount` es lo que queda por cobrar AHORA, en PESOS con decimales —no en centavos—, con las reglas
|
|
10
|
+
* del dominio ya aplicadas —mora corrida, pagos recibidos por otra vía—. El motor no lo recalcula ni
|
|
11
|
+
* lo valida contra nada: cobra lo que aquí se declare, en la escala en que aquí se declare.
|
|
12
12
|
*
|
|
13
13
|
* El desglose (capital, interés, impuesto) es opcional y no participa del cobro: viaja para que el
|
|
14
14
|
* asiento y los reportes puedan reconstruirlo.
|
|
@@ -25,7 +25,7 @@ export class PendingChargeDto {
|
|
|
25
25
|
@IsString() domain!: string; // une-credit | surekeep-retail
|
|
26
26
|
@IsString() parentDebtId!: string; // credit_id / CREDIT#id
|
|
27
27
|
@IsInt() installmentNumber!: number; // coupon_number / installment_number
|
|
28
|
-
@IsNumber() amount!: number;
|
|
28
|
+
@IsNumber() amount!: number; // PESOS con decimales (1026.66), NO centavos
|
|
29
29
|
@IsEnum(CurrencyId) currency!: CurrencyId;
|
|
30
30
|
@IsString() dueDate!: string; // ISO date
|
|
31
31
|
@IsString() status!: string; // estado del cargo en el dominio (normalizado por el motor)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IsArray, IsBoolean, IsInt, IsOptional, IsString, Length, Min, ValidateNested } from "class-validator";
|
|
1
|
+
import { IsArray, IsBoolean, IsInt, IsNumber, IsOptional, IsString, Length, Min, ValidateNested } from "class-validator";
|
|
2
2
|
import { Type } from "class-transformer";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -24,6 +24,8 @@ export class RemittanceCountryConfigItem {
|
|
|
24
24
|
sortOrder!: number;
|
|
25
25
|
enabled!: boolean;
|
|
26
26
|
configured!: boolean;
|
|
27
|
+
/** Mínimo de envío en USD (piso de UniTeller: 25). Los tramos de precio arrancan aquí. */
|
|
28
|
+
minAmountUSD!: number;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
/** Response de GET /backoffice/config/countries (config chica, sin paginación). */
|
|
@@ -31,7 +33,7 @@ export class RemittanceCountryConfigListResponse {
|
|
|
31
33
|
items!: RemittanceCountryConfigItem[];
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
/** Body de PUT /backoffice/config/countries/{countryISO}.
|
|
36
|
+
/** Body de PUT /backoffice/config/countries/{countryISO}. Todos opcionales (merge con lo existente). */
|
|
35
37
|
export class RemittanceCountryUpdateRequest {
|
|
36
38
|
@IsOptional()
|
|
37
39
|
@IsBoolean()
|
|
@@ -41,6 +43,11 @@ export class RemittanceCountryUpdateRequest {
|
|
|
41
43
|
@IsString()
|
|
42
44
|
@Length(1, 60)
|
|
43
45
|
name?: string;
|
|
46
|
+
|
|
47
|
+
@IsOptional()
|
|
48
|
+
@IsNumber()
|
|
49
|
+
@Min(1)
|
|
50
|
+
minAmountUSD?: number;
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
/** Un país + su orden final. */
|
|
@@ -27,7 +27,7 @@ import { RemittanceCorridor } from "../enums/RemittanceCorridor";
|
|
|
27
27
|
* (el tope ≤ base de UNIR es transitorio).
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
/** Tramo de service fee. Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
30
|
+
/** Tramo de service fee (+ markup opcional). Matching = MAYOR amountMin ≤ monto (amountMax es SOLO display). */
|
|
31
31
|
export class PricingTier {
|
|
32
32
|
@IsNumber()
|
|
33
33
|
@Min(1)
|
|
@@ -43,6 +43,13 @@ export class PricingTier {
|
|
|
43
43
|
@Max(100)
|
|
44
44
|
serviceFee!: number;
|
|
45
45
|
|
|
46
|
+
/** Override del markup de la combinación para este tramo (bps CON SIGNO). Ausente = hereda. */
|
|
47
|
+
@IsOptional()
|
|
48
|
+
@IsInt()
|
|
49
|
+
@Min(-500)
|
|
50
|
+
@Max(500)
|
|
51
|
+
markupBps?: number;
|
|
52
|
+
|
|
46
53
|
/** ISO date (YYYY-MM-DD) "FEE DESDE" — informativo. */
|
|
47
54
|
@IsString()
|
|
48
55
|
@Length(10, 10)
|
|
@@ -164,6 +171,8 @@ export class SimulatePricingRequest {
|
|
|
164
171
|
export class SimulatePricingResponse {
|
|
165
172
|
/** ExternalQuickQuotes (vivo). */
|
|
166
173
|
wholesale!: number;
|
|
174
|
+
/** Markup aplicado: el del tramo matcheado o, si no tiene override, el de la combinación. */
|
|
175
|
+
markupBps!: number;
|
|
167
176
|
/** round4(wholesale × (1 − markupBps/10000)) — SIN clampear (markup negativo ⇒ retail > wholesale). */
|
|
168
177
|
retail!: number;
|
|
169
178
|
/** Del tramo matcheado (mayor amountMin ≤ amountUSD). */
|
|
@@ -43,5 +43,7 @@ export class PricingResolveResponse {
|
|
|
43
43
|
appliedRuleIds!: string[];
|
|
44
44
|
/** true si no había combinación (se usó Estándar del corridor o markup 0 + fee 0). */
|
|
45
45
|
fallback!: boolean;
|
|
46
|
+
/** Mínimo de envío del país destino (RemittanceCountryConfig_GT). El connector rechaza montos menores. */
|
|
47
|
+
minAmountUSD!: number;
|
|
46
48
|
blocked?: PricingResolveBlocked;
|
|
47
49
|
}
|
|
@@ -40,6 +40,11 @@ export class PricingScheduleTier {
|
|
|
40
40
|
@IsNumber()
|
|
41
41
|
@Min(0)
|
|
42
42
|
serviceFee!: number;
|
|
43
|
+
|
|
44
|
+
/** Markup efectivo del tramo (bps CON SIGNO, tras promo). Ausente = aplica el markupBps de la respuesta. */
|
|
45
|
+
@IsOptional()
|
|
46
|
+
@IsInt()
|
|
47
|
+
markupBps?: number;
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
/** Promoción AUTOMATIC vigente aplicada al schedule (ausente = no hay). */
|