UNPKG

facturacionelectronicapy-ts-xmlgen

Version:

Genera el contenido del archivo XML del Documento electrónico exigido por la SET

89 lines (88 loc) 3.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImpuestoSchema = void 0; const zod_1 = require("zod"); const TaxRate_1 = require("../../types/TaxRate"); const taxTreatments_table_1 = require("../../data/taxTreatments.table"); const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator")); const db_service_1 = __importDefault(require("../../services/db.service")); const SDParser_1 = __importDefault(require("../../helpers/SDParser")); /**E8.2. Campos que describen el IVA de la operación por ítem (E730-E739) */ exports.ImpuestoSchema = zod_1.z .object({ // E731 ivaTipo: zod_1.z .nativeEnum(taxTreatments_table_1.TaxTreatment) .describe(SDParser_1.default.stringify('E731', { e: 'TaxTreatment' })), // E733 proporcionGravada: zod_1.z .number() .min(0) .max(100) .optional() .describe(SDParser_1.default.stringify('E733')), // E734 iva: zod_1.z .nativeEnum(TaxRate_1.TaxRate) .describe(SDParser_1.default.stringify('E734', { e: 'TaxRate' })), }) .transform((data, ctx) => { const validator = new ZodValidator_1.default(ctx, data); /**E731 = 1 */ const isIvaGravado = data.ivaTipo == taxTreatments_table_1.TaxTreatment.GRAVADO_IVA; /**E731 = 2 */ const isIvaExonerado = data.ivaTipo == taxTreatments_table_1.TaxTreatment.EXONERADO__ART__100___LEY_6380_2019_; /**E731 = 3 */ const isIvaExento = data.ivaTipo == taxTreatments_table_1.TaxTreatment.EXENTO; /**E731 = 4 */ const isIvaGravadoParcial = data.ivaTipo == taxTreatments_table_1.TaxTreatment.GRAVADO_PARCIAL__GRAV__EXENTO_; /**E734 = 0 */ const taxRateIs0 = data.iva == TaxRate_1.TaxRate.CERO; /**E734 = 5 */ const taxRateIs5 = data.iva == TaxRate_1.TaxRate.CINCO; /**E734 = 10 */ const taxRateIs10 = data.iva == TaxRate_1.TaxRate.DIEZ; // E733 - proporcionGravada { // ⚠️ esto no es del manual if (data.proporcionGravada != undefined) { if (isIvaGravado) { validator.validate('proporcionGravada', data.proporcionGravada != 100, '$path debe ser de 100% para el tipo de IVA gravado'); } else if (isIvaExonerado || isIvaExento) { validator.validate('proporcionGravada', data.proporcionGravada != 0, '$path debe ser de 0% para el tipo de IVA exonerado o exento'); } } else { if (isIvaGravado) { data.proporcionGravada = 100; } else if (isIvaExonerado || isIvaExento) { data.proporcionGravada = 0; } else if (isIvaGravadoParcial) { validator.requiredField('proporcionGravada', 'Si el tipo de IVA es parcial, la proporcion gravada es requerida'); } } } // E734 - iva { /* 0 (para E731 = 2 o 3) 5 (para E731 = 1 o 4) 10 (para E731 = 1 o 4) */ validator.validate('iva', (isIvaGravado || isIvaGravadoParcial) && !(taxRateIs5 || taxRateIs10), '$path debe ser cinco o diez si es gravado o gravado parcial'); validator.validate('iva', (isIvaExonerado || isIvaExento) && !taxRateIs0, '$path debe ser cero si es exonerado o exento'); } return { ...data, proporcionGravada: data.proporcionGravada, // E732 ivaTipoDescripcion: db_service_1.default.taxTreatments._findById(data.ivaTipo) .description, }; });