@fiado/type-kit 3.603.0 → 3.604.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.
@@ -4,9 +4,11 @@ import { validateSync } from 'class-validator';
4
4
  import {
5
5
  GetRetailInventoryRequest,
6
6
  type GetRetailInventoryResponse,
7
+ type InvalidRetailInventoryMovement,
7
8
  ListRetailInventoryMovementsRequest,
8
9
  type ListRetailInventoryMovementsResponse,
9
10
  ReconciliationEntityEnum,
11
+ RetailEventRejectCodeEnum,
10
12
  ReconciliationPageMessage,
11
13
  ReconciliationTriggerEnum,
12
14
  } from '../../../src/retailIntegration';
@@ -61,6 +63,17 @@ describe('ListRetailInventoryMovementsRequest', () => {
61
63
  meta: { count: 1, nextToken: null },
62
64
  };
63
65
  expect(response.meta.nextToken).toBeNull();
66
+ expect(response.invalidItems).toBeUndefined();
67
+ });
68
+
69
+ it('la respuesta lista los movimientos inválidos con índice, eventId opcional y rutas', () => {
70
+ const invalid: InvalidRetailInventoryMovement[] = [
71
+ { index: 3, eventId: 'evt-4', code: RetailEventRejectCodeEnum.INVALID_PAYLOAD, invalidPaths: ['payload.storeId'] },
72
+ { index: 7, code: RetailEventRejectCodeEnum.INVALID_PAYLOAD, invalidPaths: ['eventId', 'occurredAt'] },
73
+ ];
74
+ const response: ListRetailInventoryMovementsResponse = { items: [], meta: { count: 0, nextToken: null }, invalidItems: invalid };
75
+ expect(response.invalidItems?.map((i) => i.index)).toEqual([3, 7]);
76
+ expect(response.invalidItems?.[1].eventId).toBeUndefined();
64
77
  });
65
78
  });
66
79
 
@@ -26,7 +26,7 @@ async function errorsOf(cls: new () => object, plain: object): Promise<string[]>
26
26
  const cashPayment = { method: 'CASH', amount: '400.00', cardLast4: null, authCode: null, speiTrackingKey: null, senderClabe: null } as const;
27
27
  const cardPayment = { method: 'CARD', amount: '200.00', cardLast4: '4242', authCode: 'A1B2C3', speiTrackingKey: null, senderClabe: null } as const;
28
28
  const wirePayment = {
29
- method: 'WIRE', amount: '200.00', cardLast4: null, authCode: null, speiTrackingKey: '123456789012345678', senderClabe: '012180001234567897',
29
+ method: 'WIRE', amount: '200.00', cardLast4: null, authCode: null, speiTrackingKey: 'MBAN01002610160000123ABCD', senderClabe: '012180001234567897',
30
30
  } as const;
31
31
 
32
32
  // Literal tipado: prueba en compilación que la clase sigue aceptando objetos planos.
@@ -145,6 +145,11 @@ describe('RetailSystemSale.payments', () => {
145
145
  expect(await errorsOf(RetailSystemSale, { ...sale, payments: [cashPayment, { ...wirePayment, senderClabe: null }] })).toEqual([]);
146
146
  });
147
147
 
148
+ it('acepta speiTrackingKey de 1 a 30 alfanuméricos', async () => {
149
+ expect(await errorsOf(RetailSystemSale, { ...sale, payments: [cashPayment, { ...wirePayment, speiTrackingKey: '7' }] })).toEqual([]);
150
+ expect(await errorsOf(RetailSystemSale, { ...sale, payments: [cashPayment, { ...wirePayment, speiTrackingKey: 'A'.repeat(30) }] })).toEqual([]);
151
+ });
152
+
148
153
  it('acepta FIADO sin detalle', async () => {
149
154
  expect(await errorsOf(RetailSystemSale, { ...sale, payments: [{ ...cashPayment, method: 'FIADO', amount: '600.00' }] })).toEqual([]);
150
155
  });
