UNPKG

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
"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, }; });