UNPKG

facturacionelectronicapy-xmlgen

Version:

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

918 lines (915 loc) 171 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const xml2js = __importStar(require("xml2js")); const StringUtil_service_1 = __importDefault(require("./StringUtil.service")); const FechaUtil_service_1 = __importDefault(require("./FechaUtil.service")); const constants_service_1 = __importDefault(require("./constants.service")); const jsonDteItem_service_1 = __importDefault(require("./jsonDteItem.service")); const jsonDteAlgoritmos_service_1 = __importDefault(require("./jsonDteAlgoritmos.service")); const jsonDteComplementario_service_1 = __importDefault(require("./jsonDteComplementario.service")); const jsonDteTransporte_service_1 = __importDefault(require("./jsonDteTransporte.service")); const jsonDteTotales_service_1 = __importDefault(require("./jsonDteTotales.service")); const jsonDteComplementariosComerciales_service_1 = __importDefault(require("./jsonDteComplementariosComerciales.service")); const jsonDteIdentificacionDocumento_service_1 = __importDefault(require("./jsonDteIdentificacionDocumento.service")); const jsonDeMainValidate_service_1 = __importDefault(require("./jsonDeMainValidate.service")); class JSonDeMainService { constructor() { this.codigoSeguridad = null; this.codigoControl = null; this.json = {}; this.validateError = true; } generateXMLDE(params, data, config) { return new Promise((resolve, reject) => { try { let defaultConfig = { defaultValues: true, //arrayValuesSeparator : ', ', errorSeparator: '; ', errorLimit: 10, redondeoSedeco: true, decimals: 2, taxDecimals: 2, pygDecimals: 0, partialTaxDecimals: 8, pygTaxDecimals: 0, userObjectRemove: false, test: false, sum0_000001SuffixBeforeToFixed: false, }; defaultConfig = Object.assign(defaultConfig, config); resolve(this.generateXMLDeService(params, data, defaultConfig)); } catch (error) { reject(error); } }); } /** * Metodo principal de generacion de XML del DE * @param params * @param data * @returns */ generateXMLDeService(params, data, config) { this.removeUnderscoreAndPutCamelCase(data); this.addDefaultValues(data); if (this.validateError) { jsonDeMainValidate_service_1.default.validateValues(Object.assign({}, params), Object.assign({}, data), config); } this.json = {}; this.generateCodigoControl(params, data); //Luego genera el código de Control this.generateRte(params); this.json['rDE']['DE'] = this.generateDe(params, data); //--- this.generateDatosOperacion(params, data); this.generateDatosTimbrado(params, data); this.generateDatosGenerales(params, data, config); //--- this.generateDatosEspecificosPorTipoDE(params, data, config); if (data['tipoDocumento'] == 1 || data['tipoDocumento'] == 4) { this.generateDatosCondicionOperacionDE(params, data, config); } //['gDtipDE']=E001 this.json['rDE']['DE']['gDtipDE']['gCamItem'] = jsonDteItem_service_1.default.generateDatosItemsOperacion(params, data, config); let gCamEsp = jsonDteComplementario_service_1.default.generateDatosComplementariosComercialesDeUsoEspecificos(params, data); if (gCamEsp) { this.json['rDE']['DE']['gDtipDE']['gCamEsp'] = gCamEsp; } if (data['tipoDocumento'] == 1 || data['tipoDocumento'] == 7) { //1 Opcional, 7 Obligatorio if (data['detalleTransporte']) { this.json['rDE']['DE']['gDtipDE']['gTransp'] = jsonDteTransporte_service_1.default.generateDatosTransporte(params, data); } } if (data['tipoDocumento'] != 7) { const items = this.json['rDE']['DE']['gDtipDE']['gCamItem']; this.json['rDE']['DE']['gTotSub'] = jsonDteTotales_service_1.default.generateDatosTotales(params, data, items, config); } if (data['complementarios']) { this.json['rDE']['DE']['gCamGen'] = jsonDteComplementariosComerciales_service_1.default.generateDatosComercialesUsoGeneral(params, data); } if (data['tipoDocumento'] == 4 || data['tipoDocumento'] == 5 || data['tipoDocumento'] == 6) { if (!data['documentoAsociado']) { /*throw new Error( 'Documento asociado es obligatorio para el tipo de documento electrónico (' + data['tipoDocumento'] + ') seleccionado', );*/ } } if (data['tipoDocumento'] == 1 || data['tipoDocumento'] == 4 || data['tipoDocumento'] == 5 || data['tipoDocumento'] == 6 || data['tipoDocumento'] == 7) { if (data['documentoAsociado']) { if (!Array.isArray(data['documentoAsociado'])) { this.json['rDE']['DE']['gCamDEAsoc'] = jsonDteIdentificacionDocumento_service_1.default.generateDatosDocumentoAsociado(params, data['documentoAsociado'], data); } else { //Caso sea un array. this.json['rDE']['DE']['gCamDEAsoc'] = new Array(); for (var i = 0; i < data['documentoAsociado'].length; i++) { const dataDocumentoAsociado = data['documentoAsociado'][i]; this.json['rDE']['DE']['gCamDEAsoc'].push(jsonDteIdentificacionDocumento_service_1.default.generateDatosDocumentoAsociado(params, dataDocumentoAsociado, data)); } } } } var builder = new xml2js.Builder({ xmldec: { version: '1.0', encoding: 'UTF-8', standalone: false, }, }); var xml = builder.buildObject(this.json); return this.normalizeXML(xml); //Para firmar tiene que estar normalizado } /** * Genera el CDC para la Factura * Corresponde al Id del DE * * @param params * @param data */ generateCodigoControl(params, data) { if (data.cdc && (data.cdc + '').length == 44) { //Caso ya se le pase el CDC this.codigoSeguridad = data.cdc.substring(34, 43); this.codigoControl = data.cdc; //Como se va utilizar el CDC enviado como parametro, va a verificar que todos los datos del XML coincidan con el CDC. const tipoDocumentoCDC = this.codigoControl.substring(0, 2); const establecimientoCDC = this.codigoControl.substring(11, 14); const puntoCDC = this.codigoControl.substring(14, 17); const numeroCDC = this.codigoControl.substring(17, 24); const fechaCDC = this.codigoControl.substring(25, 33); const tipoEmisionCDC = this.codigoControl.substring(33, 34); const establecimiento = StringUtil_service_1.default.leftZero(data['establecimiento'], 3); const punto = StringUtil_service_1.default.leftZero(data['punto'], 3); const numero = StringUtil_service_1.default.leftZero(data['numero'], 7); const fecha = (data['fecha'] + '').substring(0, 4) + (data['fecha'] + '').substring(5, 7) + (data['fecha'] + '').substring(8, 10); } else { this.validateCamposDelCDC(params, data); this.codigoSeguridad = StringUtil_service_1.default.leftZero(data.codigoSeguridadAleatorio, 9); this.codigoControl = jsonDteAlgoritmos_service_1.default.generateCodigoControl(params, data, this.codigoSeguridad); } } validateCamposDelCDC(params, data) { //Validar campos básicos para el código de control if (!params.ruc) { throw new Error('Debe completar Tipo de Documento en params.ruc'); } if (!data.tipoDocumento) { throw new Error('Debe completar Tipo de Documento en data.tipoDocumento'); } if (!data.establecimiento) { throw new Error('Debe completar Establecimiento de la Emisión en data.establecimiento'); } if (!data.punto) { throw new Error('Debe completar el Punto de emisión en data.punto'); } if (!data.numero) { throw new Error('Debe completar el Número de Documento en data.numero'); } if (!data.fecha) { throw new Error('Debe completar la Fecha de Emisión en data.fecha'); } if (!(params.ruc.indexOf('-') >= 0)) { throw new Error('El RUC del Emisor debe contener el DV en params.ruc'); } let rucEmisor = params['ruc'].split('-')[0]; let dvEmisor = params['ruc'].split('-')[1]; if ((rucEmisor + '').length > 8) { throw new Error('La parte del RUC del Emisor no puede superar los 8 caracteres'); } if ((dvEmisor + '').length > 1) { throw new Error('El DV del RUC del Emisor no puede superar 1 caracter'); } if ((data.tipoDocumento + '').length > 1) { throw new Error('El Tipo de Documento no puede superar 1 digito en data.tipoDocumento'); } if ((data.establecimiento + '').length > 3) { throw new Error('El Establecimiento no puede superar 3 digitos en data.establecimiento'); } if ((data.punto + '').length > 3) { throw new Error('El Punto de Emisión no puede superar 3 digitos en data.punto'); } if ((data.numero + '').length > 7) { throw new Error('El Número de Documento no puede superar 7 digitos en data.numero'); } if ((data.fecha + '').length > 19) { throw new Error('La Fecha de Emisión no puede superar los 19 caracteres en data.fecha'); } } /** * Si los valores vienen en underscore, crea los valores en formato variableJava que * sera utilizado dentro del proceso, * * Ej. si viene tipo_documento crea una variable tipoDocumento, con el mismo valor. * * @param data */ removeUnderscoreAndPutCamelCase(data) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90; const regExpOnlyNumber = new RegExp(/^\d+$/); if (data.tipo_documento) { data.tipoDocumento = data.tipo_documento; } if (data.tipo_contribuyente) { data.tipoContribuyente = data.tipo_contribuyente; } if (data.tipo_emision) { data.tipoEmision = data.tipo_emision; } if (data.tipo_transaccion) { data.tipoTransaccion = data.tipo_transaccion; } if (data.tipo_impuesto) { data.tipoImpuesto = data.tipo_impuesto; } if (data.condicion_anticipo) { data.condicionAnticipo = data.condicion_anticipo; } if (data.anticipo_global) { data.anticipoGlobal = data.anticipo_global; } if (data.condicion_tipo_cambio) { data.condicionTipoCambio = data.condicion_tipo_cambio; } if (data.descuento_global) { data.descuentoGlobal = data.descuento_global; } //Objeto Cliente if ((_a = data.cliente) === null || _a === void 0 ? void 0 : _a.razon_social) { data.cliente.razonSocial = data.cliente.razon_social; } if ((_b = data.cliente) === null || _b === void 0 ? void 0 : _b.nombre_fantasia) { data.cliente.nombreFantasia = data.cliente.nombre_fantasia; } if ((_c = data.cliente) === null || _c === void 0 ? void 0 : _c.tipo_operacion) { data.cliente.tipoOperacion = data.cliente.tipo_operacion; } if (((_d = data.cliente) === null || _d === void 0 ? void 0 : _d.tipoOperacion) == 3) { //B2G //Completar los datos de la DNCP de forma predeterminada. if (!data.dncp) { data.dncp = {}; data.dncp.modalidad = '11'; data.dncp.entidad = '11111'; data.dncp.secuencia = '1111111'; data.dncp.año = '11'; let fechaContratacion = new Date(); fechaContratacion.setDate(fechaContratacion.getDate() - 30); //1 mes antes data.dncp.fecha = FechaUtil_service_1.default.convertToAAAA_MM_DD(fechaContratacion); } else { if ((_e = data.dncp) === null || _e === void 0 ? void 0 : _e.ano) { data.dncp.año = data.dncp.ano; } } } else { if ((_f = data.dncp) === null || _f === void 0 ? void 0 : _f.ano) { data.dncp.año = data.dncp.ano; } } //Campo que puede ser un numero = 0, hay que validar de esta forma if (typeof data.cliente != 'undefined' && typeof data.cliente.numero_casa != 'undefined') { if (data.cliente.numero_casa != null) { data.cliente.numeroCasa = data.cliente.numero_casa + ''; } } if ((_g = data.cliente) === null || _g === void 0 ? void 0 : _g.tipo_contribuyente) { data.cliente.tipoContribuyente = data.cliente.tipo_contribuyente; } if ((_h = data.cliente) === null || _h === void 0 ? void 0 : _h.documento_tipo) { data.cliente.documentoTipo = data.cliente.documento_tipo; } if ((_j = data.cliente) === null || _j === void 0 ? void 0 : _j.documento_tipo_descripcion) { data.cliente.documentoTipoDescripcion = data.cliente.documento_tipo_descripcion; } if ((_k = data.cliente) === null || _k === void 0 ? void 0 : _k.documento_numero) { data.cliente.documentoNumero = data.cliente.documento_numero; } //Usuario if ((_l = data.usuario) === null || _l === void 0 ? void 0 : _l.documento_tipo) { data.usuario.documentoTipo = data.usuario.documento_tipo; } if ((_m = data.usuario) === null || _m === void 0 ? void 0 : _m.documento_tipo_descripcion) { data.usuario.documentoTipoDescripcion = data.usuario.documento_tipo_descripcion; } if ((_o = data.usuario) === null || _o === void 0 ? void 0 : _o.documento_numero) { data.usuario.documentoNumero = data.usuario.documento_numero; } //Factura if ((_p = data.factura) === null || _p === void 0 ? void 0 : _p.fecha_envio) { data.factura.fechaEnvio = data.usuario.fecha_envio; } //AutoFactura if (data.auto_factura) { data.autoFactura = Object.assign({}, data.auto_factura); } if ((_q = data.autoFactura) === null || _q === void 0 ? void 0 : _q.tipo_vendedor) { data.autoFactura.tipoVendedor = data.autoFactura.tipo_vendedor; } if ((_r = data.autoFactura) === null || _r === void 0 ? void 0 : _r.documento_tipo) { data.autoFactura.documentoTipo = data.autoFactura.documento_tipo; } if ((_s = data.autoFactura) === null || _s === void 0 ? void 0 : _s.documento_numero) { data.autoFactura.documentoNumero = data.autoFactura.documento_numero; } if (data.autoFactura != null && typeof data.autoFactura != 'undefined' && data.autoFactura.numero_casa != null && typeof data.autoFactura.numero_casa != 'undefined') { if (data.autoFactura.numero_casa != null) { data.autoFactura.numeroCasa = data.autoFactura.numero_casa + ''; } } /*if (data.autoFactura?.numero_casa) { data.autoFactura.numeroCasa = data.autoFactura.numero_casa; }*/ //Remision if (data.nota_credito_debito) { data.notaCreditoDebito = data.nota_credito_debito; } //Remision if ((_t = data.remision) === null || _t === void 0 ? void 0 : _t.tipo_responsable) { data.remision.tipoResponsable = data.remision.tipo_responsable; } if ((_u = data.remision) === null || _u === void 0 ? void 0 : _u.fecha_factura) { data.remision.fechaFactura = data.remision.fecha_factura; } if ((_v = data.remision) === null || _v === void 0 ? void 0 : _v.costo_flete) { data.remision.costoFlete = data.remision.costo_flete; } //Documento Asociado if (data.documento_asociado) { data.documentoAsociado = Object.assign({}, data.documento_asociado); } if ((_w = data.documentoAsociado) === null || _w === void 0 ? void 0 : _w.numero_retencion) { data.documentoAsociado.numeroRetencion = data.documentoAsociado.numero_retencion; } if ((_x = data.documentoAsociado) === null || _x === void 0 ? void 0 : _x.resolucion_credito_fiscal) { data.documentoAsociado.resolucionCreditoFiscal = data.documentoAsociado.resolucion_credito_fiscal; } if ((_y = data.documentoAsociado) === null || _y === void 0 ? void 0 : _y.tipo_documento_impreso) { data.documentoAsociado.tipoDocumentoImpreso = data.documentoAsociado.tipo_documento_impreso; } if ((_z = data.documentoAsociado) === null || _z === void 0 ? void 0 : _z.constancia_tipo) { data.documentoAsociado.constanciaTipo = data.documentoAsociado.constancia_tipo; } if ((_0 = data.documentoAsociado) === null || _0 === void 0 ? void 0 : _0.constancia_numero) { data.documentoAsociado.constanciaNumero = data.documentoAsociado.constancia_numero; } if ((_1 = data.documentoAsociado) === null || _1 === void 0 ? void 0 : _1.constancia_control) { data.documentoAsociado.constanciaControl = data.documentoAsociado.constancia_control; } if ((_2 = data.documentoAsociado) === null || _2 === void 0 ? void 0 : _2.ruc_fusionado) { data.documentoAsociado.rucFusionado = data.documentoAsociado.ruc_fusionado; } //Condicion entregas if (((_3 = data.condicion) === null || _3 === void 0 ? void 0 : _3.entregas) && ((_4 = data.condicion) === null || _4 === void 0 ? void 0 : _4.entregas.length) > 0) { for (let i = 0; i < data.condicion.entregas.length; i++) { const entrega = data.condicion.entregas[i]; if (entrega.info_tarjeta) { entrega.infoTarjeta = Object.assign({}, entrega.info_tarjeta); } if ((_5 = entrega.infoTarjeta) === null || _5 === void 0 ? void 0 : _5.razon_social) { entrega.infoTarjeta.razonSocial = entrega.infoTarjeta.razon_social; } if ((_6 = entrega.infoTarjeta) === null || _6 === void 0 ? void 0 : _6.medio_pago) { entrega.infoTarjeta.medioPago = entrega.infoTarjeta.medio_pago; } if ((_7 = entrega.infoTarjeta) === null || _7 === void 0 ? void 0 : _7.codigo_autorizacion) { entrega.infoTarjeta.codigoAutorizacion = entrega.infoTarjeta.codigo_autorizacion; } if (entrega.info_cheque) { entrega.infoCheque = Object.assign({}, entrega.info_cheque); } if ((_8 = entrega.infoCheque) === null || _8 === void 0 ? void 0 : _8.numero_cheque) { entrega.infoCheque.numeroCheque = entrega.infoCheque.numero_cheque; } } } if ((_9 = data.condicion) === null || _9 === void 0 ? void 0 : _9.monto_entrega) { data.condicion.montoEntrega = data.condicion.monto_entrega; } if ((_10 = data.condicion) === null || _10 === void 0 ? void 0 : _10.credito) { if (data.condicion.credito.info_cuotas) { data.condicion.credito.infoCuotas = [...data.condicion.credito.info_cuotas]; } } //Items if (data.items && ((_11 = data.items) === null || _11 === void 0 ? void 0 : _11.length) > 0) { for (let i = 0; i < data.items.length; i++) { const item = data.items[i]; if (item.partida_arancelaria) { item.partidaArancelaria = item.partida_arancelaria; } if (item.unidad_medida) { item.unidadMedida = item.unidad_medida; } //if (item.precio_unitario) { //Los valores numericos que pueden aceptar 0 hay que validar de esta manera. if (item['precio_unitario'] != null && (item['precio_unitario'] + '').length > 0) { item.precioUnitario = item.precio_unitario; } if (item.tolerancia_cantidad) { item.toleranciaCantidad = item.tolerancia_cantidad; } if (item.tolerancia_porcentaje) { item.toleranciaPorcentaje = item.tolerancia_porcentaje; } if (item.cdc_anticipo) { item.cdcAnticipo = item.cdc_anticipo; } //if (item.iva_tipo) { if (typeof item.iva_tipo != 'undefined') { item.ivaTipo = item.iva_tipo; } //if (item.iva_base) { if (typeof item.iva_base != 'undefined') { item.ivaBase = item.iva_base; } if (typeof item.iva_proporcional != 'undefined') { item.ivaProporcion = item.iva_proporcional; delete item.iva_proporcional; } if (item.numero_serie) { item.numeroSerie = item.numero_serie; } if (item.numero_pedido) { item.numeroPedido = item.numero_pedido; } if (item.numero_seguimiento) { item.numeroSeguimiento = item.numero_seguimiento; } //DNCP if (item.dncp) { if (item.dncp.codigo_nivel_general) { item.dncp.codigoNivelGeneral = item.dncp.codigo_nivel_general; } if (item.dncp.codigo_nivel_especifico) { item.dncp.codigoNivelEspecifico = item.dncp.codigo_nivel_especifico; } if (item.dncp.codigo_gtin_producto) { item.dncp.codigoGtinProducto = item.dncp.codigo_gtin_producto; } if (item.dncp.codigo_nivel_paquete) { item.dncp.codigoNivelPaquete = item.dncp.codigo_nivel_paquete; } } //Datos predeterminados para DNCP, si no se le pasa if (((_12 = data.cliente) === null || _12 === void 0 ? void 0 : _12.tipoOperacion) == 3) { //B2G - NT20 if (!item.dncp) { item.dncp = {}; item.dncp.codigoNivelGeneral = '00000000'; item.dncp.codigoNivelEspecifico = '000'; item.dncp.codigoGtinProducto = '11111111'; //Numerico item.dncp.codigoNivelPaquete = '11111111'; //Numerico } } //Importador if (item.importador) { if (item.importador.registro_importador) { item.importador.registroImportador = item.importador.registro_importador; } if (item.registro_senave) { item.registroSenave = item.registro_senave; } if (item.registro_entidad_comercial) { item.registroEntidadComercial = item.registro_entidad_comercial; } } //Sector Automotor if (item.sector_automotor) { if (item.sector_automotor.capacidad_motor) { item.sector_automotor.capacidadMotor = item.sector_automotor.capacidad_motor; } if (item.sector_automotor.capacidad_pasajeros) { item.sector_automotor.capacidadPasajeros = item.sector_automotor.capacidad_pasajeros; } if (item.sector_automotor.peso_bruto) { item.sector_automotor.pesoBruto = item.sector_automotor.peso_bruto; } if (item.sector_automotor.peso_neto) { item.sector_automotor.pesoNeto = item.sector_automotor.peso_neto; } if (item.sector_automotor.tipo_combustible) { item.sector_automotor.tipoCombustible = item.sector_automotor.tipo_combustible; } if (item.sector_automotor.numero_motor) { item.sector_automotor.numeroMotor = item.sector_automotor.numero_motor; } if (item.sector_automotor.capacidad_traccion) { item.sector_automotor.capacidadTraccion = item.sector_automotor.capacidad_traccion; } if (item.sector_automotor.tipo_vehiculo) { item.sector_automotor.tipoVehiculo = item.sector_automotor.tipo_vehiculo; } } } } //Detalle de Tranposte if (data.detalle_transporte) { data.detalleTransporte = Object.assign({}, data.detalle_transporte); } if (data.transporte) { //Nueva version quedara solamente data.trasnsporte data.detalleTransporte = Object.assign({}, data.transporte); } if ((_13 = data.detalleTransporte) === null || _13 === void 0 ? void 0 : _13.tipo_responsable) { data.detalleTransporte.tipoResponsable = data.detalleTransporte.tipo_responsable; } if ((_14 = data.detalleTransporte) === null || _14 === void 0 ? void 0 : _14.condicion_negociacion) { data.detalleTransporte.condicionNegociacion = data.detalleTransporte.condicion_negociacion; } if ((_15 = data.detalleTransporte) === null || _15 === void 0 ? void 0 : _15.numero_manifiesto) { data.detalleTransporte.numeroManifiesto = data.detalleTransporte.numero_manifiesto; } if ((_16 = data.detalleTransporte) === null || _16 === void 0 ? void 0 : _16.numero_despacho_importacion) { data.detalleTransporte.numeroDespachoImportacion = data.detalleTransporte.numero_despacho_importacion; } if ((_17 = data.detalleTransporte) === null || _17 === void 0 ? void 0 : _17.inicio_estimado_translado) { data.detalleTransporte.inicioEstimadoTranslado = data.detalleTransporte.inicio_estimado_translado; } if ((_18 = data.detalleTransporte) === null || _18 === void 0 ? void 0 : _18.fin_estimado_translado) { data.detalleTransporte.finEstimadoTranslado = data.detalleTransporte.fin_estimado_translado; } if ((_19 = data.detalleTransporte) === null || _19 === void 0 ? void 0 : _19.pais_destino) { data.detalleTransporte.paisDestino = data.detalleTransporte.pais_destino; } if ((_20 = data.detalleTransporte) === null || _20 === void 0 ? void 0 : _20.pais_destino_nombre) { data.detalleTransporte.paisDestinoNombre = data.detalleTransporte.pais_destino_nombre; } //Falta los de salida, entrega, etc. //Detalle de Transporte Salida if ((_22 = (_21 = data.detalleTransporte) === null || _21 === void 0 ? void 0 : _21.salida) === null || _22 === void 0 ? void 0 : _22.numero_casa) { //Nueva version quedara solamente data.trasnsporte data.detalleTransporte.salida.numeroCasa = data.detalleTransporte.salida.numero_casa; } if ((_24 = (_23 = data.detalleTransporte) === null || _23 === void 0 ? void 0 : _23.salida) === null || _24 === void 0 ? void 0 : _24.complemento_direccion1) { data.detalleTransporte.salida.complementoDireccion1 = data.detalleTransporte.salida.complemento_direccion1; } if ((_26 = (_25 = data.detalleTransporte) === null || _25 === void 0 ? void 0 : _25.salida) === null || _26 === void 0 ? void 0 : _26.complemento_direccion2) { data.detalleTransporte.salida.complementoDireccion2 = data.detalleTransporte.salida.complemento_direccion2; } if ((_28 = (_27 = data.detalleTransporte) === null || _27 === void 0 ? void 0 : _27.salida) === null || _28 === void 0 ? void 0 : _28.departamento_descripcion) { data.detalleTransporte.salida.departamentoDescripcion = data.detalleTransporte.salida.departamento_descripcion; } if ((_30 = (_29 = data.detalleTransporte) === null || _29 === void 0 ? void 0 : _29.salida) === null || _30 === void 0 ? void 0 : _30.distrito_descripcion) { data.detalleTransporte.salida.distritoDescripcion = data.detalleTransporte.salida.distrito_descripcion; } if ((_32 = (_31 = data.detalleTransporte) === null || _31 === void 0 ? void 0 : _31.salida) === null || _32 === void 0 ? void 0 : _32.ciudad_descripcion) { data.detalleTransporte.salida.ciudadDescripcion = data.detalleTransporte.salida.ciudad_descripcion; } if ((_34 = (_33 = data.detalleTransporte) === null || _33 === void 0 ? void 0 : _33.salida) === null || _34 === void 0 ? void 0 : _34.pais_descripcion) { data.detalleTransporte.salida.paisDescripcion = data.detalleTransporte.salida.pais_descripcion; } if ((_36 = (_35 = data.detalleTransporte) === null || _35 === void 0 ? void 0 : _35.salida) === null || _36 === void 0 ? void 0 : _36.telefono_contacto) { data.detalleTransporte.salida.telefonoContacto = data.detalleTransporte.salida.telefono_contacto; } //Detalle de Transporte Entrega if ((_38 = (_37 = data.detalleTransporte) === null || _37 === void 0 ? void 0 : _37.entrega) === null || _38 === void 0 ? void 0 : _38.numero_casa) { //Nueva version quedara solamente data.trasnsporte data.detalleTransporte.entrega.numeroCasa = data.detalleTransporte.entrega.numero_casa; } if ((_40 = (_39 = data.detalleTransporte) === null || _39 === void 0 ? void 0 : _39.entrega) === null || _40 === void 0 ? void 0 : _40.complemento_direccion1) { data.detalleTransporte.entrega.complementoDireccion1 = data.detalleTransporte.entrega.complemento_direccion1; } if ((_42 = (_41 = data.detalleTransporte) === null || _41 === void 0 ? void 0 : _41.entrega) === null || _42 === void 0 ? void 0 : _42.complemento_direccion2) { data.detalleTransporte.entrega.complementoDireccion2 = data.detalleTransporte.entrega.complemento_direccion2; } if ((_44 = (_43 = data.detalleTransporte) === null || _43 === void 0 ? void 0 : _43.entrega) === null || _44 === void 0 ? void 0 : _44.departamento_descripcion) { data.detalleTransporte.entrega.departamentoDescripcion = data.detalleTransporte.entrega.departamento_descripcion; } if ((_46 = (_45 = data.detalleTransporte) === null || _45 === void 0 ? void 0 : _45.entrega) === null || _46 === void 0 ? void 0 : _46.distrito_descripcion) { data.detalleTransporte.entrega.distritoDescripcion = data.detalleTransporte.entrega.distrito_descripcion; } if ((_48 = (_47 = data.detalleTransporte) === null || _47 === void 0 ? void 0 : _47.entrega) === null || _48 === void 0 ? void 0 : _48.ciudad_descripcion) { data.detalleTransporte.entrega.ciudadDescripcion = data.detalleTransporte.entrega.ciudad_descripcion; } if ((_50 = (_49 = data.detalleTransporte) === null || _49 === void 0 ? void 0 : _49.entrega) === null || _50 === void 0 ? void 0 : _50.pais_descripcion) { data.detalleTransporte.entrega.paisDescripcion = data.detalleTransporte.entrega.pais_descripcion; } if ((_52 = (_51 = data.detalleTransporte) === null || _51 === void 0 ? void 0 : _51.entrega) === null || _52 === void 0 ? void 0 : _52.telefono_contacto) { data.detalleTransporte.entrega.telefonoContacto = data.detalleTransporte.entrega.telefono_contacto; } // Detalle de Transporte Vehiculo if ((_54 = (_53 = data.detalleTransporte) === null || _53 === void 0 ? void 0 : _53.vehiculo) === null || _54 === void 0 ? void 0 : _54.documento_tipo) { data.detalleTransporte.vehiculo.documentoTipo = data.detalleTransporte.vehiculo.documento_tipo; } if ((_56 = (_55 = data.detalleTransporte) === null || _55 === void 0 ? void 0 : _55.vehiculo) === null || _56 === void 0 ? void 0 : _56.documento_numero) { data.detalleTransporte.vehiculo.documentoNumero = data.detalleTransporte.vehiculo.documento_numero; } if ((_58 = (_57 = data.detalleTransporte) === null || _57 === void 0 ? void 0 : _57.vehiculo) === null || _58 === void 0 ? void 0 : _58.numero_matricula) { data.detalleTransporte.vehiculo.numeroMatricula = data.detalleTransporte.vehiculo.numero_matricula; } if ((_60 = (_59 = data.detalleTransporte) === null || _59 === void 0 ? void 0 : _59.vehiculo) === null || _60 === void 0 ? void 0 : _60.numero_vuelo) { data.detalleTransporte.vehiculo.numeroVuelo = data.detalleTransporte.vehiculo.numero_vuelo; } // Detalle de Transporte Transportista if ((_62 = (_61 = data.detalleTransporte) === null || _61 === void 0 ? void 0 : _61.transportista) === null || _62 === void 0 ? void 0 : _62.documento_tipo) { data.detalleTransporte.transportista.documentoTipo = data.detalleTransporte.transportista.documento_tipo; } if ((_64 = (_63 = data.detalleTransporte) === null || _63 === void 0 ? void 0 : _63.transportista) === null || _64 === void 0 ? void 0 : _64.documento_numero) { data.detalleTransporte.transportista.documentoNumero = data.detalleTransporte.transportista.documento_numero; } if ((_66 = (_65 = data.detalleTransporte) === null || _65 === void 0 ? void 0 : _65.transportista) === null || _66 === void 0 ? void 0 : _66.pais_descripcion) { data.detalleTransporte.transportista.paisDescripcion = data.detalleTransporte.transportista.pais_descripcion; } // Detalle de Transporte Transportista Chofer if ((_69 = (_68 = (_67 = data.detalleTransporte) === null || _67 === void 0 ? void 0 : _67.transportista) === null || _68 === void 0 ? void 0 : _68.chofer) === null || _69 === void 0 ? void 0 : _69.documento_numero) { data.detalleTransporte.transportista.chofer.documentoNumero = data.detalleTransporte.transportista.chofer.documento_numero; } // Data Complementarios if ((_70 = data.complementarios) === null || _70 === void 0 ? void 0 : _70.orden_compra) { data.complementarios.ordenCompra = data.complementarios.orden_compra; } if ((_71 = data.complementarios) === null || _71 === void 0 ? void 0 : _71.orden_venta) { data.complementarios.ordenVenta = data.complementarios.orden_venta; } if ((_72 = data.complementarios) === null || _72 === void 0 ? void 0 : _72.numero_asiento) { data.complementarios.numeroAsiento = data.complementarios.numero_asiento; } // Data complementarios carga if ((_74 = (_73 = data.complementarios) === null || _73 === void 0 ? void 0 : _73.carga) === null || _74 === void 0 ? void 0 : _74.orden_compra) { data.complementarios.carga.ordenCompra = data.complementarios.carga.orden_compra; } if ((_76 = (_75 = data.complementarios) === null || _75 === void 0 ? void 0 : _75.carga) === null || _76 === void 0 ? void 0 : _76.orden_venta) { data.complementarios.carga.ordenVenta = data.complementarios.carga.orden_venta; } if ((_78 = (_77 = data.complementarios) === null || _77 === void 0 ? void 0 : _77.carga) === null || _78 === void 0 ? void 0 : _78.numero_asiento) { data.complementarios.carga.numeroAsiento = data.complementarios.carga.numero_asiento; } //Sector Energia if (data.sector_energia_electrica) { data.sectorEnergiaElectrica = Object.assign({}, data.sector_energia_electrica); } if ((_79 = data.sectorEnergiaElectrica) === null || _79 === void 0 ? void 0 : _79.numero_medidor) { data.sectorEnergiaElectrica.numeroMedidor = data.sectorEnergiaElectrica.numero_medidor; } if ((_80 = data.sectorEnergiaElectrica) === null || _80 === void 0 ? void 0 : _80.codigo_actividad) { data.sectorEnergiaElectrica.codigoActividad = data.sectorEnergiaElectrica.codigo_actividad; } if ((_81 = data.sectorEnergiaElectrica) === null || _81 === void 0 ? void 0 : _81.codigo_categoria) { data.sectorEnergiaElectrica.codigoCategoria = data.sectorEnergiaElectrica.codigo_categoria; } if ((_82 = data.sectorEnergiaElectrica) === null || _82 === void 0 ? void 0 : _82.lectura_anterior) { data.sectorEnergiaElectrica.lecturaAnterior = data.sectorEnergiaElectrica.lectura_anterior; } if ((_83 = data.sectorEnergiaElectrica) === null || _83 === void 0 ? void 0 : _83.lectura_actual) { data.sectorEnergiaElectrica.lecturaActual = data.sectorEnergiaElectrica.lectura_actual; } //Sector Seguros if (data.sector_seguros) { data.sectorSeguros = Object.assign({}, data.sector_seguros); } if ((_84 = data.sectorSeguros) === null || _84 === void 0 ? void 0 : _84.codigo_aseguradora) { data.sectorSeguros.codigoAseguradora = data.sectorSeguros.codigo_aseguradora; } if ((_85 = data.sectorSeguros) === null || _85 === void 0 ? void 0 : _85.codigo_poliza) { data.sectorSeguros.codigoPoliza = data.sectorSeguros.codigo_poliza; } if ((_86 = data.sectorSeguros) === null || _86 === void 0 ? void 0 : _86.numero_poliza) { data.sectorSeguros.numeroPoliza = data.sectorSeguros.numero_poliza; } if ((_87 = data.sectorSeguros) === null || _87 === void 0 ? void 0 : _87.vigencia_unidad) { data.sectorSeguros.vigenciaUnidad = data.sectorSeguros.vigencia_unidad; } if ((_88 = data.sectorSeguros) === null || _88 === void 0 ? void 0 : _88.inicio_vigencia) { data.sectorSeguros.inicioVigencia = data.sectorSeguros.inicio_vigencia; } if ((_89 = data.sectorSeguros) === null || _89 === void 0 ? void 0 : _89.fin_vigencia) { data.sectorSeguros.finVigencia = data.sectorSeguros.fin_vigencia; } if ((_90 = data.sectorSeguros) === null || _90 === void 0 ? void 0 : _90.codigo_interno_item) { data.sectorSeguros.codigoInternoItem = data.sectorSeguros.codigo_interno_item; } } /** * Añade algunos valores por defecto al JSON de entrada, valido para * todas las operaciones * @param data */ addDefaultValues(data) { if (constants_service_1.default.tiposDocumentos.filter((um) => um.codigo === +data['tipoDocumento']).length == 0) { //No quitar este throw throw new Error("Tipo de Documento '" + data['tipoDocumento'] + "' en data.tipoDocumento no válido. Valores: " + constants_service_1.default.tiposDocumentos.map((a) => a.codigo + '-' + a.descripcion)); } data['tipoDocumentoDescripcion'] = constants_service_1.default.tiposDocumentos.filter((td) => td.codigo == +data['tipoDocumento'])[0]['descripcion']; if (!data['tipoEmision']) { data['tipoEmision'] = 1; } if (!data['tipoTransaccion']) { data['tipoTransaccion'] = 1; } if (!data['moneda']) { data['moneda'] = 'PYG'; } if (data['moneda'] != 'PYG') { if (!data['condicionTipoCambio']) { data['condicionTipoCambio'] = 1; //Por el Global } } //Valores por defecto para los items if (data['items'] && data['items'].length > 0) { for (let i = 0; i < data['items'].length; i++) { const item = data['items'][i]; if (!item['unidadMedida']) { item['unidadMedida'] = 77; } } } } generateRte(params) { this.json = { rDE: { $: { xmlns: 'http://ekuatia.set.gov.py/sifen/xsd', 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:schemaLocation': 'http://ekuatia.set.gov.py/sifen/xsd siRecepDE_v150.xsd', }, dVerFor: params.version, }, }; } generateDe(params, data) { if (params['ruc'].indexOf('-') == -1) { //throw new Error('RUC debe contener dígito verificador en params.ruc'); } const rucEmisor = params['ruc'].split('-')[0]; const dvEmisor = params['ruc'].split('-')[1]; const id = this.codigoControl; let fechaFirmaDigital = new Date(); if (data.fechaFirmaDigital) { fechaFirmaDigital = new Date(data.fechaFirmaDigital); } let digitoVerificadorString = this.codigoControl + ''; const jsonResult = { $: { Id: id, }, dDVId: digitoVerificadorString.substring(digitoVerificadorString.length - 1, digitoVerificadorString.length), dFecFirma: FechaUtil_service_1.default.convertToJSONFormat(fechaFirmaDigital), dSisFact: 1, }; return jsonResult; } /** * Datos inerentes a la operacion * <gOpeDE> <iTipEmi>1</iTipEmi> <dDesTipEmi>Normal</dDesTipEmi> <dCodSeg>000000023</dCodSeg> <dInfoEmi>1</dInfoEmi> <dInfoFisc>Información de interés del Fisco respecto al DE</dInfoFisc> </gOpeDE> * @param params * @param data * @param options */ generateDatosOperacion(params, data) { if (params['ruc'].indexOf('-') == -1) { //throw new Error('RUC debe contener dígito verificador en params.ruc'); } const rucEmisor = params['ruc'].split('-')[0]; const dvEmisor = params['ruc'].split('-')[1]; const id = jsonDteAlgoritmos_service_1.default.generateCodigoControl(params, data, this.codigoSeguridad); const digitoVerificador = jsonDteAlgoritmos_service_1.default.calcularDigitoVerificador(rucEmisor, 11); if (id.length != 44) { } const codigoSeguridadAleatorio = this.codigoSeguridad; if (constants_service_1.default.tiposEmisiones.filter((um) => um.codigo === data['tipoEmision']).length == 0) { /*throw new Error( "Tipo de Emisión '" + data['tipoEmision'] + "' en data.tipoEmision no válido. Valores: " + constanteService.tiposEmisiones.map((a) => a.codigo + '-' + a.descripcion), );*/ } this.json['rDE']['DE']['gOpeDE'] = { iTipEmi: data['tipoEmision'], dDesTipEmi: constants_service_1.default.tiposEmisiones.filter((td) => td.codigo == data['tipoEmision'])[0]['descripcion'], dCodSeg: codigoSeguridadAleatorio, }; if (data['observacion'] && data['observacion'].length > 0) { this.json['rDE']['DE']['gOpeDE']['dInfoEmi'] = data['observacion']; } if (data['descripcion'] && data['descripcion'].length > 0) { this.json['rDE']['DE']['gOpeDE']['dInfoFisc'] = data['descripcion']; } } /** * Genera los datos del timbrado * * <gTimb> <iTiDE>1</iTiDE> <dDesTiDE>Factura electrónica</dDesTiDE> <dNumTim>12345678</dNumTim> <dEst>001</dEst> <dPunExp>001</dPunExp> <dNumDoc>1000050</dNumDoc> <dSerieNum>AB</dSerieNum> <dFeIniT>2019-08-13</dFeIniT> </gTimb> * @param params * @param data * @param options */ generateDatosTimbrado(params, data) { this.json['rDE']['DE']['gTimb'] = { iTiDE: data['tipoDocumento'], dDesTiDE: data['tipoDocumentoDescripcion'], dNumTim: params['timbradoNumero'], dEst: StringUtil_service_1.default.leftZero(data['establecimiento'], 3), dPunExp: StringUtil_service_1.default.leftZero(data['punto'], 3), dNumDoc: StringUtil_service_1.default.leftZero(data['numero'], 7), }; if (data['numeroSerie']) { this.json['rDE']['DE']['gTimb']['dSerieNum'] = data['numeroSerie']; } if (data['serie']) { this.json['rDE']['DE']['gTimb']['dSerieNum'] = data['serie']; } //if (data['numeroSerie']) { this.json['rDE']['DE']['gTimb']['dFeIniT'] = params['timbradoFecha'].substring(0, 10); //} } /** * Genera los campos generales, divide las actividades en diferentes metodos * * <gDatGralOpe> <dFeEmiDE>2020-05-07T15:03:57</dFeEmiDE> </gDatGralOpe> * * @param params * @param data * @param options */ generateDatosGenerales(params, data, config) { this.json['rDE']['DE']['gDatGralOpe'] = { dFeEmiDE: data['fecha'], }; this.generateDatosGeneralesInherentesOperacion(params, data, config); this.generateDatosGeneralesEmisorDE(params, data); if (config.userObjectRemove == false) { //Si está TRUE no crea el objeto usuario if (data['usuario']) { //No es obligatorio this.generateDatosGeneralesResponsableGeneracionDE(params, data); } } this.generateDatosGeneralesReceptorDE(params, data); } /** * D1. Campos inherentes a la operación comercial (D010-D099) * Pertenece al grupo de datos generales * * <gOpeCom> <iTipTra>1</iTipTra> <dDesTipTra>Venta de mercadería</dDesTipTra> <iTImp>1</iTImp> <dDesTImp>IVA</dDesTImp> <cMoneOpe>PYG</cMoneOpe> <dDesMoneOpe>Guarani</dDesMoneOpe> </gOpeCom> * @param params * @param data * @param options */ generateDatosGeneralesInherentesOperacion(params, data, config) { if (data['tipoDocumento'] == 7) {