facturacionelectronicapy-xmlgen
Version:
API Node JS para generar el archivo XML del Documento electrónico exigido por SIFEN en base a JSON
919 lines (917 loc) • 170 kB
JavaScript
"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 (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) {
//C002
return; //No informa si el tipo de documento es 7
}
let moneda = data['moneda'];
if (!moneda && config.defaultValues === true) {
moneda