@@ -182,7 +187,11 @@ describe('RetailSystemSale.payments', () => {
182
187
 
183
188
  it.each([
184
189
  ['speiTrackingKey', { speiTrackingKey: null }],
185
- ['speiTrackingKey', { speiTrackingKey: '12345' }],
190
+ ['speiTrackingKey', { speiTrackingKey: '' }],
191
+ ['speiTrackingKey', { speiTrackingKey: 'A'.repeat(31) }],
192
+ ['speiTrackingKey', { speiTrackingKey: 'MBAN-0100-2610' }],
193
+ ['speiTrackingKey', { speiTrackingKey: 'MBAN 01002610' }],
194
+ ['senderClabe', { senderClabe: '01218000123456789A' }],
186
195
  ['senderClabe', { senderClabe: '0121' }],
187
196
  ['cardLast4', { cardLast4: '4242' }],
188
197
  ])('rechaza %s fuera de regla en WIRE', async (field, patch) => {
@@ -53,8 +53,9 @@ export declare const RETAIL_SALE_POSITIVE_DECIMAL_PATTERN: RegExp;
53
53
  export declare const RETAIL_SALE_ID_TEXT_PATTERN: RegExp;
54
54
  /** Últimos 4 dígitos de la tarjeta en un pago `CARD`. */
55
55
  export declare const RETAIL_CARD_LAST4_PATTERN: RegExp;
56
- /** Clave de rastreo SPEI y CLABE de un pago `WIRE`: 18 dígitos. */
56
+ /** Clave de rastreo SPEI de un pago `WIRE`: alfanumérica de 1 a 30, como la define Banxico. */
57
57
  export declare const RETAIL_SPEI_TRACKING_KEY_PATTERN: RegExp;
58
+ /** CLABE de la cuenta que envió un pago `WIRE`: 18 dígitos. */
58
59
  export declare const RETAIL_CLABE_PATTERN: RegExp;
59
60
  /** Tope del motivo de cancelación de una venta. */
60
61
  export declare const RETAIL_CANCEL_REASON_MAX_LENGTH = 200;
@@ -56,8 +56,9 @@ exports.RETAIL_SALE_POSITIVE_DECIMAL_PATTERN = /^(?=.*[1-9])\d{1,12}\.\d{2}$/;
56
56
  exports.RETAIL_SALE_ID_TEXT_PATTERN = /^(?=.*\S).{1,64}$/;
57
57
  /** Últimos 4 dígitos de la tarjeta en un pago `CARD`. */
58
58
  exports.RETAIL_CARD_LAST4_PATTERN = /^\d{4}$/;
59
- /** Clave de rastreo SPEI y CLABE de un pago `WIRE`: 18 dígitos. */
60
- exports.RETAIL_SPEI_TRACKING_KEY_PATTERN = /^\d{18}$/;
59
+ /** Clave de rastreo SPEI de un pago `WIRE`: alfanumérica de 1 a 30, como la define Banxico. */
60
+ exports.RETAIL_SPEI_TRACKING_KEY_PATTERN = /^[A-Za-z0-9]{1,30}$/;
61
+ /** CLABE de la cuenta que envió un pago `WIRE`: 18 dígitos. */
61
62
  exports.RETAIL_CLABE_PATTERN = /^\d{18}$/;
62
63
  /** Tope del motivo de cancelación de una venta. */
63
64
  exports.RETAIL_CANCEL_REASON_MAX_LENGTH = 200;
@@ -1,3 +1,4 @@
1
+ import { RetailEventRejectCodeEnum } from '../enums';
1
2
  import { RetailInventoryMeta, RetailPageMeta } from '../models/RetailPageMeta';
2
3
  import { RetailSystemInventoryMovement, RetailSystemPiece, RetailSystemStock } from '../models/RetailSystemInventory';
3
4
  import { RetailSystemProduct } from '../models/RetailSystemProduct';
@@ -19,10 +20,18 @@ export interface GetRetailInventoryResponse {
19
20
  stock: RetailSystemStock[];
20
21
  meta: RetailInventoryMeta;
21
22
  }
22
- /** `data` de `GET /private/retail/inventory/movements`. */
23
+ /** Movimiento de la página que no cumple el sobre del webhook; catalog lo salta y lo cuenta. */
24
+ export interface InvalidRetailInventoryMovement {
25
+ index: number;
26
+ eventId?: string;
27
+ code: RetailEventRejectCodeEnum.INVALID_PAYLOAD;
28
+ invalidPaths: string[];
29
+ }
30
+ /** `data` de `GET /private/retail/inventory/movements`; `invalidItems` lista los movimientos descartados. */
23
31
  export interface ListRetailInventoryMovementsResponse {
24
32
  items: RetailSystemInventoryMovement[];
25
33
  meta: RetailPageMeta;
34
+ invalidItems?: InvalidRetailInventoryMovement[];
26
35
  }
27
36
  /** `data` de `GET /private/retail/users`. */
28
37
  export interface ListRetailUsersResponse {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.603.0",
3
+ "version": "3.604.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -79,8 +79,10 @@ export const RETAIL_SALE_ID_TEXT_PATTERN = /^(?=.*\S).{1,64}$/;
79
79
  /** Últimos 4 dígitos de la tarjeta en un pago `CARD`. */
80
80
  export const RETAIL_CARD_LAST4_PATTERN = /^\d{4}$/;
81
81
 
82
- /** Clave de rastreo SPEI y CLABE de un pago `WIRE`: 18 dígitos. */
83
- export const RETAIL_SPEI_TRACKING_KEY_PATTERN = /^\d{18}$/;
82
+ /** Clave de rastreo SPEI de un pago `WIRE`: alfanumérica de 1 a 30, como la define Banxico. */
83
+ export const RETAIL_SPEI_TRACKING_KEY_PATTERN = /^[A-Za-z0-9]{1,30}$/;
84
+
85
+ /** CLABE de la cuenta que envió un pago `WIRE`: 18 dígitos. */
84
86
  export const RETAIL_CLABE_PATTERN = /^\d{18}$/;
85
87
 
86
88
  /** Tope del motivo de cancelación de una venta. */
@@ -1,3 +1,4 @@
1
+ import { RetailEventRejectCodeEnum } from '../enums';
1
2
  import { RetailInventoryMeta, RetailPageMeta } from '../models/RetailPageMeta';
2
3
  import { RetailSystemInventoryMovement, RetailSystemPiece, RetailSystemStock } from '../models/RetailSystemInventory';
3
4
  import { RetailSystemProduct } from '../models/RetailSystemProduct';
@@ -23,10 +24,19 @@ export interface GetRetailInventoryResponse {
23
24
  meta: RetailInventoryMeta;
24
25
  }
25
26
 
26
- /** `data` de `GET /private/retail/inventory/movements`. */
27
+ /** Movimiento de la página que no cumple el sobre del webhook; catalog lo salta y lo cuenta. */
28
+ export interface InvalidRetailInventoryMovement {
29
+ index: number;
30
+ eventId?: string;
31
+ code: RetailEventRejectCodeEnum.INVALID_PAYLOAD;
32
+ invalidPaths: string[];
33
+ }
34
+
35
+ /** `data` de `GET /private/retail/inventory/movements`; `invalidItems` lista los movimientos descartados. */
27
36
  export interface ListRetailInventoryMovementsResponse {
28
37
  items: RetailSystemInventoryMovement[];
29
38
  meta: RetailPageMeta;
39
+ invalidItems?: InvalidRetailInventoryMovement[];
30
40
  }
31
41
 
32
42
  /** `data` de `GET /private/retail/users`. */