facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
122 lines (121 loc) • 4.73 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EntregaSchema = void 0;
const zod_1 = require("zod");
const currencies_table_1 = require("../../data/currencies.table");
const paymentTypes_table_1 = require("../../data/paymentTypes.table");
const CommonValidators_1 = __importDefault(require("../../helpers/validation/CommonValidators"));
const NumberLenght_1 = __importDefault(require("../../helpers/validation/NumberLenght"));
const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator"));
const db_service_1 = __importDefault(require("../../services/db.service"));
const infoCheque_schema_1 = require("./infoCheque.schema");
const infoTarjeta_schema_1 = require("./infoTarjeta.schema");
const SDParser_1 = __importDefault(require("../../helpers/SDParser"));
/**E7.1. Campos que describen la forma de pago de la operación al contado o del monto de la entrega inicial (E605-E619) */
exports.EntregaSchema = zod_1.z
.object({
// E606
tipo: zod_1.z
.nativeEnum(paymentTypes_table_1.PaymentType)
.describe(SDParser_1.default.stringify('E606', { e: 'PaymentType' })),
// E607
tipoDescripcion: zod_1.z
.string()
.min(4)
.max(30)
.optional()
.describe(SDParser_1.default.stringify('E607')),
// E608
monto: zod_1.z
.number()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).max(15).maxDecimals(4);
})
.describe(SDParser_1.default.stringify('E608')),
// E609
moneda: CommonValidators_1.default.currency().describe(SDParser_1.default.stringify('E609', { e: 'Currency' })),
// E611
cambio: CommonValidators_1.default.currencyChange()
.optional()
.describe(SDParser_1.default.stringify('E611')),
// (E620) E7.1.1.Campos que describen el pago o entrega inicial de la operación con tarjeta de crédito/débito
infoTarjeta: infoTarjeta_schema_1.InfoTarjetaSchema.optional().describe(SDParser_1.default.stringify('E7.1.1', {
d: 'Campos que describen el pago o entrega inicial de la operación con tarjeta de crédito/débito',
})),
// E7.1.2.Campos que describen el pago o entrega inicial de la operación con cheque (E630-E639)
infoCheque: infoCheque_schema_1.InfoChequeSchema.optional().describe(SDParser_1.default.stringify('E7.1.2', {
d: 'Campos que describen el pago o entrega inicial de la operación con cheque (E630-E639)',
})),
})
.transform((data, ctx) => {
const validator = new ZodValidator_1.default(ctx, data);
/**E606 = 99 */
const isOtherPaymentType = data.tipo == paymentTypes_table_1.PaymentType.OTRO;
/**E606 = 2 */
const isCheckPayment = data.tipo == paymentTypes_table_1.PaymentType.CHEQUE;
/**E606 = 3 */
const isCreditCartPayment = data.tipo == paymentTypes_table_1.PaymentType.TARJETA_DE_CREDITO;
/**E606 = 4 */
const isDebitCartPayment = data.tipo == paymentTypes_table_1.PaymentType.TARJETA_DE_DEBITO;
/**E609 = PYG */
const isGuarani = data.moneda == currencies_table_1.Currency.GUARANI;
// E607 - tipoDescripcion
{
/*
Si E606 = 99, informar el tipo de pago
*/
if (isOtherPaymentType) {
validator.requiredField('tipoDescripcion');
}
else {
const foundPaymentType = db_service_1.default.paymentTypes._findById(data.tipo, {
ctx,
fieldName: 'entregas.tipoDescripcion',
});
data.tipoDescripcion = foundPaymentType?.description;
}
}
// E611 - cambio
{
/*
Obligatorio si E609 ≠ PYG
*/
if (!isGuarani) {
validator.requiredField('cambio');
}
else {
// ⚠️ esto parece necesario aunque no se especifica
validator.undesiredField('cambio');
}
}
// E620 - infoTarjeta
{
/*
Se activa si E606 = 3 o 4
*/
if (isCreditCartPayment || isDebitCartPayment) {
validator.requiredField('infoTarjeta');
}
}
// E630 - infoCheque
{
/*
Se activa si E606 = 2
*/
if (isCheckPayment) {
validator.requiredField('infoCheque');
}
}
return {
...data,
tipoDescripcion: data.tipoDescripcion,
// E610
monedaDescripcion: db_service_1.default.currencies._findById(data.moneda)
.description,
};
});