@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.
@@ -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 las reglas del dominio ya aplicadas —mora corrida,
7
- * pagos recibidos por otra vía—. El motor no lo recalcula ni lo valida contra nada: cobra lo que aquí
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 las reglas del dominio ya aplicadas —mora corrida,
21
- * pagos recibidos por otra vía—. El motor no lo recalcula ni lo valida contra nada: cobra lo que aquí
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}. Ambos opcionales (merge con lo existente). */
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}. Ambos opcionales (merge con lo existente). */
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.424.0",
3
+ "version": "3.426.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -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 las reglas del dominio ya aplicadas —mora corrida,
10
- * pagos recibidos por otra vía—. El motor no lo recalcula ni lo valida contra nada: cobra lo que aquí
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; // centavos
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}. Ambos opcionales (merge con lo existente). */
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). */