diff --git a/afip/index.js b/afip/index.js new file mode 100644 index 0000000..26da27c --- /dev/null +++ b/afip/index.js @@ -0,0 +1,40 @@ +module.exports = function(codigo) { + + var tablaAfip = [ + { + codigo: 1, + letraComprobante: 'A', + tipoComprobante: 'FT' + }, + { + codigo: 7, + letraComprobante: 'B', + tipoComprobante: 'ND' + }, + { + codigo: 8, + letraComprobante: 'B', + tipoComprobante: 'NC' + }, + { + codigo: 15, + letraComprobante: 'C', + tipoComprobante: 'RE' + }, + { + codigo: 60, + letraComprobante: 'A', + tipoComprobante: 'LP' + }, + { + codigo: 61, + letraComprobante: 'B', + tipoComprobante: 'LP' + } + ] + + return tablaAfip.filter(function(comprobante) { + return comprobante.codigo == parseInt(codigo) + })[0]; + +} \ No newline at end of file diff --git a/debo/cabeceraDebo.js b/debo/cabeceraDebo.js new file mode 100644 index 0000000..31050ee --- /dev/null +++ b/debo/cabeceraDebo.js @@ -0,0 +1,91 @@ +module.exports = function(comprobante, afipTablas) { + + return { + TIP: afipTablas(comprobante.identificaxComprobante.tipo).letraComprobante, // [char](1) NOT NULL, LETRA DEL COMPROBANTE (A,B,C,M,E) + TCO: afipTablas(comprobante.identificaxComprobante.tipo).tipoComprobante, // [char](2) NOT NULL, TIPO DE COMPROBANTE (FT,NC,ND,RE,CI,LP) + SUC: parseInt(comprobante.identificaxComprobante.puntoVenta), // [int] NOT NULL, PUNTO DE VENTA + NCO: parseInt(comprobante.identificaxComprobante.numero), // [bigint] NOT NULL, NUMERO DE COMPROBANTE + COD: null, // [int] NOT NULL, CODIGO DEL PROVEEDOR NECESITAS RELACION -- BUSCAR SI ENVIAN EL CUIT DEL PROVEEDOR SELECT COD FROM PROVEED WHERE CUIT= '30-54775125-2' + FEC: comprobante.identificaxComprobante.fechaComprobante, // [smalldatetime] NULL, FECHA DEL COMPROBANTE + NOM: null, // [varchar](40) NOT NULL, NOMBRE DEL PROVEEDOR TABLA PROVEED CAMPO NOM + TIV: null, // [tinyint] NOT NULL, TIPO DE IVA CAMPO IVA TABLA PROVEED + CUI: null, // [char](13) NOT NULL, CUIT DEL PROVEEDOR CAMPO CUIT DEL PROVEEDOR O EL QUE VIENE EN LA COMUNICACION + FPA: null, // [tinyint] NOT NULL, FORMA DE PAGO CAMPO FPA TABLA PROVEED + TCA: 1, // [money] NOT NULL, FIJO 1 + DTO: comprobante.descuentosGlobalesFactura.importe, // [money] NOT NULL, DESCUENTO TOTAL SUMATORIA DE LOS DTO POR ITEM + PDT: 0, // [money] NOT NULL, FIJO 0 + NET: null, // [money] NOT NULL, SUMATORIA DE LOS NETOS POR ITEM QUE TIENEN IVA <> 0 + NEE: null, // [money] NOT NULL, SUMATORIA DE LOS NETOS POR ITEM QUE TIENEN IVA = 0 + IRI: comprobante.detallesImportesIVA.importeLiquidado, // [money] NOT NULL, SUMATORIA DE LOS IVA POR ITEM + IRS: 0, // [money] NOT NULL, FIJO 0 + IMI: comprobante.importesTotales.importeImpuestosInternos, // [money] NOT NULL, SUMATORIA DE LOS IMPUESTOS INTERNOS POR ITEM + RGA: null, // [money] NOT NULL, IMPORTE RETENCION DE GANANCIAS + RIB: null, // [money] NOT NULL, IMPORTE RETENCION DE INBRESOS BRUTOS + PIV: null, // [money] NOT NULL, IMPORTE PERCEPCION DE IVA + CNG: comprobante.importesTotales.totalConceptosNoNetoGravado, // [money] NULL, IMPORTE DE CONCEPTOS NO GRAVADOS + TOT: null, // [money] NOT NULL, IMPORTE TOTAL DE LA FACTURA + ZON: null, // [int] NOT NULL, NUMERO DE LA EMPRESA SELECT ZON FROM APAREMP + FEV: comprobante.identificaxComprobante.fechaComprobante, // [datetime] NULL, FECHA DE VENCIMIENTO + OCP: null, // [char](10) NOT NULL, SI VIENE LA ORDEN DE COMPRA FORMATO "0000000000" (DOS PRIMERO PARA PVE Y 8 ULTIMOS EL NUMERO DE LA OC) + OPE: 0, // [int] NOT NULL, FIJO 0 + REC: 0, // [bigint] NOT NULL, FIJO 0 + FEP: null, // [datetime] NULL, ITEM FECHA FACTURA + NPE: 0, // [bigint] NOT NULL, NOTA DE PEDIDO FIJO 0 + CPA: 0, // [int] NOT NULL, FIJO 0 + ENV: 0, // [int] NOT NULL, FIJO 0 + REM: 0, // [bigint] NOT NULL, FIJO 0 + PRO: ' ', // [char](1) NOT NULL, FIJO ' ' VACIO NO NULO + ANU: ' ', // [char](1) NOT NULL, FIJO ' ' VACIO NO NULO + TUR: 0, // [int] NOT NULL, FIJO 0 + PLA: 0, // [int] NOT NULL, FIJO 0 + LUG: 0, // [int] NOT NULL, FIJO 0 + ATO: 0, // [numeric](18, 0) NOT NULL, FIJO 0 + CCO: 0, // [bigint] NOT NULL, FIJO 0 + IMA: 0, // [int] NOT NULL, FIJO 0 + CCA1: 0, // [int] NOT NULL, FIJO 0 + CCA2: 0, // [int] NOT NULL, FIJO 0 + CCA3: 0, // [int] NOT NULL, FIJO 0 + CCA4: 0, // [int] NOT NULL, FIJO 0 + CCA5: 0, // [int] NOT NULL, FIJO 0 + CCA6: 0, // [int] NOT NULL, FIJO 0 + CCA7: 0, // [int] NOT NULL, FIJO 0 + CCA8: 0, // [int] NOT NULL, FIJO 0 + CCA0: 0, // [int] NOT NULL, FIJO 0 + OBS: comprobante.importesTotales.observaciones, // [varchar](60) NOT NULL, SI VIENEN OBSERVACIONES PONER AQUI SINO VACIO NO NULO + RIV: null, // [money] NOT NULL, IMPORTE RETENCION DE IVA + FECCAI: comprobante.identificaxComprobante.fechaVencimientoCai, // [smalldatetime] NOT NULL, FECHA DEL CAI + CAI: comprobante.identificaxComprobante.cai, // [char](16) NOT NULL, NUMERO DE CAI + CHO: 0, // [int] NOT NULL, FIJO 0 + CTR: '', // [char](1) NOT NULL, VACIO NO NULO + PER: null, // [money] NOT NULL, IMPORTE DE PERCEPCIONES + CCA9: 0, // [int] NOT NULL, FIJO 0 + FECVEN: comprobante.identificaxComprobante.fechaVencimiento, // [smalldatetime] NOT NULL, FECHA DE VENCIMIENTO DE LA FACTURA + CNG2: null, // [money] NOT NULL, IMPORTE DE CONCEPTOS NO GRAVADOS 2 + E_HD: '', // [varchar](8) NOT NULL, VACIO NO NULO + C_HD: '', // [varchar](1) NOT NULL, VACIO NO NULO + RSS: null, // [money] NOT NULL, IMPORTE RETENCIONS SUSS + E_HD2: '', // [varchar](12) NOT NULL, VACIO NO NULO + C_HD2: '', // [varchar](1) NOT NULL, VACIO NO NULO + DTO2: null, // [money] NOT NULL, IMPORTE DE OTROS DESCUENTOS + ENLP: 0, // [bit] NOT NULL, FIJO 0 + COD_TRANS: comprobante.identificaxComprobante.numeroRegistrado, // [bigint] NOT NULL, VER DE PONER EL NUMERO DE REFERENCIA QUE PUEDA UNIRNOS A LO QUE VIENE DESDE PLANEX + RETMUN: comprobante.importesTotales.importeImpuestosMunicipales, // [money] NOT NULL, IMPORTE DE RETENCIONES MUNICIPALES + TIPO_OPERACION: 0, // [int] NOT NULL, FIJO 0 + IRD: 0, // [money] NOT NULL, FIJO 0 + AUX1: 0, // [money] NOT NULL, FIJO 0 + AUX2: 0, // [money] NOT NULL, FIJO 0 + AUX3: 0, // [money] NOT NULL, FIJO 0 + AUX4: 0, // [money] NOT NULL, FIJO 0 + ARBA: null, // [money] NOT NULL, IMPORTE RETENCION ARBA + DGR: null, // [money] NOT NULL, IMPORTE RETENCION DGR + DTO_PIE: null, // [money] NOT NULL, IMPORTE DE DESCUENTO AL PIE, NO POR ITEM + OPERACIONES_3711: 1, // [int] NOT NULL, FIJO 1 (PORQUE SON BIENES) + ORC: null, // [bigint] NOT NULL, NUMERO DE ORDEN DE COMPRA + NC_ES_NP: 0, // [bit] NOT NULL, FIJO 0 + CABA: null, // [money] NOT NULL, IMPORTE RETENCION CABA + ARBA_PER: null, // [money] NOT NULL, IMPORTE PERCEPCION ARBA + CABA_PER: null, // [money] NOT NULL, IMPORTE PERCEPCION CABA + PERMUN: comprobante.importesTotales.importeImpuestosMunicipales, // [money] NOT NULL, IMPORTE PERCEPCIONES MUNICIPALES + IMI2: 0, // [money] NOT NULL, FIJO 0 + }; +} diff --git a/debo/cuerpoDebo.js b/debo/cuerpoDebo.js new file mode 100644 index 0000000..2ded185 --- /dev/null +++ b/debo/cuerpoDebo.js @@ -0,0 +1,41 @@ +module.exports = function(comprobante) { + + return { + TIP: null, // [char](1) NOT NULL, LETRA DEL COMPROBANTE (A,B,C,M) + TCO: null, // [char](2) NOT NULL, TIPO DE COMPROBANTE (FT,NC,ND) + SUC: parseInt(comprobante.identificaxComprobante.puntoVenta), // [int] NOT NULL, PUNTO DE VENTA DE LA FACTURA + NCO: parseInt(comprobante.identificaxComprobante.numero), // [bigint] NOT NULL, NUMERO DE COMPROBANTE + PRO: null, // [int] NOT NULL, CODIGO DEL PROVEEDOR NECESITAS RELACION -- BUSCAR SI ENVIAN EL CUIT DEL PROVEEDOR SELECT COD FROM PROVEED WHERE CUIT= '30-54775125-2' + ORD: parseInt(comprobante.itemsFactura.numeroLinea), // [int] NOT NULL, ORDEN DEL ITEM, EMPIEZA EN 1 Y SUMA DE A 1 POR CADA REGISTRO DE MOVIMIENTO + COD: null, // [int] NOT NULL, SECTOR DEBO DEL PRODUCTO + ART: null, // [int] NOT NULL, ARTICULO DEBO DEL PRODUCTO ESTOS 2 SE OBTIENEN A PARTIR DEL CODIGO DE BARRAS: SELECT CodSec AS SECTOR,CodArt AS ARTICULO FROM CODBAR WHERE CODBAR='03239210540' + RUB: null, // [int] NOT NULL, CODIGO DE RUBRO SE OBTIENE DE LA TABLA ARTICULOS SELECT DET_LAR,CODRUB FROM ARTICULOS WHERE CODSEC=SECTOR AND CODART=ARTICULO (DATOS OBTENIDOS EN NOTA ANTERIOR + TIO: null, // [varchar](60) NOT NULL DESCRIPCION DEL PRODUCTO DEL PUNTO ANTERIOR DET_LAR + LI0: comprobante.itemsFactura.descripcion, // [varchar](60) NOT NULL, DESCRIPCION ENVIADA POR EL PROVEEDOR + CAN: comprobante.itemsFactura.cantidad, // [money] NOT NULL, CANTIDAD DEL ITEM + PUN: comprobante.itemsFactura.precioUnitario, // [decimal](20, 8) NOT NULL PRECIO UNITARIO DEL PRODUCTO ITEM + IMI: comprobante.detalleImpuestosItemFactura.importeImpuesto, // [money] NOT NULL, IMPORTE IMPUESTOS INTERNOS DEL ITEM + IVA: comprobante.itemsFactura.importeIVA, // [money] NOT NULL, IMPORTE IVA DEL ITEM + PUT: comprobante.itemsFactura.precioUnitario, // [money] NOT NULL, IGUAL AL PUN + LEG: 0, // [int] NOT NULL, FIJO 0 + CMF: 0, // [int] NOT NULL, FIJO 0 + TUR: 0, // [int] NOT NULL, FIJO 0 + PLA: 0, // [int] NOT NULL, FIJO 0 + LUG: 0, // [int] NOT NULL, FIJO 0 + ESC: 0, // [bit] NOT NULL, FIJO 0 + TAN: 0, // [int] NOT NULL, FIJO 0 + CCO: 0, // [bigint] NOT NULL, FIJO 0 + E_HD: '', // [varchar](8) NOT NULL, FIJO '' VACIO NO NULO + C_HD: '', // [varchar](1) NOT NULL, FIJO '' VACIO NO NULO + DTO: comprobante.detalleDescuentosItemFactura.importeDescuento, // [money] NOT NULL, IMPORTE DESCUENTO DE LA FACTURA + PTA: 0, // [int] NOT NULL, FIJO 0 + SUBM: 0, // [int] NOT NULL, FIJO 0 + E_HD2: '', // [varchar](12) NOT NULL, FIJO '' VACIO NO NULO + C_HD2: '', // [varchar](1) NOT NULL, FIJO '' VACIO NO NULO + COMISION: 0, // [money] NOT NULL, FIJO 0 + LIQ_VTA: '', // [varchar](20) NOT NULL, FIJO '' VACIO NO NULO + COSTO_PMOV: comprobante.itemsFactura.precioUnitario, // [money] NOT NULL, IGUAL AL PUN + SAL_ITEM: 0, // [money] NOT NULL, fijo 0 es el que se llenara al mostrar en la tablet o telefono para que llene operador + TASIVA: comprobante.itemsFactura.alicuotaIVAAplicable, // [money] NOT NULL, TASA DE IVA DEL ITEM = 21.00 / 10.50 / ETC. + }; +} diff --git a/debo/index.js b/debo/index.js new file mode 100644 index 0000000..9c9eeea --- /dev/null +++ b/debo/index.js @@ -0,0 +1,9 @@ +module.exports = function(comprobante) { + + var afipTablas = require('../afip/index'); + + return { + cabecera: require('./cabeceraDebo')(comprobante, afipTablas), + cuerpo: require('./cuerpoDebo')(comprobante, afipTablas) + }; +} diff --git a/index.js b/index.js index 5193300..9116555 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,10 @@ const config = require('./config/config.json'); const planex = require('./planex/index')(''); +const debo = require('./debo/index')(planex); + console.log(planex); +console.log(debo); fs.watch(__dirname, function (event, file) { console.log(event); @@ -16,15 +19,20 @@ const wsServer = new webSocketServer({ }); wsServer.on('connection', function connection(ws) { - console.log('open socket server') + + console.log('open socket server'); ws.on('message', function incoming(message) { - console.log('recibe ho: %s', message); - if (message == 'isAlive?') { - setTimeout(function () { - ws.send('YES IS ALIVE'); - }, 10000); + message = message.toString('utf8'); + console.log(message); + + switch (message) { + case message.action == 'gln': + ws.gln = message.gln; + break; + default: + break; } }); }); diff --git a/planex/comprobantesReferencia.js b/planex/comprobantesReferencia.js index 31a9e76..16cadc3 100644 --- a/planex/comprobantesReferencia.js +++ b/planex/comprobantesReferencia.js @@ -6,8 +6,8 @@ module.exports = function(comprobante) { return { tipoDocumentoReferencia: comprobanteArr[1], - puntoVentaReferencia: comprobanteArr[2], - numeroDocumentoReferencia: comprobanteArr[3], + puntoVentaReferencia: parseInt(comprobanteArr[2]), + numeroDocumentoReferencia: parseInt(comprobanteArr[3]), fechaComprobanteReferencia: comprobanteArr[4], cuitEmisorComprobanteAsociado: comprobanteArr[5] } diff --git a/planex/descuentosGlobalesFactura.js b/planex/descuentosGlobalesFactura.js index 0d5f891..297a7a1 100644 --- a/planex/descuentosGlobalesFactura.js +++ b/planex/descuentosGlobalesFactura.js @@ -1,12 +1,12 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { var comrpobanteArr = comprobante.split(';'); return { descripcionDescuentoOIntereses: comrpobanteArr[1], - porcentaje: comrpobanteArr[2], - importeBase: comrpobanteArr[3], - importe: comrpobanteArr[4], + porcentaje: returnFloatByDecimals(comrpobanteArr[2], 2), + importeBase: returnFloatByDecimals(comrpobanteArr[3], 2), + importe: returnFloatByDecimals(comrpobanteArr[4]), ClasificadorDescuentoOInteres: comrpobanteArr[5] }; } diff --git a/planex/detalleDescuentosItemFactura.js b/planex/detalleDescuentosItemFactura.js index 6765048..1c9b1cd 100644 --- a/planex/detalleDescuentosItemFactura.js +++ b/planex/detalleDescuentosItemFactura.js @@ -1,12 +1,12 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { var comprobanteArr = comprobante.split(';'); return { numeroLinea: comprobanteArr[1], descripcionDescuento: comprobanteArr[2], - porcentajeDescuento: comprobanteArr[3], - importeBase: comprobanteArr[4], - importeDescuento: comprobanteArr[5], + porcentajeDescuento: returnFloatByDecimals(comprobanteArr[3], 2), + importeBase: returnFloatByDecimals(comprobanteArr[4], 2), + importeDescuento: returnFloatByDecimals(comprobanteArr[5], 2) }; } diff --git a/planex/detalleImpuestosItemFactura.js b/planex/detalleImpuestosItemFactura.js index 8754d9a..6cde925 100644 --- a/planex/detalleImpuestosItemFactura.js +++ b/planex/detalleImpuestosItemFactura.js @@ -1,12 +1,12 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { var comprobanteArr = comprobante.split(';'); return { numeroLinea: comprobanteArr[1], descripcionImpuesto: comprobanteArr[2], - procentajeImpuesto: comprobanteArr[3], - importeBase: comprobanteArr[4], - importeImpuesto: comprobanteArr[5] + procentajeImpuesto: returnFloatByDecimals(comprobanteArr[3], 2), + importeBase: returnFloatByDecimals(comprobanteArr[4], 2), + importeImpuesto: returnFloatByDecimals(comprobanteArr[5, 2]) }; } diff --git a/planex/detalleOtrosImpuestosComprobante.js b/planex/detalleOtrosImpuestosComprobante.js index db2d31c..e45ff25 100644 --- a/planex/detalleOtrosImpuestosComprobante.js +++ b/planex/detalleOtrosImpuestosComprobante.js @@ -1,12 +1,12 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { var comprobanteArr = comprobante.split(';'); return { descripcionImpuesto: comprobanteArr[1], - porcentaje: comprobanteArr[2], - importeBase: comprobanteArr[3], - importeImpuesto: comprobanteArr[4], + porcentaje: returnFloatByDecimals(comprobanteArr[2], 2), + importeBase: returnFloatByDecimals(comprobanteArr[3], 2), + importeImpuesto: returnFloatByDecimals(comprobanteArr[4], 2), codigoArancelImpuestoOCuota: comprobanteArr[5], jurisdiccion: comprobanteArr[6] }; diff --git a/planex/detallePercepcionesIIBB.js b/planex/detallePercepcionesIIBB.js index f3055e5..b3217e8 100644 --- a/planex/detallePercepcionesIIBB.js +++ b/planex/detallePercepcionesIIBB.js @@ -1,4 +1,4 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { comprobante = '070;01;000000000000411;00;000000000000000;PERC .I.B. BS. A.S;00250;000000000016436;00000;000000000000000 '; @@ -6,13 +6,13 @@ module.exports = function(comprobante) { return { codigoJurisdiccionIB: comprobanteArr[1], - importePercepcionesIB: comprobanteArr[2], + importePercepcionesIB: returnFloatByDecimals(comprobanteArr[2], 2), jurisdiccionImpuestosMunicipales: comprobanteArr[3], - importePercepcionesImpuestosMunicipales: comprobanteArr[4], + importePercepcionesImpuestosMunicipales: returnFloatByDecimals(comprobanteArr[4], 2), descripcionPercepcionIB: comprobanteArr[5], - porcentajePercepcionesIB: comprobanteArr[6], - importeBasePercepcionesIB: comprobanteArr[7], - porcentajePercepcionesImpuestosMunicipales: comprobanteArr[8], - importeBasePercepcionesImpuestosMunicipales: comprobanteArr[9] + porcentajePercepcionesIB: returnFloatByDecimals(comprobanteArr[6], 2), + importeBasePercepcionesIB: returnFloatByDecimals(comprobanteArr[7], 2), + porcentajePercepcionesImpuestosMunicipales: returnFloatByDecimals(comprobanteArr[8], 2), + importeBasePercepcionesImpuestosMunicipales: returnFloatByDecimals(comprobanteArr[9], 2) }; } diff --git a/planex/detallesImportesIVA.js b/planex/detallesImportesIVA.js index 29c5f1b..5a0b786 100644 --- a/planex/detallesImportesIVA.js +++ b/planex/detallesImportesIVA.js @@ -1,13 +1,13 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { - comprobante = '060;02100;000000000024349;000000000115946;000000000000000 '; + comprobante = '060;02100;000000000024349;000000000115946;000000000000000'; var comprobanteArr = comprobante.split(';'); return { - alicuotaIVAAplicable: comprobanteArr[1], - importeLiquidado: comprobanteArr[2], - importeNetoGravado: comprobanteArr[3], - importeLiquidadoRNI: comprobanteArr[4] + alicuotaIVAAplicable: returnFloatByDecimals(comprobanteArr[1], 2), + importeLiquidado: returnFloatByDecimals(comprobanteArr[2], 2), + importeNetoGravado: returnFloatByDecimals(comprobanteArr[3], 2), + importeLiquidadoRNI: returnFloatByDecimals(comprobanteArr[4], 2) }; } diff --git a/planex/identificaxComprobante.js b/planex/identificaxComprobante.js index 5c27b04..c2fce9d 100644 --- a/planex/identificaxComprobante.js +++ b/planex/identificaxComprobante.js @@ -6,9 +6,9 @@ module.exports = function(comprobante) { return { tipo: comprobanteArr[1], - numero: comprobanteArr[2], - numeroRegistrado: comprobanteArr[3], - puntoVenta: comprobanteArr[4], + numero: parseInt(comprobanteArr[2]), + numeroRegistrado: parseInt(comprobanteArr[3]), + puntoVenta: parseInt(comprobanteArr[4]), fechaComprobante: comprobanteArr[5], fechaVencimiento: comprobanteArr[6], fechaSegundoVencimiento: comprobanteArr[7], diff --git a/planex/importesTotales.js b/planex/importesTotales.js index 209104c..3d83d72 100644 --- a/planex/importesTotales.js +++ b/planex/importesTotales.js @@ -1,34 +1,34 @@ -module.exports = function(comprobante) { - - comprobante = '050;000000000000000;000000000000000;000000000000000;000000000140295;000000000000000;000000000115946;000000 000024349;000000000000000;000000000000000;000000000000000;000000000000000;000000000000000;000000000000000; ;PES;00001000000;1;000000000000000;;; ' +module.exports = function(comprobante, returnFloatByDecimals) { + + comprobante = '050;000000000000000;000000000000000;000000000000000;000000000140295;000000000000000;000000000115946;000000 000024349;000000000000000;000000000000000;000000000000000;000000000000000;000000000000000;000000000000000;;PES;00001000000;1;000000000000000;;;' var comprobanteArr = comprobante.split(';'); return { - saldoAnterior: comprobanteArr[1], - totalBruto: comprobanteArr[2], - totalNeto: comprobanteArr[3], - totalOperacion: comprobanteArr[4], - totalConceptosNoNetoGravado: comprobanteArr[5], - netoGravado: comprobanteArr[6], - liquidado: comprobanteArr[7], - liquidadoRNI: comprobanteArr[8], - importeOperacionesExentas: comprobanteArr[9], - importeACtaImpuestosNacionales: comprobanteArr[10], - importeIB: comprobanteArr[11], - importeImpuestosMunicipales: comprobanteArr[12], - importeImpuestosInternos: comprobanteArr[13], - transporte: comprobanteArr[14], + saldoAnterior: returnFloatByDecimals(comprobanteArr[1], 2), + totalBruto: returnFloatByDecimals(comprobanteArr[2], 2), + totalNeto: returnFloatByDecimals(comprobanteArr[3], 2), + totalOperacion: returnFloatByDecimals(comprobanteArr[4], 2), + totalConceptosNoNetoGravado: returnFloatByDecimals(comprobanteArr[5], 2), + netoGravado: returnFloatByDecimals(comprobanteArr[6], 2), + liquidado: returnFloatByDecimals(comprobanteArr[7], 2), + liquidadoRNI: returnFloatByDecimals(comprobanteArr[8], 2), + importeOperacionesExentas: returnFloatByDecimals(comprobanteArr[9], 2), + importeActaImpuestosNacionales: returnFloatByDecimals(comprobanteArr[10], 2), + importeIB: returnFloatByDecimals(comprobanteArr[11], 2), + importeImpuestosMunicipales: returnFloatByDecimals(comprobanteArr[12], 2), + importeImpuestosInternos: returnFloatByDecimals(comprobanteArr[13], 2), + transporte: returnFloatByDecimals(comprobanteArr[14], 2), monedaFacturacion: comprobanteArr[15], - tipoCambioFacturacion: comprobanteArr[16], + tipoCambioFacturacion: returnFloatByDecimals(comprobanteArr[16], 2), cantidadAlicuotasIVA: comprobanteArr[17], - totalFacturaSegundoVencimiento: comprobanteArr[18], + totalFacturaSegundoVencimiento: returnFloatByDecimals(comprobanteArr[18], 2), observaciones: comprobanteArr[19], observacionesDebitoAutomatico: comprobanteArr[20], fechaTipoCambioFacturacion: comprobanteArr[21], monedaPago: comprobanteArr[22], - tipoCambioMonedaPago: comprobanteArr[23], + tipoCambioMonedaPago: returnFloatByDecimals(comprobanteArr[23], 6), fechaTipoCambioPago: comprobanteArr[24], - importeOtrosTributos: comprobanteArr[25] + importeOtrosTributos: returnFloatByDecimals(comprobanteArr[25], 2) }; } diff --git a/planex/index.js b/planex/index.js index 2cb173d..455c9b2 100644 --- a/planex/index.js +++ b/planex/index.js @@ -1,5 +1,17 @@ module.exports = function(comprobante) { + + function returnFloatByDecimals(parameter, cantDecimal) { + + if (!parameter) return; + + var antesDeLaComa = parseFloat(parameter.slice(0, parameter.length - cantDecimal)); + + var despuesDeLaComa = parameter.slice(parameter.length - cantDecimal, parameter.length); + + return parseFloat(antesDeLaComa + '.' + despuesDeLaComa); + } + return { identificaxComprobante: require('./identificaxComprobante')(comprobante),// 010 identificaxMensaje: require('./identificaxMensaje')(comprobante),// 012 @@ -8,13 +20,13 @@ module.exports = function(comprobante) { informaxRepresentanteEmisor: require('./informaxRepresentanteEmisor')(comprobante), // 035 identificaxReceptorFactura: require('./identificaxReceptorFactura')(comprobante), // 040 identificaxSucursalReceptorFactura: require('./identificaxSucursalReceptorFactura')(comprobante), // 045 - importesTotales: require('./importesTotales')(comprobante), // 050 - detallesImportesIVA: require('./detallesImportesIVA')(comprobante), // 060 - detallePercepcionesIIBB: require('./detallePercepcionesIIBB')(comprobante), // 070 - descuentosGlobalesFactura: require('./descuentosGlobalesFactura')(comprobante), // 080 - detalleOtrosImpuestosComprobante: require('./detalleOtrosImpuestosComprobante')(comprobante), // 090 - itemsFactura: require('./itemsFactura')(comprobante), // 100 - detalleDescuentosItemFactura: require('./detalleDescuentosItemFactura')(comprobante), // 110 - detalleImpuestosItemFactura: require('./detalleImpuestosItemFactura')(comprobante), // 120 + importesTotales: require('./importesTotales')(comprobante, returnFloatByDecimals), // 050 + detallesImportesIVA: require('./detallesImportesIVA')(comprobante, returnFloatByDecimals), // 060 + detallePercepcionesIIBB: require('./detallePercepcionesIIBB')(comprobante, returnFloatByDecimals), // 070 + descuentosGlobalesFactura: require('./descuentosGlobalesFactura')(comprobante, returnFloatByDecimals), // 080 + detalleOtrosImpuestosComprobante: require('./detalleOtrosImpuestosComprobante')(comprobante, returnFloatByDecimals), // 090 + itemsFactura: require('./itemsFactura')(comprobante, returnFloatByDecimals), // 100 + detalleDescuentosItemFactura: require('./detalleDescuentosItemFactura')(comprobante, returnFloatByDecimals), // 110 + detalleImpuestosItemFactura: require('./detalleImpuestosItemFactura')(comprobante, returnFloatByDecimals), // 120 }; } diff --git a/planex/itemsFactura.js b/planex/itemsFactura.js index c9b1099..099b426 100644 --- a/planex/itemsFactura.js +++ b/planex/itemsFactura.js @@ -1,4 +1,4 @@ -module.exports = function(comprobante) { +module.exports = function(comprobante, returnFloatByDecimals) { comprobante = '100;000001;74300;2087455000005;DescripciónArticulo;000000000500000;;000000000035500;02100;0000 00000003452;000000000016437;000000000000000;000000000000000;G; ;000000000000100;000000000000100;CR;CU;000000000032873;7798569874125;; '; @@ -9,26 +9,26 @@ module.exports = function(comprobante) { codigoProductoServicio: comprobanteArr[2], codigoProductoServicioComprador: comprobanteArr[3], descripcion: comprobanteArr[4], - cantidad: comprobanteArr[5], + cantidad: returnFloatByDecimals(comprobanteArr[5], 5), unidadMedida: comprobanteArr[6], - precioUnitario: comprobanteArr[7], - alicuotaIVAAplicable: comprobanteArr[8], - importeIVA: comprobanteArr[9], - subtotalPorRegistro: comprobanteArr[10], - importeBonificacion: comprobanteArr[11], - importeAjuste: comprobanteArr[12], + precioUnitario: returnFloatByDecimals(comprobanteArr[7], 3), + alicuotaIVAAplicable: returnFloatByDecimals(comprobanteArr[8], 2), + importeIVA: returnFloatByDecimals(comprobanteArr[9], 2), + subtotalPorRegistro: returnFloatByDecimals(comprobanteArr[10], 2), + importeBonificacion: returnFloatByDecimals(comprobanteArr[11], 2), + importeAjuste: returnFloatByDecimals(comprobanteArr[12], 2), indicacionExento: comprobanteArr[13], indicacionAnulacion: comprobanteArr[14], - numeroUnidadesPorUnidadEmbalaje: comprobanteArr[15], - cantidadEmbalajes: comprobanteArr[16], + numeroUnidadesPorUnidadEmbalaje: returnFloatByDecimals(comprobanteArr[15], 2), + cantidadEmbalajes: returnFloatByDecimals(comprobanteArr[16], 2), codigoTipoEmbalaje: comprobanteArr[17], unidadReferenciaDescripcion: comprobanteArr[18], - precioUnitarioSinImpuestos: comprobanteArr[19], + precioUnitarioSinImpuestos: returnFloatByDecimals(comprobanteArr[19], 3), codigoUPCEAN13: comprobanteArr[20], codigoDUN14: comprobanteArr[21], codigoMercosur: comprobanteArr[22], unidadesMatrix: comprobanteArr[23], codigoMatrix: comprobanteArr[24], - precioLista: comprobanteArr[25] + precioLista: returnFloatByDecimals(comprobanteArr[25], 2) }; }