@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.
- package/_test_/unit/retailIntegration/retailMovementsContracts.test.ts +13 -0
- package/_test_/unit/retailIntegration/retailSaleContracts.test.ts +11 -2
- package/bin/retailIntegration/constants/retailIntegrationLimits.d.ts +2 -1
- package/bin/retailIntegration/constants/retailIntegrationLimits.js +3 -2
- package/bin/retailIntegration/dtos/RetailOutboundResponses.d.ts +10 -1
- package/package.json +1 -1
- package/src/retailIntegration/constants/retailIntegrationLimits.ts +4 -2
- package/src/retailIntegration/dtos/RetailOutboundResponses.ts +11 -1
|
@@ -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: '
|
|
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: '
|
|
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
|
|
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
|
|
60
|
-
exports.RETAIL_SPEI_TRACKING_KEY_PATTERN =
|
|
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
|
-
/**
|
|
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
|
@@ -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
|
|
83
|
-
export const RETAIL_SPEI_TRACKING_KEY_PATTERN =
|
|
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
|
-
/**
|
|
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`. */
|