UNPKG

facturacionelectronicapy-xmlgen

Version:

API Node JS para generar el archivo XML del Documento electrónico exigido por SIFEN en base a JSON

496 lines 44.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const StringUtil_service_1 = __importDefault(require("./StringUtil.service")); const constants_service_1 = __importDefault(require("./constants.service")); class JSonDteItemValidateService { constructor() { this.errors = new Array(); } /** * E8. Campos que describen los ítems de la operación (E700-E899) * * @param params * @param data * @param options */ generateDatosItemsOperacionValidate(params, data, config, errors) { var _a, _b, _c, _d, _e; this.errors = errors; const regExpOnlyNumber = new RegExp(/^\d+$/); const jsonResult = []; if (!(data['items'] && data['items'].length > 0)) { this.errors.push('Debe especificar los items del documento en data.items'); } //Recorrer array de items e informar en el JSON if (data['items'] && data['items'].length > 0) { for (let i = 0; i < data['items'].length; i++) { const item = data['items'][i]; let unidadMedida = +item['unidadMedida']; //Validaciones if (!((item['codigo'] + '').length >= 1 && (item['codigo'] + '').length <= 50)) { this.errors.push('El código del item (' + item['codigo'] + ') en data.items[' + i + '].codigo debe tener una longitud de 1 a 50 caracteres'); } if (!item['ncm']) { //this.errors.push('La descripción del item en data.items[' + i + '].ncm no puede ser null'); } else { if (!(item['ncm'].length >= 6 && item['ncm'].length <= 8)) { this.errors.push('El valor del campo NCM (' + item['ncm'] + ') en data.items[' + i + '].ncm debe tener una longitud de 6 a 8 caracteres'); } } if (constants_service_1.default.unidadesMedidas.filter((um) => um.codigo === +unidadMedida).length == 0) { this.errors.push("Unidad de Medida '" + unidadMedida + "' en data.items[" + i + '].unidadMedida no encontrado. Valores: ' + constants_service_1.default.unidadesMedidas.map((a) => a.codigo + '-' + a.descripcion.trim())); } if (data['tipoDocumento'] === 7) { if (!item['tolerancia']) { /*this.errors.push( 'La Tolerancia es opcional para el Tipo de Documento = 7 en data.items[' + i + '].tolerancia', );*/ //No es obligatorio } else { //Si tiene tolerancia, entonces valida if (constants_service_1.default.relevanciasMercaderias.filter((um) => um.codigo === +item['tolerancia']).length == 0) { this.errors.push("Tolerancia de Mercaderia '" + item['tolerancia'] + "' en data.items[" + i + '].tolerancia no encontrado. Valores: ' + constants_service_1.default.relevanciasMercaderias.map((a) => a.codigo + '-' + a.descripcion)); } if (!(item['toleranciaCantidad'] && item['toleranciaPorcentaje'])) { this.errors.push('La Tolerancia require especificar la cantidad y porcentaje de quiebra o merma en data.items[' + i + '].toleranciaCantidad y data.items[' + i + '].toleranciaPorcenaje'); } } } let regexp = new RegExp('<[^>]*>'); //HTML/XML TAGS if (!item['descripcion']) { this.errors.push('La descripción del item en data.items[' + i + '].descripcion no puede ser null'); } else { if (!((item['descripcion'] + '').length >= 1 && (item['descripcion'] + '').length <= 2000)) { this.errors.push('La descripción del item (' + item['descripcion'] + ') en data.items[' + i + '].descripcion debe tener una longitud de 1 a 2000 caracteres'); } if (regexp.test(item['descripcion'])) { this.errors.push('La descripción del item (' + item['descripcion'] + ') en data.items[' + i + '].descripcion contiene valores inválidos'); } } if (((_a = (item['cantidad'] + '').split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) > 8) { this.errors.push('La Cantidad del item "' + item['cantidad'] + '" en data.items[' + i + '].cantidad, no puede contener mas de 8 decimales'); } if (data.moneda == 'PYG') { /*if ((item['precioUnitario'] + '').split('.')[1]?.length > (config.pygDecimals || 0)) { this.errors.push( 'El Precio Unitario del item "' + item['precioUnitario'] + '" en "PYG" en data.items[' + i + '].precioUnitario, no puede contener mas de ' + (config.pygDecimals || 0) + ' decimales', ); }*/ if (((_b = (item['precioUnitario'] + '').split('.')[1]) === null || _b === void 0 ? void 0 : _b.length) > 8) { this.errors.push('El Precio Unitario del item "' + item['precioUnitario'] + '" en "PYG" en data.items[' + i + '].precioUnitario, no puede contener más de 8 decimales'); } } else { if (((_c = (item['precioUnitario'] + '').split('.')[1]) === null || _c === void 0 ? void 0 : _c.length) > 8) { this.errors.push('El Precio Unitario del item "' + item['precioUnitario'] + '" en data.items[' + i + '].precioUnitario, no puede contener más de 8 decimales'); } } if (data.moneda == 'PYG') { /*if ((item['descuento'] + '').split('.')[1]?.length > (config.pygDecimals || 0)) { this.errors.push( 'El Descuento del item "' + item['descuento'] + '" en "PYG" en data.items[' + i + '].descuento, no puede contener mas de ' + (config.pygDecimals || 0) + ' decimales', ); }*/ if (((_d = (item['descuento'] + '').split('.')[1]) === null || _d === void 0 ? void 0 : _d.length) > 8) { this.errors.push('El Descuento del item "' + item['descuento'] + '" en "PYG" en data.items[' + i + '].descuento, no puede contener más de 8 decimales'); } } else { if (((_e = (item['descuento'] + '').split('.')[1]) === null || _e === void 0 ? void 0 : _e.length) > 8) { this.errors.push('El Descuento del item "' + item['descuento'] + '" en data.items[' + i + '].descuento, no puede contener más de 8 decimales'); } } //se comenta por que este tien problemas con los decimales regExpOnlyNumber /*if ( !(item['cantidad'] != null && (item['cantidad'] + '').length > 0 && regExpOnlyNumber.test(item['cantidad'])) ) { this.errors.push('Debe especificar la cantidad del item en data.items[' + i + '].cantidad'); } else {*/ if (+item['cantidad'] <= 0) { this.errors.push('La cantidad del item en data.items[' + i + '].cantidad debe ser mayor a cero'); } //} /*if ( !( item['precioUnitario'] != null && (item['precioUnitario'] + '').length > 0 && regExpOnlyNumber.test(item['precioUnitario']) ) ) { this.errors.push('Debe especificar la precio unitario del item en data.items[' + i + '].precioUnitario'); } else {*/ if (+item['precioUnitario'] < 0) { this.errors.push('El precio unitario del item en data.items[' + i + '].precioUnitario debe ser mayor o igual a cero'); } //} if (item['descuento']) { if (+item['descuento'] < 0) { this.errors.push('El Descuento del item en data.items[' + i + '].descuento debe ser mayor o igual Anticipo cero'); } } if (item['anticipo']) { if (+item['anticipo'] < 0) { this.errors.push('El Anticipo del item en data.items[' + i + '].anticipo debe ser mayor o igual a cero'); } } if (item['cambio']) { if (+item['cambio'] < 0) { this.errors.push('El Cambio del item en data.items[' + i + '].cambio debe ser mayor o igual a cero'); } } if (item['cdcAnticipo']) { if (item['cdcAnticipo'].length != 44) { this.errors.push('El Valor (' + item['cdcAnticipo'] + ') del CDC del Anticipo en data.items[' + i + '].cdcAnticipo debe tener 44 caracteres'); } } if (item['pais']) { if (constants_service_1.default.paises.filter((pais) => pais.codigo === item['pais']).length == 0) { this.errors.push("Pais '" + item['pais'] + "' del Producto en data.items[" + i + '].pais no encontrado.'); } } if (item['observacion'] && (item['observacion'] + '').trim().length > 0) { if (!((item['observacion'] + '').trim().length >= 1 && (item['observacion'] + '').trim().length <= 500)) { this.errors.push('La observación del item (' + item['observacion'] + ') en data.items[' + i + '].observacion debe tener una longitud de 1 a 500 caracteres'); } if (regexp.test(item['observacion'])) { this.errors.push('La observación del item (' + item['observacion'] + ') en data.items[' + i + '].observacion contiene valores inválidos'); } } //Tratamiento E719. Tiene relacion con generateDatosGeneralesInherentesOperacion if (data['tipoDocumento'] == 1 || data['tipoDocumento'] == 4) { if (data['tipoTransaccion'] !== 9) { /*if (data['documentoAsociado'] != null && tiene que ser tipo 9) { if (!item['cdcAnticipo']) { this.errors.push('Debe informar data.items*.cdcAnticipo'); } }*/ } } if (data['tipoDocumento'] != 7) { //Oblitatorio informar this.generateDatosItemsOperacionDescuentoAnticipoValorTotalValidate(params, data, item, i); } if (data['tipoImpuesto'] == 1 || data['tipoImpuesto'] == 3 || data['tipoImpuesto'] == 4 || data['tipoImpuesto'] == 5) { if (data['tipoDocumento'] != 4 && data['tipoDocumento'] != 7) { this.generateDatosItemsOperacionIVAValidate(params, data, item, i); } } //Rastreo if (item['lote'] || item['vencimiento'] || item['numeroSerie'] || item['numeroPedido'] || item['numeroSeguimiento']) { this.generateDatosItemsOperacionRastreoMercaderiasValidate(params, data, item, i); } //Automotores if (item['sectorAutomotor'] && item['sectorAutomotor']['tipo']) { this.generateDatosItemsOperacionSectorAutomotoresValidate(params, data, item, i); } if (data['cliente']['tipoOperacion'] && data['cliente']['tipoOperacion'] === 3) { if (!item['dncp']) { this.errors.push('Debe especificar los datos de la DNCP en ' + 'data.items[' + i + '].dncp para el tipo de operación 3-B2G'); } else { if (!(item['dncp']['codigoNivelGeneral'] && (item['dncp']['codigoNivelGeneral'] + '').length > 0 && (item['dncp']['codigoNivelGeneral'] + '').length <= 8)) { this.errors.push('Debe especificar los datos de la DNCP en ' + 'data.items[' + i + '].dncp.codigoNivelGeneral (hasta 8 digitos) para el tipo de operación 3-B2G'); } else { item['dncp']['codigoNivelGeneral'] = StringUtil_service_1.default.leftZero(item['dncp']['codigoNivelGeneral'], 8); } if (!(item['dncp']['codigoNivelEspecifico'] && (item['dncp']['codigoNivelEspecifico'] + '').length >= 3 && (item['dncp']['codigoNivelEspecifico'] + '').length <= 4)) { this.errors.push('Debe especificar los datos de la DNCP en ' + 'data.items[' + i + '].dncp.codigoNivelEspecifico (3 o 4 digitos) para el tipo de operación 3-B2G'); } else { //item['dncp']['codigoNivelEspecifico'] = stringUtilService.leftZero( item['dncp']['codigoNivelEspecifico'], 8); } } } } //end-for } return this.errors; } /** * E8.1.1 Campos que describen los descuentos, anticipos y valor total por ítem (EA001-EA050) * * @param params * @param data * @param options * @param items Es el item actual del array de items de "data" que se está iterando */ generateDatosItemsOperacionDescuentoAnticipoValorTotalValidate(params, data, item, i) { const jsonResult = {}; if (item['descuento'] && +item['descuento'] > 0) { //Validar que si el descuento es mayor al precio if (+item['descuento'] > +item['precioUnitario']) { this.errors.push("Descuento '" + item['descuento'] + "' del Producto en data.items[" + i + "].descuento supera al Precio Unitario '" + item['precioUnitario']); } /* if (+item['descuento'] == +item['precioUnitario']) { //Validar IVA //Quiere decir que no va a ir nada en exenta, gravada5 y gravada10, para este item. if (item['ivaTipo'] != 3) { this.errors.push( 'Descuento igual a Precio Unitario corresponde tener Tipo de Iva = 3-Exento en data.items[' + i + '].ivaTipo', ); } }*/ } } /** * E8.2. Campos que describen el IVA de la operación por ítem (E730-E739) * * @param params * @param data * @param options * @param items Es el item actual del array de items de "data" que se está iterando */ generateDatosItemsOperacionIVAValidate(params, data, item, i) { if (constants_service_1.default.codigosAfectaciones.filter((um) => um.codigo === +item['ivaTipo']).length == 0) { this.errors.push("Tipo de IVA '" + item['ivaTipo'] + "' en data.items[" + i + '].ivaTipo no encontrado. Valores: ' + constants_service_1.default.codigosAfectaciones.map((a) => a.codigo + '-' + a.descripcion)); } let ivaProporcion = item['ivaBase']; if (typeof item.ivaProporcion != 'undefined') { ivaProporcion = item.ivaProporcion; } if (item['ivaTipo'] == 1) { if (ivaProporcion != 100) { this.errors.push('Valor de "ivaProporcion"=' + ivaProporcion + ' debe ser igual a 100 para "ivaTipo" = 1 en data.items[' + i + '].ivaProporcion'); } } if (item['ivaTipo'] == 2 || item['ivaTipo'] == 3) { //Exento if (ivaProporcion != 0) { this.errors.push('Valor de "ivaProporcion"=' + ivaProporcion + ' debe ser igual a 0 para "ivaTipo" = ' + item['ivaTipo'] + ' en data.items[' + i + '].ivaProporcion'); } if (item['iva'] != 0) { this.errors.push('Valor de "iva"=' + item['iva'] + ' debe ser igual a 0 para "ivaTipo" = ' + item['ivaTipo'] + ' en data.items[' + i + '].iva'); } } if (item['iva'] == 0) { if (item['ivaTipo'] != 2 && item['ivaTipo'] != 3) { this.errors.push('"Iva" = 0 no se admite para "ivaTipo"=' + item['ivaTipo'] + ' proporcionado en data.items[' + i + '].iva'); } } if (item['iva'] == 5) { if (item['ivaTipo'] != 1 && item['ivaTipo'] != 4) { this.errors.push('"Iva" = 5 no se admite para "ivaTipo"=' + item['ivaTipo'] + ' proporcionado en data.items[' + i + '].iva'); } } if (item['iva'] == 10) { if (item['ivaTipo'] != 1 && item['ivaTipo'] != 4) { this.errors.push('"Iva" = 10 no se admite para "ivaTipo"=' + item['ivaTipo'] + ' proporcionado en data.items[' + i + '].iva'); } } if (!(item['iva'] == 0 || item['iva'] == 5 || item['iva'] == 10)) { this.errors.push('Valor invalido "iva"=' + item['iva'] + ' proporcionado en data.items[' + i + '].iva'); } if (!(ivaProporcion >= 0 && ivaProporcion <= 100)) { this.errors.push('Valor invalido "ivaProporcion"=' + item['iva'] + ' proporcionado en data.items[' + i + '].ivaProporcion'); } } /** * E8.4. Grupo de rastreo de la mercadería (E750-E760) * * @param params * @param data * @param options * @param items Es el item actual del array de items de "data" que se está iterando */ generateDatosItemsOperacionRastreoMercaderiasValidate(params, data, item, i) { let regexpXMLHTML = new RegExp('<[^>]*>'); //HTML/XML TAGS if (item['registroEntidadComercial'] && (item['registroEntidadComercial'] + '').trim().length > 0) { if (!((item['registroEntidadComercial'] + '').trim().length >= 1 && (item['registroEntidadComercial'] + '').trim().length <= 20)) { this.errors.push('El Número de Registro de la Entidad Comercial del item (' + item['registroEntidadComercial'] + ') en data.items[' + i + '].registroEntidadComercial debe tener una longitud entre 1 y 20 caracteres'); } if (regexpXMLHTML.test(item['registroEntidadComercial'])) { this.errors.push('El Número de Registro de la Entidad Comercial del item (' + item['registroEntidadComercial'] + ') en data.items[' + i + '].registroEntidadComercial contiene valores inválidos'); } } } /** * E8.5. Sector de automotores nuevos y usados (E770-E789) * * @param params * @param data * @param options * @param items Es el item actual del array de items de "data" que se está iterando */ generateDatosItemsOperacionSectorAutomotoresValidate(params, data, item, i) { if (!item['sectorAutomotor']) { //Como no indica que este campo es obligatorio, si no se informa sale con vacio return null; } if (constants_service_1.default.tiposOperacionesVehiculos.filter((um) => um.codigo === item['sectorAutomotor']['tipo']).length == 0) { this.errors.push("Tipo de Operación de Venta de Automotor '" + item['sectorAutomotor']['tipo'] + "' en data.items[" + i + '].sectorAutomotor.tipo no encontrado. Valores: ' + constants_service_1.default.tiposOperacionesVehiculos.map((a) => a.codigo + '-' + a.descripcion)); } if (constants_service_1.default.tiposCombustibles.filter((um) => um.codigo === item['sectorAutomotor']['tipoCombustible']) .length == 0) { this.errors.push("Tipo de Combustible '" + item['sectorAutomotor']['tipoCombustible'] + "' en data.items[" + i + '].sectorAutomotor.tipoCombustible no encontrado. Valores: ' + constants_service_1.default.tiposCombustibles.map((a) => a.codigo + '-' + a.descripcion)); } if (item['sectorAutomotor']['chasis']) { if (item['sectorAutomotor']['chasis'].length != 17) { this.errors.push("El Chassis '" + item['sectorAutomotor']['chasis'] + "' en data.items[" + i + '] debe tener 17 caracteres'); } } if (item['sectorAutomotor']['cilindradas']) { if ((item['sectorAutomotor']['cilindradas'] + '').length != 4) { this.errors.push("La Cilindradas '" + item['sectorAutomotor']['cilindradas'] + "' en data.items[" + i + '] debe tener 4 caracteres'); } } } } exports.default = new JSonDteItemValidateService(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkR0ZUl0ZW1WYWxpZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2pzb25EdGVJdGVtVmFsaWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhFQUFxRDtBQUNyRCw0RUFBbUQ7QUFHbkQsTUFBTSwwQkFBMEI7SUFHOUI7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG1DQUFtQyxDQUFDLE1BQVcsRUFBRSxJQUFTLEVBQUUsTUFBb0IsRUFBRSxNQUFxQjs7UUFDNUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QyxNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztTQUM1RTtRQUVELCtDQUErQztRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU5QixJQUFJLFlBQVksR0FBVyxDQUFDLElBQUksQ0FBQyxj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