@fiado/type-kit 3.642.0 → 3.644.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/loanCredit/creditLifecycleEnums.test.ts +1 -1
- package/_test_/unit/loanCredit/dtos/creditLifecycleRequests.test.ts +9 -0
- package/_test_/unit/retailCatalog/reserveStockCarry.test.ts +42 -0
- package/bin/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.d.ts +8 -0
- package/bin/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.js +29 -0
- package/bin/loanCredit/enums/LoanRestructureStatusEnum.d.ts +3 -1
- package/bin/loanCredit/enums/LoanRestructureStatusEnum.js +2 -0
- package/bin/loanCredit/index.d.ts +1 -0
- package/bin/loanCredit/index.js +1 -0
- package/bin/retailCatalog/dtos/requests/ReserveStockCarry.d.ts +7 -0
- package/bin/retailCatalog/dtos/requests/ReserveStockCarry.js +34 -0
- package/bin/retailCatalog/dtos/requests/ReserveStockRequest.d.ts +3 -0
- package/bin/retailCatalog/dtos/requests/ReserveStockRequest.js +9 -0
- package/bin/retailCatalog/dtos/responses/ReserveStockResponse.d.ts +7 -0
- package/bin/retailCatalog/dtos/responses/StoreCatalogItem.d.ts +2 -0
- package/bin/retailCatalog/enums/ReserveStockErrorCodeEnum.d.ts +5 -0
- package/bin/retailCatalog/enums/ReserveStockErrorCodeEnum.js +9 -0
- package/bin/retailCatalog/index.d.ts +2 -0
- package/bin/retailCatalog/index.js +2 -0
- package/package.json +1 -1
- package/src/loanCredit/dtos/requests/BackofficeCancelRestructureRequest.ts +16 -0
- package/src/loanCredit/enums/LoanRestructureStatusEnum.ts +2 -0
- package/src/loanCredit/index.ts +1 -0
- package/src/retailCatalog/dtos/requests/ReserveStockCarry.ts +17 -0
- package/src/retailCatalog/dtos/requests/ReserveStockRequest.ts +10 -1
- package/src/retailCatalog/dtos/responses/ReserveStockResponse.ts +8 -0
- package/src/retailCatalog/dtos/responses/StoreCatalogItem.ts +2 -0
- package/src/retailCatalog/enums/ReserveStockErrorCodeEnum.ts +5 -0
- package/src/retailCatalog/index.ts +2 -0
|
@@ -37,7 +37,7 @@ describe.each([
|
|
|
37
37
|
['LoanSettlementStatusEnum', LoanSettlementStatusEnum, ['PENDING']],
|
|
38
38
|
['LoanAdHocChargeKindEnum', LoanAdHocChargeKindEnum, ['SETTLEMENT', 'RECOVERY', 'PREPAYMENT', 'ADVANCE']],
|
|
39
39
|
['WrittenOffRecoveryTypeEnum', WrittenOffRecoveryTypeEnum, ['OVERDUE', 'SETTLEMENT']],
|
|
40
|
-
['LoanRestructureStatusEnum', LoanRestructureStatusEnum, ['PROPOSED', 'APPROVED', 'REJECTED', 'PENDING_REGISTRATION', 'EXECUTED']],
|
|
40
|
+
['LoanRestructureStatusEnum', LoanRestructureStatusEnum, ['PROPOSED', 'APPROVED', 'REJECTED', 'PENDING_REGISTRATION', 'EXECUTED', 'CANCELLED']],
|
|
41
41
|
['LoanChargeKindEnum', LoanChargeKindEnum, ['INSTALLMENT', 'SETTLEMENT', 'RECOVERY', 'PREPAYMENT', 'ADVANCE']],
|
|
42
42
|
[
|
|
43
43
|
'PaymentReviewReasonEnum',
|
|
@@ -3,6 +3,7 @@ import { plainToInstance } from 'class-transformer';
|
|
|
3
3
|
import { validate } from 'class-validator';
|
|
4
4
|
import {
|
|
5
5
|
BackofficeAcceptRestructureRequest,
|
|
6
|
+
BackofficeCancelRestructureRequest,
|
|
6
7
|
BackofficeApplyAdvanceRequest,
|
|
7
8
|
BackofficeApplyPrepaymentRequest,
|
|
8
9
|
BackofficeApproveRestructureRequest,
|
|
@@ -126,6 +127,14 @@ describe('BackofficeRejectRestructureRequest', () => {
|
|
|
126
127
|
});
|
|
127
128
|
});
|
|
128
129
|
|
|
130
|
+
describe('BackofficeCancelRestructureRequest', () => {
|
|
131
|
+
it('exige el motivo, con el mismo tope que el rechazo', async () => {
|
|
132
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, {})).toContain('reason');
|
|
133
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, { reason: '' })).toContain('reason');
|
|
134
|
+
expect(await errorPaths(BackofficeCancelRestructureRequest, { reason: 'El cliente no la aceptó' })).toEqual([]);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
129
138
|
describe('BackofficeAcceptRestructureRequest', () => {
|
|
130
139
|
it('acepta un OTP de 4 dígitos', async () => {
|
|
131
140
|
expect(await errorPaths(BackofficeAcceptRestructureRequest, { otpCode: '0427' })).toEqual([]);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validateSync, type ValidationError } from 'class-validator';
|
|
4
|
+
import {
|
|
5
|
+
ReserveStockErrorCodeEnum,
|
|
6
|
+
ReserveStockRequest,
|
|
7
|
+
type ReserveStockResponse,
|
|
8
|
+
type StoreCatalogItem,
|
|
9
|
+
} from '../../../src/retailCatalog';
|
|
10
|
+
|
|
11
|
+
function paths(errors: ValidationError[], prefix = ''): string[] {
|
|
12
|
+
return errors.flatMap((e) => {
|
|
13
|
+
const p = prefix ? `${prefix}.${e.property}` : e.property;
|
|
14
|
+
return e.children && e.children.length > 0 ? paths(e.children, p) : [p];
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const errorsOf = (payload: object): string[] => paths(validateSync(plainToInstance(ReserveStockRequest, payload) as object));
|
|
19
|
+
|
|
20
|
+
describe('ReserveStockRequest.carry', () => {
|
|
21
|
+
const ok = { sessionId: 's', lineId: 'L2', reservationId: 'r2', retailerId: 'ret', sku: 'KIT-1', qty: 1 };
|
|
22
|
+
const carry = { lineId: 'L1', reservationId: 'r1', sku: 'PHONE-1', qty: 1 };
|
|
23
|
+
|
|
24
|
+
it('es opcional', () => expect(errorsOf(ok)).toEqual([]));
|
|
25
|
+
it('acepta reservas a traspasar', () => expect(errorsOf({ ...ok, carry: [carry] })).toEqual([]));
|
|
26
|
+
it('valida cada reserva anidada', () => {
|
|
27
|
+
expect(errorsOf({ ...ok, carry: [{ ...carry, qty: 0 }] })).toContain('carry.0.qty');
|
|
28
|
+
expect(errorsOf({ ...ok, carry: [{ ...carry, reservationId: undefined }] })).toContain('carry.0.reservationId');
|
|
29
|
+
});
|
|
30
|
+
it('rechaza carry que no es lista', () => expect(errorsOf({ ...ok, carry: carry })).toContain('carry'));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe('contrato del traspaso', () => {
|
|
34
|
+
it('expone el código CARRY_UNAVAILABLE', () => {
|
|
35
|
+
expect(ReserveStockErrorCodeEnum.CARRY_UNAVAILABLE).toBe('CARRY_UNAVAILABLE');
|
|
36
|
+
});
|
|
37
|
+
it('la respuesta lleva lo traspasado y el catálogo el disponible por sesión', () => {
|
|
38
|
+
const carried: ReserveStockResponse['carried'] = [{ sku: 'PHONE-1', qty: 1 }];
|
|
39
|
+
const forSession: StoreCatalogItem['availableForSession'] = 1;
|
|
40
|
+
expect([carried, forSession]).toEqual([[{ sku: 'PHONE-1', qty: 1 }], 1]);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/cancel` (loan-credit-business). Cierra
|
|
3
|
+
* una propuesta o una aprobada que el cliente todavía no acepta.
|
|
4
|
+
*/
|
|
5
|
+
export declare class BackofficeCancelRestructureRequest {
|
|
6
|
+
/** Motivo de la cancelación. Va a la auditoría y no se loguea. */
|
|
7
|
+
reason: string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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.BackofficeCancelRestructureRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
|
|
16
|
+
/**
|
|
17
|
+
* Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/cancel` (loan-credit-business). Cierra
|
|
18
|
+
* una propuesta o una aprobada que el cliente todavía no acepta.
|
|
19
|
+
*/
|
|
20
|
+
class BackofficeCancelRestructureRequest {
|
|
21
|
+
}
|
|
22
|
+
exports.BackofficeCancelRestructureRequest = BackofficeCancelRestructureRequest;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Expose)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.MinLength)(1),
|
|
27
|
+
(0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], BackofficeCancelRestructureRequest.prototype, "reason", void 0);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
|
|
3
|
+
* `CANCELLED`: la propuesta o la aprobada sin aceptar se cerró, a mano o porque el crédito se cerró; no gasta el cupo.
|
|
3
4
|
* @enum {string}
|
|
4
5
|
*/
|
|
5
6
|
export declare enum LoanRestructureStatusEnum {
|
|
@@ -7,5 +8,6 @@ export declare enum LoanRestructureStatusEnum {
|
|
|
7
8
|
APPROVED = "APPROVED",
|
|
8
9
|
REJECTED = "REJECTED",
|
|
9
10
|
PENDING_REGISTRATION = "PENDING_REGISTRATION",
|
|
10
|
-
EXECUTED = "EXECUTED"
|
|
11
|
+
EXECUTED = "EXECUTED",
|
|
12
|
+
CANCELLED = "CANCELLED"
|
|
11
13
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LoanRestructureStatusEnum = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
|
|
6
|
+
* `CANCELLED`: la propuesta o la aprobada sin aceptar se cerró, a mano o porque el crédito se cerró; no gasta el cupo.
|
|
6
7
|
* @enum {string}
|
|
7
8
|
*/
|
|
8
9
|
var LoanRestructureStatusEnum;
|
|
@@ -12,4 +13,5 @@ var LoanRestructureStatusEnum;
|
|
|
12
13
|
LoanRestructureStatusEnum["REJECTED"] = "REJECTED";
|
|
13
14
|
LoanRestructureStatusEnum["PENDING_REGISTRATION"] = "PENDING_REGISTRATION";
|
|
14
15
|
LoanRestructureStatusEnum["EXECUTED"] = "EXECUTED";
|
|
16
|
+
LoanRestructureStatusEnum["CANCELLED"] = "CANCELLED";
|
|
15
17
|
})(LoanRestructureStatusEnum || (exports.LoanRestructureStatusEnum = LoanRestructureStatusEnum = {}));
|
|
@@ -126,6 +126,7 @@ export * from './dtos/requests/BackofficeCollectWrittenOffCreditRequest';
|
|
|
126
126
|
export * from './dtos/requests/BackofficeProposeRestructureRequest';
|
|
127
127
|
export * from './dtos/requests/BackofficeApproveRestructureRequest';
|
|
128
128
|
export * from './dtos/requests/BackofficeRejectRestructureRequest';
|
|
129
|
+
export * from './dtos/requests/BackofficeCancelRestructureRequest';
|
|
129
130
|
export * from './dtos/requests/BackofficeAcceptRestructureRequest';
|
|
130
131
|
export * from './dtos/requests/BackofficeApplyPrepaymentRequest';
|
|
131
132
|
export * from './dtos/requests/BackofficeApplyAdvanceRequest';
|
package/bin/loanCredit/index.js
CHANGED
|
@@ -168,6 +168,7 @@ __exportStar(require("./dtos/requests/BackofficeCollectWrittenOffCreditRequest")
|
|
|
168
168
|
__exportStar(require("./dtos/requests/BackofficeProposeRestructureRequest"), exports);
|
|
169
169
|
__exportStar(require("./dtos/requests/BackofficeApproveRestructureRequest"), exports);
|
|
170
170
|
__exportStar(require("./dtos/requests/BackofficeRejectRestructureRequest"), exports);
|
|
171
|
+
__exportStar(require("./dtos/requests/BackofficeCancelRestructureRequest"), exports);
|
|
171
172
|
__exportStar(require("./dtos/requests/BackofficeAcceptRestructureRequest"), exports);
|
|
172
173
|
__exportStar(require("./dtos/requests/BackofficeApplyPrepaymentRequest"), exports);
|
|
173
174
|
__exportStar(require("./dtos/requests/BackofficeApplyAdvanceRequest"), exports);
|
|
@@ -0,0 +1,34 @@
|
|
|
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.ReserveStockCarry = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
/** Reserva de la misma sesión que se traspasa a la línea nueva sin apartar otra pieza. */
|
|
15
|
+
class ReserveStockCarry {
|
|
16
|
+
}
|
|
17
|
+
exports.ReserveStockCarry = ReserveStockCarry;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], ReserveStockCarry.prototype, "lineId", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_validator_1.IsString)(),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], ReserveStockCarry.prototype, "reservationId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_validator_1.IsString)(),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], ReserveStockCarry.prototype, "sku", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_validator_1.IsInt)(),
|
|
32
|
+
(0, class_validator_1.Min)(1),
|
|
33
|
+
__metadata("design:type", Number)
|
|
34
|
+
], ReserveStockCarry.prototype, "qty", void 0);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ReservePurposeEnum } from '../../enums/ReservePurposeEnum';
|
|
2
|
+
import { ReserveStockCarry } from './ReserveStockCarry';
|
|
2
3
|
/** Body de PUT /private/stores/{storeId}/reservations (privateReserveStock); reserva una línea, kit completo. */
|
|
3
4
|
export declare class ReserveStockRequest {
|
|
4
5
|
sessionId: string;
|
|
@@ -10,4 +11,6 @@ export declare class ReserveStockRequest {
|
|
|
10
11
|
qty: number;
|
|
11
12
|
/** GIFT aparta un regalo de Promociones; ausente = apartado normal de venta. */
|
|
12
13
|
purpose?: ReservePurposeEnum;
|
|
14
|
+
/** Reservas de la misma sesión que pasan a esta línea en la misma TX, sin tocar el saldo. */
|
|
15
|
+
carry?: ReserveStockCarry[];
|
|
13
16
|
}
|
|
@@ -10,8 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ReserveStockRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
13
14
|
const class_validator_1 = require("class-validator");
|
|
14
15
|
const ReservePurposeEnum_1 = require("../../enums/ReservePurposeEnum");
|
|
16
|
+
const ReserveStockCarry_1 = require("./ReserveStockCarry");
|
|
15
17
|
/** Body de PUT /private/stores/{storeId}/reservations (privateReserveStock); reserva una línea, kit completo. */
|
|
16
18
|
class ReserveStockRequest {
|
|
17
19
|
}
|
|
@@ -46,3 +48,10 @@ __decorate([
|
|
|
46
48
|
(0, class_validator_1.IsEnum)(ReservePurposeEnum_1.ReservePurposeEnum),
|
|
47
49
|
__metadata("design:type", String)
|
|
48
50
|
], ReserveStockRequest.prototype, "purpose", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, class_validator_1.IsOptional)(),
|
|
53
|
+
(0, class_validator_1.IsArray)(),
|
|
54
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
55
|
+
(0, class_transformer_1.Type)(() => ReserveStockCarry_1.ReserveStockCarry),
|
|
56
|
+
__metadata("design:type", Array)
|
|
57
|
+
], ReserveStockRequest.prototype, "carry", void 0);
|
|
@@ -10,6 +10,11 @@ export interface ReservedComponent {
|
|
|
10
10
|
/** Precio vigente del componente, para repartir el precio del kit. */
|
|
11
11
|
priceCents?: number;
|
|
12
12
|
}
|
|
13
|
+
/** Piezas que la línea recibió traspasadas de otra reserva de la sesión. */
|
|
14
|
+
export interface CarriedStock {
|
|
15
|
+
sku: string;
|
|
16
|
+
qty: number;
|
|
17
|
+
}
|
|
13
18
|
/** Response de privateReserveStock; el precio de la línea es `basePriceCents`. */
|
|
14
19
|
export interface ReserveStockResponse {
|
|
15
20
|
expiresAt: string;
|
|
@@ -27,4 +32,6 @@ export interface ReserveStockResponse {
|
|
|
27
32
|
mdmProvider: MdmProviderEnum | null;
|
|
28
33
|
/** Solo si la línea es un kit. */
|
|
29
34
|
components?: ReservedComponent[];
|
|
35
|
+
/** Solo si el request trajo `carry`: lo que se traspasó por SKU. */
|
|
36
|
+
carried?: CarriedStock[];
|
|
30
37
|
}
|
|
@@ -15,6 +15,8 @@ export interface StoreCatalogItem {
|
|
|
15
15
|
sku: string;
|
|
16
16
|
/** Piezas disponibles; en un kit, el mínimo que alcanzan sus componentes. */
|
|
17
17
|
available: number;
|
|
18
|
+
/** Solo en kits y con `sessionId`: kits que alcanzan sumando lo que la sesión ya tiene apartado. */
|
|
19
|
+
availableForSession?: number;
|
|
18
20
|
basePriceCents: number;
|
|
19
21
|
category: ProductCategoryEnum;
|
|
20
22
|
/** Solo en ACCESSORY. */
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Códigos de error de privateReserveStock que el llamador resuelve por su cuenta. */
|
|
2
|
+
export declare enum ReserveStockErrorCodeEnum {
|
|
3
|
+
/** La reserva a traspasar ya no está, cambió de qty, tiene piezas HELD o ya se soltó: reserva normal. */
|
|
4
|
+
CARRY_UNAVAILABLE = "CARRY_UNAVAILABLE"
|
|
5
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReserveStockErrorCodeEnum = void 0;
|
|
4
|
+
/** Códigos de error de privateReserveStock que el llamador resuelve por su cuenta. */
|
|
5
|
+
var ReserveStockErrorCodeEnum;
|
|
6
|
+
(function (ReserveStockErrorCodeEnum) {
|
|
7
|
+
/** La reserva a traspasar ya no está, cambió de qty, tiene piezas HELD o ya se soltó: reserva normal. */
|
|
8
|
+
ReserveStockErrorCodeEnum["CARRY_UNAVAILABLE"] = "CARRY_UNAVAILABLE";
|
|
9
|
+
})(ReserveStockErrorCodeEnum || (exports.ReserveStockErrorCodeEnum = ReserveStockErrorCodeEnum = {}));
|
|
@@ -42,6 +42,7 @@ export * from './dtos/requests/ReservationLineRef';
|
|
|
42
42
|
export * from './dtos/requests/StockLine';
|
|
43
43
|
export * from './dtos/requests/ReturnPieceCondition';
|
|
44
44
|
export * from './dtos/requests/ReturnStockLine';
|
|
45
|
+
export * from './dtos/requests/ReserveStockCarry';
|
|
45
46
|
export * from './dtos/requests/ReserveStockRequest';
|
|
46
47
|
export * from './dtos/requests/RenewReservationsRequest';
|
|
47
48
|
export * from './dtos/requests/SuggestPiecesQuery';
|
|
@@ -78,6 +79,7 @@ export * from './dtos/requests/BackofficeListTransfersQuery';
|
|
|
78
79
|
export * from './dtos/responses/TransferResponse';
|
|
79
80
|
export * from './dtos/responses/ListTransfersResponse';
|
|
80
81
|
export * from './enums/ReservePurposeEnum';
|
|
82
|
+
export * from './enums/ReserveStockErrorCodeEnum';
|
|
81
83
|
export * from './enums/InventoryInboundMessageTypeEnum';
|
|
82
84
|
export * from './dtos/requests/HoldStockRequest';
|
|
83
85
|
export * from './dtos/responses/HoldStockResponse';
|
|
@@ -66,6 +66,7 @@ __exportStar(require("./dtos/requests/ReservationLineRef"), exports);
|
|
|
66
66
|
__exportStar(require("./dtos/requests/StockLine"), exports);
|
|
67
67
|
__exportStar(require("./dtos/requests/ReturnPieceCondition"), exports);
|
|
68
68
|
__exportStar(require("./dtos/requests/ReturnStockLine"), exports);
|
|
69
|
+
__exportStar(require("./dtos/requests/ReserveStockCarry"), exports);
|
|
69
70
|
__exportStar(require("./dtos/requests/ReserveStockRequest"), exports);
|
|
70
71
|
__exportStar(require("./dtos/requests/RenewReservationsRequest"), exports);
|
|
71
72
|
__exportStar(require("./dtos/requests/SuggestPiecesQuery"), exports);
|
|
@@ -104,6 +105,7 @@ __exportStar(require("./dtos/responses/TransferResponse"), exports);
|
|
|
104
105
|
__exportStar(require("./dtos/responses/ListTransfersResponse"), exports);
|
|
105
106
|
// Saga de venta: hold y avisos de la cola
|
|
106
107
|
__exportStar(require("./enums/ReservePurposeEnum"), exports);
|
|
108
|
+
__exportStar(require("./enums/ReserveStockErrorCodeEnum"), exports);
|
|
107
109
|
__exportStar(require("./enums/InventoryInboundMessageTypeEnum"), exports);
|
|
108
110
|
__exportStar(require("./dtos/requests/HoldStockRequest"), exports);
|
|
109
111
|
__exportStar(require("./dtos/responses/HoldStockResponse"), exports);
|
package/package.json
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsString, MaxLength, MinLength } from 'class-validator';
|
|
3
|
+
import { LOAN_FREE_TEXT_MAX_LENGTH } from '../../constants/LoanInputLimits';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/cancel` (loan-credit-business). Cierra
|
|
7
|
+
* una propuesta o una aprobada que el cliente todavía no acepta.
|
|
8
|
+
*/
|
|
9
|
+
export class BackofficeCancelRestructureRequest {
|
|
10
|
+
/** Motivo de la cancelación. Va a la auditoría y no se loguea. */
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsString()
|
|
13
|
+
@MinLength(1)
|
|
14
|
+
@MaxLength(LOAN_FREE_TEXT_MAX_LENGTH)
|
|
15
|
+
reason!: string;
|
|
16
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
|
|
3
|
+
* `CANCELLED`: la propuesta o la aprobada sin aceptar se cerró, a mano o porque el crédito se cerró; no gasta el cupo.
|
|
3
4
|
* @enum {string}
|
|
4
5
|
*/
|
|
5
6
|
export enum LoanRestructureStatusEnum {
|
|
@@ -8,4 +9,5 @@ export enum LoanRestructureStatusEnum {
|
|
|
8
9
|
REJECTED = 'REJECTED',
|
|
9
10
|
PENDING_REGISTRATION = 'PENDING_REGISTRATION',
|
|
10
11
|
EXECUTED = 'EXECUTED',
|
|
12
|
+
CANCELLED = 'CANCELLED',
|
|
11
13
|
}
|
package/src/loanCredit/index.ts
CHANGED
|
@@ -150,6 +150,7 @@ export * from './dtos/requests/BackofficeCollectWrittenOffCreditRequest';
|
|
|
150
150
|
export * from './dtos/requests/BackofficeProposeRestructureRequest';
|
|
151
151
|
export * from './dtos/requests/BackofficeApproveRestructureRequest';
|
|
152
152
|
export * from './dtos/requests/BackofficeRejectRestructureRequest';
|
|
153
|
+
export * from './dtos/requests/BackofficeCancelRestructureRequest';
|
|
153
154
|
export * from './dtos/requests/BackofficeAcceptRestructureRequest';
|
|
154
155
|
export * from './dtos/requests/BackofficeApplyPrepaymentRequest';
|
|
155
156
|
export * from './dtos/requests/BackofficeApplyAdvanceRequest';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IsInt, IsString, Min } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
/** Reserva de la misma sesión que se traspasa a la línea nueva sin apartar otra pieza. */
|
|
4
|
+
export class ReserveStockCarry {
|
|
5
|
+
@IsString()
|
|
6
|
+
lineId!: string;
|
|
7
|
+
|
|
8
|
+
@IsString()
|
|
9
|
+
reservationId!: string;
|
|
10
|
+
|
|
11
|
+
@IsString()
|
|
12
|
+
sku!: string;
|
|
13
|
+
|
|
14
|
+
@IsInt()
|
|
15
|
+
@Min(1)
|
|
16
|
+
qty!: number;
|
|
17
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Type } from 'class-transformer';
|
|
2
|
+
import { IsArray, IsEnum, IsInt, IsOptional, IsString, Min, ValidateNested } from 'class-validator';
|
|
2
3
|
import { ReservePurposeEnum } from '../../enums/ReservePurposeEnum';
|
|
4
|
+
import { ReserveStockCarry } from './ReserveStockCarry';
|
|
3
5
|
|
|
4
6
|
/** Body de PUT /private/stores/{storeId}/reservations (privateReserveStock); reserva una línea, kit completo. */
|
|
5
7
|
export class ReserveStockRequest {
|
|
@@ -27,4 +29,11 @@ export class ReserveStockRequest {
|
|
|
27
29
|
@IsOptional()
|
|
28
30
|
@IsEnum(ReservePurposeEnum)
|
|
29
31
|
purpose?: ReservePurposeEnum;
|
|
32
|
+
|
|
33
|
+
/** Reservas de la misma sesión que pasan a esta línea en la misma TX, sin tocar el saldo. */
|
|
34
|
+
@IsOptional()
|
|
35
|
+
@IsArray()
|
|
36
|
+
@ValidateNested({ each: true })
|
|
37
|
+
@Type(() => ReserveStockCarry)
|
|
38
|
+
carry?: ReserveStockCarry[];
|
|
30
39
|
}
|
|
@@ -12,6 +12,12 @@ export interface ReservedComponent {
|
|
|
12
12
|
priceCents?: number;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
/** Piezas que la línea recibió traspasadas de otra reserva de la sesión. */
|
|
16
|
+
export interface CarriedStock {
|
|
17
|
+
sku: string;
|
|
18
|
+
qty: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
15
21
|
/** Response de privateReserveStock; el precio de la línea es `basePriceCents`. */
|
|
16
22
|
export interface ReserveStockResponse {
|
|
17
23
|
expiresAt: string;
|
|
@@ -29,4 +35,6 @@ export interface ReserveStockResponse {
|
|
|
29
35
|
mdmProvider: MdmProviderEnum | null;
|
|
30
36
|
/** Solo si la línea es un kit. */
|
|
31
37
|
components?: ReservedComponent[];
|
|
38
|
+
/** Solo si el request trajo `carry`: lo que se traspasó por SKU. */
|
|
39
|
+
carried?: CarriedStock[];
|
|
32
40
|
}
|
|
@@ -17,6 +17,8 @@ export interface StoreCatalogItem {
|
|
|
17
17
|
sku: string;
|
|
18
18
|
/** Piezas disponibles; en un kit, el mínimo que alcanzan sus componentes. */
|
|
19
19
|
available: number;
|
|
20
|
+
/** Solo en kits y con `sessionId`: kits que alcanzan sumando lo que la sesión ya tiene apartado. */
|
|
21
|
+
availableForSession?: number;
|
|
20
22
|
basePriceCents: number;
|
|
21
23
|
category: ProductCategoryEnum;
|
|
22
24
|
/** Solo en ACCESSORY. */
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Códigos de error de privateReserveStock que el llamador resuelve por su cuenta. */
|
|
2
|
+
export enum ReserveStockErrorCodeEnum {
|
|
3
|
+
/** La reserva a traspasar ya no está, cambió de qty, tiene piezas HELD o ya se soltó: reserva normal. */
|
|
4
|
+
CARRY_UNAVAILABLE = 'CARRY_UNAVAILABLE',
|
|
5
|
+
}
|
|
@@ -58,6 +58,7 @@ export * from './dtos/requests/ReservationLineRef';
|
|
|
58
58
|
export * from './dtos/requests/StockLine';
|
|
59
59
|
export * from './dtos/requests/ReturnPieceCondition';
|
|
60
60
|
export * from './dtos/requests/ReturnStockLine';
|
|
61
|
+
export * from './dtos/requests/ReserveStockCarry';
|
|
61
62
|
export * from './dtos/requests/ReserveStockRequest';
|
|
62
63
|
export * from './dtos/requests/RenewReservationsRequest';
|
|
63
64
|
export * from './dtos/requests/SuggestPiecesQuery';
|
|
@@ -98,6 +99,7 @@ export * from './dtos/responses/ListTransfersResponse';
|
|
|
98
99
|
|
|
99
100
|
// Saga de venta: hold y avisos de la cola
|
|
100
101
|
export * from './enums/ReservePurposeEnum';
|
|
102
|
+
export * from './enums/ReserveStockErrorCodeEnum';
|
|
101
103
|
export * from './enums/InventoryInboundMessageTypeEnum';
|
|
102
104
|
export * from './dtos/requests/HoldStockRequest';
|
|
103
105
|
export * from './dtos/responses/HoldStockResponse';
|