@fiado/type-kit 3.634.0 → 3.635.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.
@@ -105,6 +105,35 @@ describe('payments en RegisterPaymentRequest', () => {
105
105
  });
106
106
  });
107
107
 
108
+ describe('cobro de $0', () => {
109
+ it.each([
110
+ ['RegisterPaymentRequest', RegisterPaymentRequest],
111
+ ['DownPaymentRequest', DownPaymentRequest],
112
+ ])('%s de $0 no exige method ni payments', (_name, cls) => {
113
+ expect(errorsOf(cls as new () => object, { amountCents: 0 })).toEqual([]);
114
+ });
115
+
116
+ it.each([
117
+ ['RegisterPaymentRequest', RegisterPaymentRequest],
118
+ ['DownPaymentRequest', DownPaymentRequest],
119
+ ])('%s de $0 con method lo sigue validando', (_name, cls) => {
120
+ expect(errorsOf(cls as new () => object, { amountCents: 0, method: CASH })).toEqual([]);
121
+ expect(errorsOf(cls as new () => object, { amountCents: 0, method: 'CHEQUE' })).toEqual(['method']);
122
+ });
123
+
124
+ it.each([
125
+ ['RegisterPaymentRequest', RegisterPaymentRequest],
126
+ ['DownPaymentRequest', DownPaymentRequest],
127
+ ])('%s con monto mayor a cero sin payments sigue exigiendo method', (_name, cls) => {
128
+ expect(errorsOf(cls as new () => object, { amountCents: 100 })).toEqual(['method']);
129
+ });
130
+
131
+ it('WizardPayment de $0 guarda method y payments en null', () => {
132
+ expect(errorsOf(WizardPayment, { method: null, amountCents: 0, payments: null, paidAt: '2026-11-03T10:00:00.000Z' })).toEqual([]);
133
+ expect(errorsOf(WizardPayment, { method: 'CHEQUE', amountCents: 0, paidAt: '2026-11-03T10:00:00.000Z' })).toEqual(['method']);
134
+ });
135
+ });
136
+
108
137
  describe('payments en los demás contratos', () => {
109
138
  it('DownPaymentRequest acepta solo payments y valida la suma', () => {
110
139
  expect(errorsOf(DownPaymentRequest, { amountCents: 15000, payments: [cash, wire] })).toEqual([]);
@@ -2,12 +2,12 @@ import { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
2
2
  import { SalePayment } from './SalePayment';
3
3
  /** Registro del pago de contado dentro de la sesión (`WizardSession.payment`). SureKeep Fase 2 — pista Retail. */
4
4
  export declare class WizardPayment {
5
- /** @deprecated Usa `payments`; con varios pagos lleva el método del primero. */
6
- method: SalePaymentMethodEnum;
5
+ /** @deprecated Usa `payments`; con varios pagos lleva el método del primero. `null` en un cobro de $0. */
6
+ method: SalePaymentMethodEnum | null;
7
7
  amountCents: number;
8
8
  /** @deprecated Usa `payments`; es el comprobante como texto JSON. */
9
9
  detail?: string;
10
- /** Pagos del cobro (1 a 3); ausente en sesiones anteriores al campo. */
11
- payments?: SalePayment[];
10
+ /** Pagos del cobro (1 a 3); `null` en un cobro de $0, ausente en sesiones anteriores al campo. */
11
+ payments?: SalePayment[] | null;
12
12
  paidAt: string;
13
13
  }
@@ -21,6 +21,7 @@ class WizardPayment {
21
21
  exports.WizardPayment = WizardPayment;
22
22
  __decorate([
23
23
  (0, class_transformer_1.Expose)(),
24
+ (0, class_validator_1.ValidateIf)((o) => o.method != null),
24
25
  (0, class_validator_1.IsEnum)(SalePaymentMethodEnum_1.SalePaymentMethodEnum),
25
26
  __metadata("design:type", String)
26
27
  ], WizardPayment.prototype, "method", void 0);
@@ -11,7 +11,7 @@ import { SalePayment } from '../SalePayment';
11
11
  * SureKeep Fase 2 — pista SOFOM.
12
12
  */
13
13
  export declare class DownPaymentRequest {
14
- /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene. */
14
+ /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene y el monto es mayor a cero. */
15
15
  method?: SalePaymentMethodEnum;
16
16
  amountCents: number;
17
17
  /** @deprecated Usa el comprobante de cada elemento de `payments`. */
@@ -29,7 +29,7 @@ class DownPaymentRequest {
29
29
  exports.DownPaymentRequest = DownPaymentRequest;
30
30
  __decorate([
31
31
  (0, class_transformer_1.Expose)(),
32
- (0, class_validator_1.ValidateIf)((o) => o.payments == null || o.method !== undefined),
32
+ (0, class_validator_1.ValidateIf)((o) => o.method !== undefined || (o.payments == null && o.amountCents !== 0)),
33
33
  (0, class_validator_1.IsEnum)(SalePaymentMethodEnum_1.SalePaymentMethodEnum),
34
34
  __metadata("design:type", String)
35
35
  ], DownPaymentRequest.prototype, "method", void 0);
@@ -7,7 +7,7 @@ import { SalePayment } from '../SalePayment';
7
7
  * (D11) ANTES del registro; el folio no viaja en el body (lo posee el server). SureKeep Fase 2 — pista Retail.
8
8
  */
9
9
  export declare class RegisterPaymentRequest {
10
- /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene. */
10
+ /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene y el monto es mayor a cero. */
11
11
  method?: SalePaymentMethodEnum;
12
12
  amountCents: number;
13
13
  /** @deprecated Usa el comprobante de cada elemento de `payments`. */
@@ -25,7 +25,7 @@ class RegisterPaymentRequest {
25
25
  exports.RegisterPaymentRequest = RegisterPaymentRequest;
26
26
  __decorate([
27
27
  (0, class_transformer_1.Expose)(),
28
- (0, class_validator_1.ValidateIf)((o) => o.payments == null || o.method !== undefined),
28
+ (0, class_validator_1.ValidateIf)((o) => o.method !== undefined || (o.payments == null && o.amountCents !== 0)),
29
29
  (0, class_validator_1.IsEnum)(SalePaymentMethodEnum_1.SalePaymentMethodEnum),
30
30
  __metadata("design:type", String)
31
31
  ], RegisterPaymentRequest.prototype, "method", void 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.634.0",
3
+ "version": "3.635.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -1,5 +1,5 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsEnum, IsInt, IsOptional, IsString, Matches, Min } from 'class-validator';
2
+ import { IsEnum, IsInt, IsOptional, IsString, Matches, Min, ValidateIf } from 'class-validator';
3
3
  import { regexIso8601 } from '../../helpers/constans/regex';
4
4
  import { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
5
5
  import { IsSalePaymentList } from '../validators/IsSalePaymentList';
@@ -7,10 +7,11 @@ import { SalePayment } from './SalePayment';
7
7
 
8
8
  /** Registro del pago de contado dentro de la sesión (`WizardSession.payment`). SureKeep Fase 2 — pista Retail. */
9
9
  export class WizardPayment {
10
- /** @deprecated Usa `payments`; con varios pagos lleva el método del primero. */
10
+ /** @deprecated Usa `payments`; con varios pagos lleva el método del primero. `null` en un cobro de $0. */
11
11
  @Expose()
12
+ @ValidateIf((o: { method?: unknown }) => o.method != null)
12
13
  @IsEnum(SalePaymentMethodEnum)
13
- method!: SalePaymentMethodEnum;
14
+ method!: SalePaymentMethodEnum | null;
14
15
 
15
16
  @Expose()
16
17
  @IsInt()
@@ -23,11 +24,11 @@ export class WizardPayment {
23
24
  @IsString()
24
25
  detail?: string;
25
26
 
26
- /** Pagos del cobro (1 a 3); ausente en sesiones anteriores al campo. */
27
+ /** Pagos del cobro (1 a 3); `null` en un cobro de $0, ausente en sesiones anteriores al campo. */
27
28
  @Expose()
28
29
  @IsOptional()
29
30
  @IsSalePaymentList()
30
- payments?: SalePayment[];
31
+ payments?: SalePayment[] | null;
31
32
 
32
33
  @Expose()
33
34
  @IsString()
@@ -15,9 +15,9 @@ import { IsSalePaymentList } from '../../validators/IsSalePaymentList';
15
15
  * SureKeep Fase 2 — pista SOFOM.
16
16
  */
17
17
  export class DownPaymentRequest {
18
- /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene. */
18
+ /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene y el monto es mayor a cero. */
19
19
  @Expose()
20
- @ValidateIf((o: { payments?: unknown; method?: unknown }) => o.payments == null || o.method !== undefined)
20
+ @ValidateIf((o: { payments?: unknown; method?: unknown; amountCents?: unknown }) => o.method !== undefined || (o.payments == null && o.amountCents !== 0))
21
21
  @IsEnum(SalePaymentMethodEnum)
22
22
  method?: SalePaymentMethodEnum;
23
23
 
@@ -11,9 +11,9 @@ import { IsSalePaymentList } from '../../validators/IsSalePaymentList';
11
11
  * (D11) ANTES del registro; el folio no viaja en el body (lo posee el server). SureKeep Fase 2 — pista Retail.
12
12
  */
13
13
  export class RegisterPaymentRequest {
14
- /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene. */
14
+ /** @deprecated Usa `payments`; obligatorio solo si `payments` no viene y el monto es mayor a cero. */
15
15
  @Expose()
16
- @ValidateIf((o: { payments?: unknown; method?: unknown }) => o.payments == null || o.method !== undefined)
16
+ @ValidateIf((o: { payments?: unknown; method?: unknown; amountCents?: unknown }) => o.method !== undefined || (o.payments == null && o.amountCents !== 0))
17
17
  @IsEnum(SalePaymentMethodEnum)
18
18
  method?: SalePaymentMethodEnum;
19
19