@fiado/type-kit 3.584.0 → 3.585.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/platformRbac/dtos/UpdateTenantUserEmailRequest.test.ts +24 -0
- package/_test_/unit/platformRbac/enums/__snapshots__/permissionBits.test.ts.snap +2 -1
- package/_test_/unit/platformRbac/enums/apiUserPermission.test.ts +3 -2
- package/_test_/unit/platformRbac/enums/retailIntegrationPermission.test.ts +13 -0
- package/_test_/unit/retailIntegration/reconciliationContracts.test.ts +3 -3
- package/_test_/unit/retailIntegration/retailMovementsContracts.test.ts +109 -0
- package/_test_/unit/retailIntegration/retailSystemResponses.test.ts +120 -0
- package/bin/platformRbac/dtos/CreateTenantUserRequest.d.ts +2 -1
- package/bin/platformRbac/dtos/CreateTenantUserRequest.js +2 -1
- package/bin/platformRbac/dtos/UpdateTenantUserEmailRequest.d.ts +5 -0
- package/bin/platformRbac/dtos/UpdateTenantUserEmailRequest.js +30 -0
- package/bin/platformRbac/enums/Permission.d.ts +2 -1
- package/bin/platformRbac/enums/Permission.js +3 -0
- package/bin/platformRbac/index.d.ts +1 -0
- package/bin/platformRbac/index.js +1 -0
- package/bin/retailIntegration/constants/retailIntegrationLimits.d.ts +11 -0
- package/bin/retailIntegration/constants/retailIntegrationLimits.js +12 -1
- package/bin/retailIntegration/dtos/CheckRetailInventoryRequest.d.ts +4 -1
- package/bin/retailIntegration/dtos/CheckRetailInventoryRequest.js +4 -1
- package/bin/retailIntegration/dtos/GetRetailInventoryRequest.d.ts +3 -3
- package/bin/retailIntegration/dtos/GetRetailInventoryRequest.js +3 -3
- package/bin/retailIntegration/dtos/ListRetailInventoryMovementsRequest.d.ts +6 -0
- package/bin/retailIntegration/dtos/ListRetailInventoryMovementsRequest.js +29 -0
- package/bin/retailIntegration/dtos/ReconciliationPageMessage.d.ts +6 -0
- package/bin/retailIntegration/dtos/ReconciliationPageMessage.js +20 -0
- package/bin/retailIntegration/dtos/RetailOutboundResponses.d.ts +10 -2
- package/bin/retailIntegration/dtos/RetailSystemResponses.d.ts +41 -0
- package/bin/retailIntegration/dtos/RetailSystemResponses.js +136 -0
- package/bin/retailIntegration/enums/ReconciliationEntityEnum.d.ts +2 -1
- package/bin/retailIntegration/enums/ReconciliationEntityEnum.js +1 -0
- package/bin/retailIntegration/enums/ReconciliationTriggerEnum.d.ts +4 -2
- package/bin/retailIntegration/enums/ReconciliationTriggerEnum.js +3 -1
- package/bin/retailIntegration/index.d.ts +3 -0
- package/bin/retailIntegration/index.js +3 -0
- package/bin/retailIntegration/models/RetailPageMeta.d.ts +3 -1
- package/bin/retailIntegration/models/RetailSystemInventory.d.ts +9 -1
- package/bin/retailIntegration/validators/IsMovementsRangeValid.d.ts +6 -0
- package/bin/retailIntegration/validators/IsMovementsRangeValid.js +28 -0
- package/package.json +1 -1
- package/src/platformRbac/dtos/CreateTenantUserRequest.ts +2 -1
- package/src/platformRbac/dtos/UpdateTenantUserEmailRequest.ts +12 -0
- package/src/platformRbac/enums/Permission.ts +3 -0
- package/src/platformRbac/index.ts +1 -0
- package/src/retailIntegration/constants/retailIntegrationLimits.ts +16 -0
- package/src/retailIntegration/dtos/CheckRetailInventoryRequest.ts +4 -1
- package/src/retailIntegration/dtos/GetRetailInventoryRequest.ts +3 -3
- package/src/retailIntegration/dtos/ListRetailInventoryMovementsRequest.ts +14 -0
- package/src/retailIntegration/dtos/ReconciliationPageMessage.ts +21 -1
- package/src/retailIntegration/dtos/RetailOutboundResponses.ts +11 -2
- package/src/retailIntegration/dtos/RetailSystemResponses.ts +75 -0
- package/src/retailIntegration/enums/ReconciliationEntityEnum.ts +1 -0
- package/src/retailIntegration/enums/ReconciliationTriggerEnum.ts +3 -1
- package/src/retailIntegration/index.ts +3 -0
- package/src/retailIntegration/models/RetailPageMeta.ts +3 -1
- package/src/retailIntegration/models/RetailSystemInventory.ts +10 -1
- package/src/retailIntegration/validators/IsMovementsRangeValid.ts +17 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ReceiveInventoryEventRequest } from './ReceiveInventoryEventRequest';
|
|
2
|
+
/** `meta` de una página de Zentral; `nextToken` en `null` cierra la lectura y nunca se omite. */
|
|
3
|
+
export declare class RetailSystemPageMeta {
|
|
4
|
+
count: number;
|
|
5
|
+
nextToken: string | null;
|
|
6
|
+
}
|
|
7
|
+
/** Página de una lista de Zentral; cada consumidor valida sus renglones de `data`. */
|
|
8
|
+
export declare class RetailSystemPageResponse {
|
|
9
|
+
data: unknown[];
|
|
10
|
+
meta: RetailSystemPageMeta;
|
|
11
|
+
}
|
|
12
|
+
/** `data` de una página de `GET /inventory`: piezas y existencias crudas. */
|
|
13
|
+
export declare class RetailSystemInventoryData {
|
|
14
|
+
pieces: unknown[];
|
|
15
|
+
stock: unknown[];
|
|
16
|
+
}
|
|
17
|
+
/** `meta` de una página de `GET /inventory`; `generatedAt` es igual en toda la lectura. */
|
|
18
|
+
export declare class RetailSystemInventoryMeta extends RetailSystemPageMeta {
|
|
19
|
+
storeId: string;
|
|
20
|
+
generatedAt: string;
|
|
21
|
+
}
|
|
22
|
+
/** Respuesta de `GET /inventory` de Zentral. */
|
|
23
|
+
export declare class RetailSystemInventoryResponse {
|
|
24
|
+
data: RetailSystemInventoryData;
|
|
25
|
+
meta: RetailSystemInventoryMeta;
|
|
26
|
+
}
|
|
27
|
+
/** `data` de `POST /sales` de Zentral. */
|
|
28
|
+
export declare class RetailSystemSaleResponse {
|
|
29
|
+
externalSaleId: string;
|
|
30
|
+
}
|
|
31
|
+
/** Cuerpo de error de Zentral; `lineIndex` solo viene en errores de una línea de venta. */
|
|
32
|
+
export declare class RetailSystemErrorBody {
|
|
33
|
+
code: string;
|
|
34
|
+
msg?: string;
|
|
35
|
+
lineIndex?: number;
|
|
36
|
+
}
|
|
37
|
+
/** Respuesta de `GET /inventory/movements`: cada elemento es el mismo sobre del webhook de inventario. */
|
|
38
|
+
export declare class RetailSystemMovementsResponse {
|
|
39
|
+
data: ReceiveInventoryEventRequest[];
|
|
40
|
+
meta: RetailSystemPageMeta;
|
|
41
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RetailSystemMovementsResponse = exports.RetailSystemErrorBody = exports.RetailSystemSaleResponse = exports.RetailSystemInventoryResponse = exports.RetailSystemInventoryMeta = exports.RetailSystemInventoryData = exports.RetailSystemPageResponse = exports.RetailSystemPageMeta = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const retailIntegrationLimits_1 = require("../constants/retailIntegrationLimits");
|
|
16
|
+
const IsIsoDateTimeWithZone_1 = require("../validators/IsIsoDateTimeWithZone");
|
|
17
|
+
const payloadValidators_1 = require("../validators/payloadValidators");
|
|
18
|
+
const ReceiveInventoryEventRequest_1 = require("./ReceiveInventoryEventRequest");
|
|
19
|
+
/** `meta` de una página de Zentral; `nextToken` en `null` cierra la lectura y nunca se omite. */
|
|
20
|
+
class RetailSystemPageMeta {
|
|
21
|
+
}
|
|
22
|
+
exports.RetailSystemPageMeta = RetailSystemPageMeta;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsInt)(),
|
|
25
|
+
(0, class_validator_1.Min)(0),
|
|
26
|
+
__metadata("design:type", Number)
|
|
27
|
+
], RetailSystemPageMeta.prototype, "count", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_validator_1.ValidateIf)(payloadValidators_1.isNullOrValidated),
|
|
30
|
+
(0, class_validator_1.IsString)(),
|
|
31
|
+
(0, class_validator_1.MaxLength)(retailIntegrationLimits_1.RETAIL_NEXT_TOKEN_MAX_LENGTH),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], RetailSystemPageMeta.prototype, "nextToken", void 0);
|
|
34
|
+
/** Página de una lista de Zentral; cada consumidor valida sus renglones de `data`. */
|
|
35
|
+
class RetailSystemPageResponse {
|
|
36
|
+
}
|
|
37
|
+
exports.RetailSystemPageResponse = RetailSystemPageResponse;
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, class_validator_1.IsArray)(),
|
|
40
|
+
__metadata("design:type", Array)
|
|
41
|
+
], RetailSystemPageResponse.prototype, "data", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, class_validator_1.IsObject)(),
|
|
44
|
+
(0, class_validator_1.ValidateNested)(),
|
|
45
|
+
(0, class_transformer_1.Type)(() => RetailSystemPageMeta),
|
|
46
|
+
__metadata("design:type", RetailSystemPageMeta)
|
|
47
|
+
], RetailSystemPageResponse.prototype, "meta", void 0);
|
|
48
|
+
/** `data` de una página de `GET /inventory`: piezas y existencias crudas. */
|
|
49
|
+
class RetailSystemInventoryData {
|
|
50
|
+
}
|
|
51
|
+
exports.RetailSystemInventoryData = RetailSystemInventoryData;
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_validator_1.IsArray)(),
|
|
54
|
+
__metadata("design:type", Array)
|
|
55
|
+
], RetailSystemInventoryData.prototype, "pieces", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, class_validator_1.IsArray)(),
|
|
58
|
+
__metadata("design:type", Array)
|
|
59
|
+
], RetailSystemInventoryData.prototype, "stock", void 0);
|
|
60
|
+
/** `meta` de una página de `GET /inventory`; `generatedAt` es igual en toda la lectura. */
|
|
61
|
+
class RetailSystemInventoryMeta extends RetailSystemPageMeta {
|
|
62
|
+
}
|
|
63
|
+
exports.RetailSystemInventoryMeta = RetailSystemInventoryMeta;
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, class_validator_1.IsString)(),
|
|
66
|
+
(0, class_validator_1.Matches)(retailIntegrationLimits_1.RETAIL_ENTITY_ID_PATTERN),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], RetailSystemInventoryMeta.prototype, "storeId", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, class_validator_1.Validate)(IsIsoDateTimeWithZone_1.IsIsoDateTimeWithZone),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], RetailSystemInventoryMeta.prototype, "generatedAt", void 0);
|
|
73
|
+
/** Respuesta de `GET /inventory` de Zentral. */
|
|
74
|
+
class RetailSystemInventoryResponse {
|
|
75
|
+
}
|
|
76
|
+
exports.RetailSystemInventoryResponse = RetailSystemInventoryResponse;
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, class_validator_1.IsObject)(),
|
|
79
|
+
(0, class_validator_1.ValidateNested)(),
|
|
80
|
+
(0, class_transformer_1.Type)(() => RetailSystemInventoryData),
|
|
81
|
+
__metadata("design:type", RetailSystemInventoryData)
|
|
82
|
+
], RetailSystemInventoryResponse.prototype, "data", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, class_validator_1.IsObject)(),
|
|
85
|
+
(0, class_validator_1.ValidateNested)(),
|
|
86
|
+
(0, class_transformer_1.Type)(() => RetailSystemInventoryMeta),
|
|
87
|
+
__metadata("design:type", RetailSystemInventoryMeta)
|
|
88
|
+
], RetailSystemInventoryResponse.prototype, "meta", void 0);
|
|
89
|
+
/** `data` de `POST /sales` de Zentral. */
|
|
90
|
+
class RetailSystemSaleResponse {
|
|
91
|
+
}
|
|
92
|
+
exports.RetailSystemSaleResponse = RetailSystemSaleResponse;
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, class_validator_1.IsString)(),
|
|
95
|
+
(0, class_validator_1.MaxLength)(retailIntegrationLimits_1.RETAIL_ID_TEXT_MAX_LENGTH),
|
|
96
|
+
(0, class_validator_1.Matches)(retailIntegrationLimits_1.RETAIL_EXTERNAL_ID_PATTERN),
|
|
97
|
+
__metadata("design:type", String)
|
|
98
|
+
], RetailSystemSaleResponse.prototype, "externalSaleId", void 0);
|
|
99
|
+
/** Cuerpo de error de Zentral; `lineIndex` solo viene en errores de una línea de venta. */
|
|
100
|
+
class RetailSystemErrorBody {
|
|
101
|
+
}
|
|
102
|
+
exports.RetailSystemErrorBody = RetailSystemErrorBody;
|
|
103
|
+
__decorate([
|
|
104
|
+
(0, class_validator_1.IsString)(),
|
|
105
|
+
(0, class_validator_1.Matches)(/\S/),
|
|
106
|
+
(0, class_validator_1.MaxLength)(retailIntegrationLimits_1.RETAIL_ERROR_CODE_MAX_LENGTH),
|
|
107
|
+
__metadata("design:type", String)
|
|
108
|
+
], RetailSystemErrorBody.prototype, "code", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, class_validator_1.IsOptional)(),
|
|
111
|
+
(0, class_validator_1.IsString)(),
|
|
112
|
+
__metadata("design:type", String)
|
|
113
|
+
], RetailSystemErrorBody.prototype, "msg", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
(0, class_validator_1.IsOptional)(),
|
|
116
|
+
(0, class_validator_1.IsInt)(),
|
|
117
|
+
(0, class_validator_1.Min)(retailIntegrationLimits_1.RETAIL_LINE_INDEX_MIN),
|
|
118
|
+
(0, class_validator_1.Max)(retailIntegrationLimits_1.RETAIL_LINE_INDEX_MAX),
|
|
119
|
+
__metadata("design:type", Number)
|
|
120
|
+
], RetailSystemErrorBody.prototype, "lineIndex", void 0);
|
|
121
|
+
/** Respuesta de `GET /inventory/movements`: cada elemento es el mismo sobre del webhook de inventario. */
|
|
122
|
+
class RetailSystemMovementsResponse {
|
|
123
|
+
}
|
|
124
|
+
exports.RetailSystemMovementsResponse = RetailSystemMovementsResponse;
|
|
125
|
+
__decorate([
|
|
126
|
+
(0, class_validator_1.IsArray)(),
|
|
127
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
128
|
+
(0, class_transformer_1.Type)(() => ReceiveInventoryEventRequest_1.ReceiveInventoryEventRequest),
|
|
129
|
+
__metadata("design:type", Array)
|
|
130
|
+
], RetailSystemMovementsResponse.prototype, "data", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
(0, class_validator_1.IsObject)(),
|
|
133
|
+
(0, class_validator_1.ValidateNested)(),
|
|
134
|
+
(0, class_transformer_1.Type)(() => RetailSystemPageMeta),
|
|
135
|
+
__metadata("design:type", RetailSystemPageMeta)
|
|
136
|
+
], RetailSystemMovementsResponse.prototype, "meta", void 0);
|
|
@@ -8,4 +8,5 @@ var ReconciliationEntityEnum;
|
|
|
8
8
|
ReconciliationEntityEnum["USERS"] = "USERS";
|
|
9
9
|
ReconciliationEntityEnum["CATALOG"] = "CATALOG";
|
|
10
10
|
ReconciliationEntityEnum["INVENTORY"] = "INVENTORY";
|
|
11
|
+
ReconciliationEntityEnum["MOVEMENTS"] = "MOVEMENTS";
|
|
11
12
|
})(ReconciliationEntityEnum || (exports.ReconciliationEntityEnum = ReconciliationEntityEnum = {}));
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/** Quién abrió la corrida: el reloj horario, el botón «Actualizar
|
|
1
|
+
/** Quién abrió la corrida: el reloj horario o diario, el botón «Actualizar», la activación o una discrepancia. */
|
|
2
2
|
export declare enum ReconciliationTriggerEnum {
|
|
3
3
|
SCHEDULED = "SCHEDULED",
|
|
4
4
|
MANUAL = "MANUAL",
|
|
5
|
-
ACTIVATION = "ACTIVATION"
|
|
5
|
+
ACTIVATION = "ACTIVATION",
|
|
6
|
+
DISCREPANCY = "DISCREPANCY",
|
|
7
|
+
DAILY = "DAILY"
|
|
6
8
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ReconciliationTriggerEnum = void 0;
|
|
4
|
-
/** Quién abrió la corrida: el reloj horario, el botón «Actualizar
|
|
4
|
+
/** Quién abrió la corrida: el reloj horario o diario, el botón «Actualizar», la activación o una discrepancia. */
|
|
5
5
|
var ReconciliationTriggerEnum;
|
|
6
6
|
(function (ReconciliationTriggerEnum) {
|
|
7
7
|
ReconciliationTriggerEnum["SCHEDULED"] = "SCHEDULED";
|
|
8
8
|
ReconciliationTriggerEnum["MANUAL"] = "MANUAL";
|
|
9
9
|
ReconciliationTriggerEnum["ACTIVATION"] = "ACTIVATION";
|
|
10
|
+
ReconciliationTriggerEnum["DISCREPANCY"] = "DISCREPANCY";
|
|
11
|
+
ReconciliationTriggerEnum["DAILY"] = "DAILY";
|
|
10
12
|
})(ReconciliationTriggerEnum || (exports.ReconciliationTriggerEnum = ReconciliationTriggerEnum = {}));
|
|
@@ -2,6 +2,7 @@ export * from './constants/retailIntegrationLimits';
|
|
|
2
2
|
export * from './constants/retailIntegrationErrorHttpStatus';
|
|
3
3
|
export * from './enums';
|
|
4
4
|
export * from './validators/IsIsoDateTimeWithZone';
|
|
5
|
+
export * from './validators/IsMovementsRangeValid';
|
|
5
6
|
export * from './dtos/RetailEventEnvelope';
|
|
6
7
|
export * from './dtos/ReceiveStoreEventRequest';
|
|
7
8
|
export * from './dtos/ReceiveRetailUserEventRequest';
|
|
@@ -21,11 +22,13 @@ export * from './dtos/RetailPagedQuery';
|
|
|
21
22
|
export * from './dtos/ListRetailStoresRequest';
|
|
22
23
|
export * from './dtos/ListRetailCatalogRequest';
|
|
23
24
|
export * from './dtos/GetRetailInventoryRequest';
|
|
25
|
+
export * from './dtos/ListRetailInventoryMovementsRequest';
|
|
24
26
|
export * from './dtos/ListRetailUsersRequest';
|
|
25
27
|
export * from './dtos/RegisterRetailSaleRequest';
|
|
26
28
|
export * from './dtos/CancelRetailSaleRequest';
|
|
27
29
|
export * from './dtos/CheckRetailInventoryRequest';
|
|
28
30
|
export * from './dtos/RetailOutboundResponses';
|
|
31
|
+
export * from './dtos/RetailSystemResponses';
|
|
29
32
|
export * from './models/RetailPageMeta';
|
|
30
33
|
export * from './models/RetailSystemStore';
|
|
31
34
|
export * from './models/RetailSystemProduct';
|
|
@@ -18,6 +18,7 @@ __exportStar(require("./constants/retailIntegrationLimits"), exports);
|
|
|
18
18
|
__exportStar(require("./constants/retailIntegrationErrorHttpStatus"), exports);
|
|
19
19
|
__exportStar(require("./enums"), exports);
|
|
20
20
|
__exportStar(require("./validators/IsIsoDateTimeWithZone"), exports);
|
|
21
|
+
__exportStar(require("./validators/IsMovementsRangeValid"), exports);
|
|
21
22
|
__exportStar(require("./dtos/RetailEventEnvelope"), exports);
|
|
22
23
|
__exportStar(require("./dtos/ReceiveStoreEventRequest"), exports);
|
|
23
24
|
__exportStar(require("./dtos/ReceiveRetailUserEventRequest"), exports);
|
|
@@ -37,11 +38,13 @@ __exportStar(require("./dtos/RetailPagedQuery"), exports);
|
|
|
37
38
|
__exportStar(require("./dtos/ListRetailStoresRequest"), exports);
|
|
38
39
|
__exportStar(require("./dtos/ListRetailCatalogRequest"), exports);
|
|
39
40
|
__exportStar(require("./dtos/GetRetailInventoryRequest"), exports);
|
|
41
|
+
__exportStar(require("./dtos/ListRetailInventoryMovementsRequest"), exports);
|
|
40
42
|
__exportStar(require("./dtos/ListRetailUsersRequest"), exports);
|
|
41
43
|
__exportStar(require("./dtos/RegisterRetailSaleRequest"), exports);
|
|
42
44
|
__exportStar(require("./dtos/CancelRetailSaleRequest"), exports);
|
|
43
45
|
__exportStar(require("./dtos/CheckRetailInventoryRequest"), exports);
|
|
44
46
|
__exportStar(require("./dtos/RetailOutboundResponses"), exports);
|
|
47
|
+
__exportStar(require("./dtos/RetailSystemResponses"), exports);
|
|
45
48
|
__exportStar(require("./models/RetailPageMeta"), exports);
|
|
46
49
|
__exportStar(require("./models/RetailSystemStore"), exports);
|
|
47
50
|
__exportStar(require("./models/RetailSystemProduct"), exports);
|
|
@@ -3,8 +3,10 @@ export interface RetailPageMeta {
|
|
|
3
3
|
count: number;
|
|
4
4
|
nextToken: string | null;
|
|
5
5
|
}
|
|
6
|
-
/** `meta` del inventario de una tienda. */
|
|
6
|
+
/** `meta` del inventario de una tienda; `count` y `nextToken` llegan cuando la lectura pagina. */
|
|
7
7
|
export interface RetailInventoryMeta {
|
|
8
8
|
storeId: string;
|
|
9
9
|
generatedAt: string;
|
|
10
|
+
count?: number;
|
|
11
|
+
nextToken?: string | null;
|
|
10
12
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { InventoryEventPayload } from '../dtos/InventoryEventPayload';
|
|
2
|
+
import { InventoryEventTypeEnum, RetailPieceReasonEnum, RetailPieceStatusEnum } from '../enums';
|
|
2
3
|
export type RetailPieceStatus = `${RetailPieceStatusEnum}`;
|
|
3
4
|
export type RetailPieceReason = `${RetailPieceReasonEnum}`;
|
|
4
5
|
/** Pieza con IMEI o número de serie. */
|
|
@@ -15,3 +16,10 @@ export interface RetailSystemStock {
|
|
|
15
16
|
storeId: string;
|
|
16
17
|
qty: number;
|
|
17
18
|
}
|
|
19
|
+
/** Movimiento de inventario de Zentral: el mismo sobre que llega a `POST /webhooks/inventory`. */
|
|
20
|
+
export interface RetailSystemInventoryMovement {
|
|
21
|
+
eventId: string;
|
|
22
|
+
eventType: `${InventoryEventTypeEnum}`;
|
|
23
|
+
occurredAt: string;
|
|
24
|
+
payload: InventoryEventPayload;
|
|
25
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ValidationArguments, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
+
/** `to`: mayor que `from` y a lo más 7 días después; sin `from` legible lo rechaza su propio validador. */
|
|
3
|
+
export declare class IsMovementsRangeValid implements ValidatorConstraintInterface {
|
|
4
|
+
validate(value: unknown, args: ValidationArguments): boolean;
|
|
5
|
+
defaultMessage(): string;
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.IsMovementsRangeValid = void 0;
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
11
|
+
const retailIntegrationLimits_1 = require("../constants/retailIntegrationLimits");
|
|
12
|
+
/** `to`: mayor que `from` y a lo más 7 días después; sin `from` legible lo rechaza su propio validador. */
|
|
13
|
+
let IsMovementsRangeValid = class IsMovementsRangeValid {
|
|
14
|
+
validate(value, args) {
|
|
15
|
+
const from = Date.parse(String(args.object.from));
|
|
16
|
+
const to = Date.parse(String(value));
|
|
17
|
+
if (Number.isNaN(from) || Number.isNaN(to))
|
|
18
|
+
return true;
|
|
19
|
+
return to > from && to - from <= retailIntegrationLimits_1.RETAIL_MOVEMENTS_RANGE_MAX_MS;
|
|
20
|
+
}
|
|
21
|
+
defaultMessage() {
|
|
22
|
+
return 'to debe ser mayor que from y a lo más 7 días después';
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.IsMovementsRangeValid = IsMovementsRangeValid;
|
|
26
|
+
exports.IsMovementsRangeValid = IsMovementsRangeValid = __decorate([
|
|
27
|
+
(0, class_validator_1.ValidatorConstraint)({ name: 'isMovementsRangeValid', async: false })
|
|
28
|
+
], IsMovementsRangeValid);
|
package/package.json
CHANGED
|
@@ -14,7 +14,8 @@ const hasAnyGrantField = (o: CreateTenantUserRequest): boolean =>
|
|
|
14
14
|
* Consumido por el alta de usuario orquestada de SureKeep F1 (retail-org → RBAC → RetailUser) vía api-invoker.
|
|
15
15
|
* - Usuario provisionado en estado INVITED (mitiga orphan si el paso siguiente en retail-org falla).
|
|
16
16
|
* - Idempotente por identidad Cognito.
|
|
17
|
-
* - `roleId`/`scope`/`scopeRef`: todos o ninguno; sin rol
|
|
17
|
+
* - `roleId`/`scope`/`scopeRef`: todos o ninguno; sin rol exige `suppressInvitation: true`
|
|
18
|
+
* y la invitación queda pendiente (`invitationPending`) hasta asignar el primer rol.
|
|
18
19
|
* - `createdBy` = cognitoSub del admin real (audit + grantedBy del assignment).
|
|
19
20
|
* - `customFields` = valores de los campos personalizados del tenant; si el correo ya tiene usuario, se fusionan.
|
|
20
21
|
*/
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Expose, Transform } from 'class-transformer';
|
|
2
|
+
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/** Body M2M que cambia el correo de un usuario del tenant; el correo se guarda en minúsculas. */
|
|
5
|
+
export class UpdateTenantUserEmailRequest {
|
|
6
|
+
@Expose()
|
|
7
|
+
@Transform(({ value }) => (typeof value === 'string' ? value.trim().toLowerCase() : value))
|
|
8
|
+
@IsEmail()
|
|
9
|
+
email!: string;
|
|
10
|
+
|
|
11
|
+
@Expose() @IsString() @IsNotEmpty() actedBy!: string;
|
|
12
|
+
}
|
|
@@ -165,6 +165,8 @@ export enum Permission {
|
|
|
165
165
|
TENANT_INTEGRATION_DIAGNOSTIC = 'tenant.integration.diagnostic',
|
|
166
166
|
// Alta, rotación de secreto y edición de IPs de usuarios de API; se exige además de tenant.user.create.
|
|
167
167
|
TENANT_API_USER_MANAGE = 'tenant.api_user.manage',
|
|
168
|
+
// Activa la integración de un retailer externo (Zentral); scope PLATFORM.
|
|
169
|
+
PLATFORM_RETAIL_INTEGRATION_ACTIVATE = 'platform.retail_integration.activate',
|
|
168
170
|
}
|
|
169
171
|
|
|
170
172
|
/**
|
|
@@ -286,6 +288,7 @@ export const PERMISSION_BIT_ORDER: readonly Permission[] = [
|
|
|
286
288
|
Permission.PLATFORM_INTEGRATION_KEY_REVOKE,
|
|
287
289
|
Permission.TENANT_INTEGRATION_DIAGNOSTIC,
|
|
288
290
|
Permission.TENANT_API_USER_MANAGE,
|
|
291
|
+
Permission.PLATFORM_RETAIL_INTEGRATION_ACTIVATE,
|
|
289
292
|
] as const;
|
|
290
293
|
|
|
291
294
|
function djb2(input: string): number {
|
|
@@ -167,6 +167,7 @@ export type { ListTenantUsersResponse } from './dtos/ListTenantUsersResponse';
|
|
|
167
167
|
export type { TenantUserListItemResponse } from './dtos/TenantUserListItemResponse';
|
|
168
168
|
export type { GetTenantUserResponse } from './dtos/GetTenantUserResponse';
|
|
169
169
|
export * from './dtos/UpdateTenantUserRequest';
|
|
170
|
+
export * from './dtos/UpdateTenantUserEmailRequest';
|
|
170
171
|
export * from './dtos/DeleteTenantUserRequest';
|
|
171
172
|
export * from './dtos/DisableTenantUserRequest';
|
|
172
173
|
export * from './dtos/EnableTenantUserRequest';
|
|
@@ -50,3 +50,19 @@ export const RETAIL_ELIGIBLE_FINANCIERS_MAX = 50;
|
|
|
50
50
|
|
|
51
51
|
/** Decimal de los eventos del retailer: hasta 12 enteros y dos decimales, nunca negativo. */
|
|
52
52
|
export const RETAIL_EVENT_DECIMAL_PATTERN = /^\d{1,12}\.\d{2}$/;
|
|
53
|
+
|
|
54
|
+
/** Tope del `nextToken` opaco que devuelve Zentral. */
|
|
55
|
+
export const RETAIL_NEXT_TOKEN_MAX_LENGTH = 2048;
|
|
56
|
+
|
|
57
|
+
/** Id que asigna Zentral, como `externalSaleId`: no vacío, sin espacios y de a lo más 64. */
|
|
58
|
+
export const RETAIL_EXTERNAL_ID_PATTERN = /^\S{1,64}$/;
|
|
59
|
+
|
|
60
|
+
/** Tope del `code` en el cuerpo de error de Zentral. */
|
|
61
|
+
export const RETAIL_ERROR_CODE_MAX_LENGTH = 64;
|
|
62
|
+
|
|
63
|
+
/** Rango de `lineIndex` en un error de línea de venta. */
|
|
64
|
+
export const RETAIL_LINE_INDEX_MIN = 0;
|
|
65
|
+
export const RETAIL_LINE_INDEX_MAX = 999;
|
|
66
|
+
|
|
67
|
+
/** Rango máximo de `GET /inventory/movements`: 7 días en milisegundos. */
|
|
68
|
+
export const RETAIL_MOVEMENTS_RANGE_MAX_MS = 7 * 24 * 60 * 60 * 1000;
|
|
@@ -8,7 +8,10 @@ function csvToArray({ value }: { value: unknown }): unknown {
|
|
|
8
8
|
return typeof value === 'string' ? value.split(',').map((item) => item.trim()) : value;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Query de `GET /private/retail/inventory/live-check`; `identifiers` llega como csv.
|
|
13
|
+
* @deprecated el live-check se va a quitar; el inventario se toma de movimientos y de la lectura diaria.
|
|
14
|
+
*/
|
|
12
15
|
export class CheckRetailInventoryRequest extends RetailTenantQuery {
|
|
13
16
|
@IsString() @Matches(/\S/) storeId!: string;
|
|
14
17
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IsString, Matches } from 'class-validator';
|
|
2
|
-
import {
|
|
2
|
+
import { RetailPagedQuery } from './RetailPagedQuery';
|
|
3
3
|
|
|
4
|
-
/** Query de `GET /private/retail/inventory`; el inventario es por tienda y
|
|
5
|
-
export class GetRetailInventoryRequest extends
|
|
4
|
+
/** Query de `GET /private/retail/inventory`; el inventario es por tienda y pagina con `limit`/`nextToken`. */
|
|
5
|
+
export class GetRetailInventoryRequest extends RetailPagedQuery {
|
|
6
6
|
@IsString()
|
|
7
7
|
@Matches(/\S/)
|
|
8
8
|
storeId!: string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Validate } from 'class-validator';
|
|
2
|
+
import { IsIsoDateTimeWithZone } from '../validators/IsIsoDateTimeWithZone';
|
|
3
|
+
import { IsMovementsRangeValid } from '../validators/IsMovementsRangeValid';
|
|
4
|
+
import { RetailPagedQuery } from './RetailPagedQuery';
|
|
5
|
+
|
|
6
|
+
/** Query de `GET /private/retail/inventory/movements`: rango `[from, to)` de a lo más 7 días. */
|
|
7
|
+
export class ListRetailInventoryMovementsRequest extends RetailPagedQuery {
|
|
8
|
+
@Validate(IsIsoDateTimeWithZone)
|
|
9
|
+
from!: string;
|
|
10
|
+
|
|
11
|
+
@Validate(IsIsoDateTimeWithZone)
|
|
12
|
+
@Validate(IsMovementsRangeValid)
|
|
13
|
+
to!: string;
|
|
14
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, Min } from 'class-validator';
|
|
2
|
+
import { IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, Matches, Min, Validate } from 'class-validator';
|
|
3
3
|
import { ReconciliationEntityEnum } from '../enums/ReconciliationEntityEnum';
|
|
4
|
+
import { IsIsoDateTimeWithZone } from '../validators/IsIsoDateTimeWithZone';
|
|
4
5
|
|
|
5
6
|
/** Mensaje de la cola de revisión: una página, o una tienda completa en inventario. */
|
|
6
7
|
export class ReconciliationPageMessage {
|
|
@@ -43,4 +44,23 @@ export class ReconciliationPageMessage {
|
|
|
43
44
|
@IsInt()
|
|
44
45
|
@Min(0)
|
|
45
46
|
requeueCount?: number;
|
|
47
|
+
|
|
48
|
+
/** Cursor de Zentral para la siguiente página del inventario de la tienda. */
|
|
49
|
+
@Expose()
|
|
50
|
+
@IsOptional()
|
|
51
|
+
@IsString()
|
|
52
|
+
@Matches(/\S/)
|
|
53
|
+
nextToken?: string;
|
|
54
|
+
|
|
55
|
+
/** Inicio del rango de movimientos, incluido. */
|
|
56
|
+
@Expose()
|
|
57
|
+
@IsOptional()
|
|
58
|
+
@Validate(IsIsoDateTimeWithZone)
|
|
59
|
+
from?: string;
|
|
60
|
+
|
|
61
|
+
/** Fin del rango de movimientos, excluido. */
|
|
62
|
+
@Expose()
|
|
63
|
+
@IsOptional()
|
|
64
|
+
@Validate(IsIsoDateTimeWithZone)
|
|
65
|
+
to?: string;
|
|
46
66
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RetailInventoryMeta, RetailPageMeta } from '../models/RetailPageMeta';
|
|
2
|
-
import { RetailSystemPiece, RetailSystemStock } from '../models/RetailSystemInventory';
|
|
2
|
+
import { RetailSystemInventoryMovement, RetailSystemPiece, RetailSystemStock } from '../models/RetailSystemInventory';
|
|
3
3
|
import { RetailSystemProduct } from '../models/RetailSystemProduct';
|
|
4
4
|
import { RetailSystemStore } from '../models/RetailSystemStore';
|
|
5
5
|
import { RetailSystemUser } from '../models/RetailSystemUser';
|
|
@@ -23,6 +23,12 @@ export interface GetRetailInventoryResponse {
|
|
|
23
23
|
meta: RetailInventoryMeta;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
/** `data` de `GET /private/retail/inventory/movements`. */
|
|
27
|
+
export interface ListRetailInventoryMovementsResponse {
|
|
28
|
+
items: RetailSystemInventoryMovement[];
|
|
29
|
+
meta: RetailPageMeta;
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
/** `data` de `GET /private/retail/users`. */
|
|
27
33
|
export interface ListRetailUsersResponse {
|
|
28
34
|
items: RetailSystemUser[];
|
|
@@ -39,7 +45,10 @@ export interface CancelRetailSaleResponse {
|
|
|
39
45
|
saleId: string;
|
|
40
46
|
}
|
|
41
47
|
|
|
42
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* `data` de `GET /private/retail/inventory/live-check`: los identificadores que el retailer lista en la tienda.
|
|
50
|
+
* @deprecated el live-check se va a quitar; el inventario se toma de movimientos y de la lectura diaria.
|
|
51
|
+
*/
|
|
43
52
|
export interface CheckRetailInventoryResponse {
|
|
44
53
|
listed: string[];
|
|
45
54
|
generatedAt: string;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Type } from 'class-transformer';
|
|
2
|
+
import {
|
|
3
|
+
IsArray,
|
|
4
|
+
IsInt,
|
|
5
|
+
IsObject,
|
|
6
|
+
IsOptional,
|
|
7
|
+
IsString,
|
|
8
|
+
Matches,
|
|
9
|
+
Max,
|
|
10
|
+
MaxLength,
|
|
11
|
+
Min,
|
|
12
|
+
Validate,
|
|
13
|
+
ValidateIf,
|
|
14
|
+
ValidateNested,
|
|
15
|
+
} from 'class-validator';
|
|
16
|
+
import {
|
|
17
|
+
RETAIL_ENTITY_ID_PATTERN,
|
|
18
|
+
RETAIL_ERROR_CODE_MAX_LENGTH,
|
|
19
|
+
RETAIL_ID_TEXT_MAX_LENGTH,
|
|
20
|
+
RETAIL_LINE_INDEX_MAX,
|
|
21
|
+
RETAIL_LINE_INDEX_MIN,
|
|
22
|
+
RETAIL_NEXT_TOKEN_MAX_LENGTH,
|
|
23
|
+
RETAIL_EXTERNAL_ID_PATTERN,
|
|
24
|
+
} from '../constants/retailIntegrationLimits';
|
|
25
|
+
import { IsIsoDateTimeWithZone } from '../validators/IsIsoDateTimeWithZone';
|
|
26
|
+
import { isNullOrValidated } from '../validators/payloadValidators';
|
|
27
|
+
import { ReceiveInventoryEventRequest } from './ReceiveInventoryEventRequest';
|
|
28
|
+
|
|
29
|
+
/** `meta` de una página de Zentral; `nextToken` en `null` cierra la lectura y nunca se omite. */
|
|
30
|
+
export class RetailSystemPageMeta {
|
|
31
|
+
@IsInt() @Min(0) count!: number;
|
|
32
|
+
@ValidateIf(isNullOrValidated) @IsString() @MaxLength(RETAIL_NEXT_TOKEN_MAX_LENGTH) nextToken!: string | null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Página de una lista de Zentral; cada consumidor valida sus renglones de `data`. */
|
|
36
|
+
export class RetailSystemPageResponse {
|
|
37
|
+
@IsArray() data!: unknown[];
|
|
38
|
+
@IsObject() @ValidateNested() @Type(() => RetailSystemPageMeta) meta!: RetailSystemPageMeta;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** `data` de una página de `GET /inventory`: piezas y existencias crudas. */
|
|
42
|
+
export class RetailSystemInventoryData {
|
|
43
|
+
@IsArray() pieces!: unknown[];
|
|
44
|
+
@IsArray() stock!: unknown[];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** `meta` de una página de `GET /inventory`; `generatedAt` es igual en toda la lectura. */
|
|
48
|
+
export class RetailSystemInventoryMeta extends RetailSystemPageMeta {
|
|
49
|
+
@IsString() @Matches(RETAIL_ENTITY_ID_PATTERN) storeId!: string;
|
|
50
|
+
@Validate(IsIsoDateTimeWithZone) generatedAt!: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Respuesta de `GET /inventory` de Zentral. */
|
|
54
|
+
export class RetailSystemInventoryResponse {
|
|
55
|
+
@IsObject() @ValidateNested() @Type(() => RetailSystemInventoryData) data!: RetailSystemInventoryData;
|
|
56
|
+
@IsObject() @ValidateNested() @Type(() => RetailSystemInventoryMeta) meta!: RetailSystemInventoryMeta;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** `data` de `POST /sales` de Zentral. */
|
|
60
|
+
export class RetailSystemSaleResponse {
|
|
61
|
+
@IsString() @MaxLength(RETAIL_ID_TEXT_MAX_LENGTH) @Matches(RETAIL_EXTERNAL_ID_PATTERN) externalSaleId!: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Cuerpo de error de Zentral; `lineIndex` solo viene en errores de una línea de venta. */
|
|
65
|
+
export class RetailSystemErrorBody {
|
|
66
|
+
@IsString() @Matches(/\S/) @MaxLength(RETAIL_ERROR_CODE_MAX_LENGTH) code!: string;
|
|
67
|
+
@IsOptional() @IsString() msg?: string;
|
|
68
|
+
@IsOptional() @IsInt() @Min(RETAIL_LINE_INDEX_MIN) @Max(RETAIL_LINE_INDEX_MAX) lineIndex?: number;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Respuesta de `GET /inventory/movements`: cada elemento es el mismo sobre del webhook de inventario. */
|
|
72
|
+
export class RetailSystemMovementsResponse {
|
|
73
|
+
@IsArray() @ValidateNested({ each: true }) @Type(() => ReceiveInventoryEventRequest) data!: ReceiveInventoryEventRequest[];
|
|
74
|
+
@IsObject() @ValidateNested() @Type(() => RetailSystemPageMeta) meta!: RetailSystemPageMeta;
|
|
75
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
/** Quién abrió la corrida: el reloj horario, el botón «Actualizar
|
|
1
|
+
/** Quién abrió la corrida: el reloj horario o diario, el botón «Actualizar», la activación o una discrepancia. */
|
|
2
2
|
export enum ReconciliationTriggerEnum {
|
|
3
3
|
SCHEDULED = 'SCHEDULED',
|
|
4
4
|
MANUAL = 'MANUAL',
|
|
5
5
|
ACTIVATION = 'ACTIVATION',
|
|
6
|
+
DISCREPANCY = 'DISCREPANCY',
|
|
7
|
+
DAILY = 'DAILY',
|
|
6
8
|
}
|
|
@@ -2,6 +2,7 @@ export * from './constants/retailIntegrationLimits';
|
|
|
2
2
|
export * from './constants/retailIntegrationErrorHttpStatus';
|
|
3
3
|
export * from './enums';
|
|
4
4
|
export * from './validators/IsIsoDateTimeWithZone';
|
|
5
|
+
export * from './validators/IsMovementsRangeValid';
|
|
5
6
|
export * from './dtos/RetailEventEnvelope';
|
|
6
7
|
export * from './dtos/ReceiveStoreEventRequest';
|
|
7
8
|
export * from './dtos/ReceiveRetailUserEventRequest';
|
|
@@ -21,11 +22,13 @@ export * from './dtos/RetailPagedQuery';
|
|
|
21
22
|
export * from './dtos/ListRetailStoresRequest';
|
|
22
23
|
export * from './dtos/ListRetailCatalogRequest';
|
|
23
24
|
export * from './dtos/GetRetailInventoryRequest';
|
|
25
|
+
export * from './dtos/ListRetailInventoryMovementsRequest';
|
|
24
26
|
export * from './dtos/ListRetailUsersRequest';
|
|
25
27
|
export * from './dtos/RegisterRetailSaleRequest';
|
|
26
28
|
export * from './dtos/CancelRetailSaleRequest';
|
|
27
29
|
export * from './dtos/CheckRetailInventoryRequest';
|
|
28
30
|
export * from './dtos/RetailOutboundResponses';
|
|
31
|
+
export * from './dtos/RetailSystemResponses';
|
|
29
32
|
export * from './models/RetailPageMeta';
|
|
30
33
|
export * from './models/RetailSystemStore';
|
|
31
34
|
export * from './models/RetailSystemProduct';
|