UNPKG

cfdi40

Version:

Libreria para crear y sellar xml cfdi V4.0

453 lines (395 loc) 9.57 kB
[![MIT License][license-image]][license-url] [![Greenkeeper badge][green-image]][green-url] [![Known Vulnerabilities][snyk-image]][snyk-url] [![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![dependencies status][dev-image]][dev-url] [green-image]: https://badges.greenkeeper.io/PolygonTechMX/CFDI.svg [green-url]: https://greenkeeper.io/ [snyk-image]: https://snyk.io/test/github/polygontechmx/cfdi/badge.svg?targetFile=package.json [snyk-url]: https://snyk.io/test/github/polygontechmx/cfdi?targetFile=package.json [license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat [license-url]: LICENSE [npm-url]: https://npmjs.org/package/cfdi [npm-version-image]: http://img.shields.io/npm/v/cfdi.svg?style=flat [npm-downloads-image]: http://img.shields.io/npm/dt/cfdi.svg?style=flat [dev-image]: https://img.shields.io/david/mgcrea/node-openssl-wrapper.svg?style=flat [dev-url]: https://david-dm.org/mgcrea/node-openssl-wrapper Libreria para crear y sellar documendos xml cfdi. Por el momento solo funciona para windows y no requiere instalacion de OpenSSL ni Libxml2 ya que vienen integrados en el paquete. <!-- toc --> - [Instalación](#Instalación) - [Metodos](#Glosario) * [`Init`](#init) * [`Comprobante`](#comprobante) * [`CFDI Relacionados`](#relacionados) * [`Emisor`](#emisor) * [`Receptor`](#receptor) * [`Concepto`](#concepto) * [`Traslados`](#concepto.traslado) * [`Retenciones`](#concepto.retencion) * [`Agregar`](#concepto.agregar) * [`Impuestos`](#impuestos) * [`Certificar`](#certificar) * [`Generar XML`](#xml) * [`Generar XML Sellado`](#xmlSellado) - [Ejemplos]() * [`Ejemplo básico`](#basico) * [`Ejemplo simplificado`](#simplificado) * [`Complemento de Pago`](#complementopago) <!-- tocstop --> ## Instalación NPM: * npm install cfdi40 --save YARN: * yarn add cfdi40 ## Glosario ### `init` ```javascript const CFDI = require('cfdi40'); const key = './LAN7008173R5.key'; const cer = './LAN7008173R5.cer'; const cfdi = new CFDI() ``` ### `comprobante` ```javascript cfdi.comprobante({ Serie: 'A', Folio: '167ABC', Fecha: '2018-01-16T09:33:43', SubTotal: '369.83', Moneda: 'MXN', Total: '429.00', TipoDeComprobante: 'I', FormaPago: '01', MetodoPago: 'PUE', CondicionesDePago: 'CONDICIONES', Descuento: '0.00', TipoCambio: '1', LugarExpedicion: '45079' }); ``` ### `relacionados` ```javascript cfdi.CfdiRelacionados({ TipoRelacion: '', CfdiRelacionados: ['UUID_____________1', 'UUID_____________2', 'UUID_____________3'] }); ``` ### `emisor` ```javascript cfdi.emisor({ Rfc: 'SAT', Nombre: 'SAT SA DE CV', RegimenFiscal: '601' }); ``` ### `receptor` ```javascript cfdi.receptor({ Rfc: 'MALD930428US2', Nombre: 'DAVID ISAAC MARTINEZ LOPEZ', UsoCFDI: 'G01' }); ``` ### `concepto` ```javascript const concepto = cfdi.concepto({ ClaveProdServ: '52121500', ClaveUnidad: 'E48', NoIdentificacion: '3031130179', Cantidad: '1', Unidad: 'PZ', Descripcion: 'BATITA UNICORNIO', ValorUnitario: '369.83', Importe: '369.83' }); ``` ### `concepto.traslado` ```javascript concepto.traslado({ Base: '369.83', Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' }); ``` ### `concepto.retencion` ```javascript concepto.retencion({ Base: '369.83', Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' }); ``` ### `concepto.agregar` ```javascript concepto.agregar(cfdi), ``` ### `impuestos` ```javascript cfdi.impuestos({ TotalImpuestosTrasladados: '59.17', Traslados: [ { Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' } ] }); ``` ### `certificar` ```javascript const cer = path.join(__dirname, 'LAN7008173R5.cer'); cfdi.certificar(cer); ``` ### xml ```javascript cfdi .xml() .then(xml => console.log(xml)) .catch(err => console.log(err)); ``` ### `xmlSellado` ```javascript const key = path.join(__dirname, 'LAN7008173R5.key'); cfdi.xmlSellado(key, '12345678a') .then(xml => console.log(xml)) .catch(err => console.log(err)); ``` ### `basico` ```javascript const fs = require('fs'); const CFDI = require('../src/CFDI'); const key = './LAN7008173R5.key'; const cer = './LAN7008173R5.cer'; const cfdi = new CFDI({ Serie: 'A', Folio: '167ABC', Fecha: '2018-01-16T09:33:43', SubTotal: '369.83', Moneda: 'MXN', Total: '429.00', TipoDeComprobante: 'I', FormaPago: '01', MetodoPago: 'PUE', CondicionesDePago: 'CONDICIONES', Descuento: '0.00', TipoCambio: '1', LugarExpedicion: '45079' }); cfdi.emisor({ Rfc: 'SAT', Nombre: 'SAT SA DE CV', RegimenFiscal: '601' }); cfdi.receptor({ Rfc: 'MALD930428US2', Nombre: 'DAVID ISAAC MARTINEZ LOPEZ', UsoCFDI: 'G01' }); const concepto = cfdi.concepto({ ClaveProdServ: '52121500', ClaveUnidad: 'E48', NoIdentificacion: '3031130179', Cantidad: '1', Unidad: 'PZ', Descripcion: 'BATITA UNICORNIO', ValorUnitario: '369.83', Importe: '369.83' }); concepto.traslado({ Base: '369.83', Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' }); concepto.agregar(cfdi); cfdi.impuestos({ TotalImpuestosTrasladados: '59.17', Traslados: [ { Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' } ] }); cfdi.certificar(cer); cfdi.xmlSellado(key, '12345678a') .then(xml => console.log(xml)) .catch(err => console.log(err)); ``` ### `simplificado` ```javascript const fs = require('fs'); const CFDI = require('../src/CFDI'); const key = './LAN7008173R5.key'; const cer = './LAN7008173R5.cer'; const cfdi = new CFDI({ Serie: 'A', Folio: '167ABC', Fecha: '2018-01-16T09:33:43', SubTotal: '369.83', Moneda: 'MXN', Total: '429.00', TipoDeComprobante: 'I', FormaPago: '01', MetodoPago: 'PUE', CondicionesDePago: 'CONDICIONES', Descuento: '0.00', TipoCambio: '1', LugarExpedicion: '45079' }).emisor({ Rfc: 'SAT', Nombre: 'SAT SA DE CV', RegimenFiscal: '601' }).receptor({ Rfc: 'MALD930428US2', Nombre: 'DAVID ISAAC MARTINEZ LOPEZ', UsoCFDI: 'G01' }).impuestos({ TotalImpuestosTrasladados: '59.17', Traslados: [ { Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' } ] }); cfdi.concepto({ ClaveProdServ: '52121500', ClaveUnidad: 'E48', NoIdentificacion: '3031130179', Cantidad: '1', Unidad: 'PZ', Descripcion: 'BATITA UNICORNIO', ValorUnitario: '369.83', Importe: '369.83' }).retencion({ Base: '369.83', Impuesto: '002', TipoFactor: 'Tasa', TasaOCuota: '0.16', Importe: '59.17' }).agregar(cfdi); cfdi .certificar(cer) .xmlSellado(key, '12345678a') .then(xml => console.log(xml)) .catch(err => console.log(err)); ``` ## `Complemento.pago` ```javascript const cfdi = new CFDI({ Serie: 'A', Folio: '167ABC', Fecha: '2018-01-16T09:33:43', SubTotal: '369.83', Moneda: 'MXN', Total: '429.00', TipoDeComprobante: 'I', FormaPago: '01', MetodoPago: 'PUE', CondicionesDePago: 'CONDICIONES', Descuento: '0.00', TipoCambio: '1', LugarExpedicion: '45079' }).emisor({ Rfc: 'SAT', Nombre: 'SAT SA DE CV', RegimenFiscal: '601' }).receptor({ Rfc: 'MALD930428US2', Nombre: 'DAVID ISAAC MARTINEZ LOPEZ', UsoCFDI: 'G01' }) cfdi.concepto({ ClaveProdServ: '52121500', ClaveUnidad: 'E48', NoIdentificacion: '3031130179', Cantidad: '1', Unidad: 'PZ', Descripcion: 'BATITA UNICORNIO', ValorUnitario: '369.83', Importe: '369.83' }).agregar(cfdi); cfdi.Pago({ FechaPago: '2018-01-16T09:33:43', FormaDePagoP: '03', MonedaP: 'MXN', Monto: '429.00' }).Totales({ MontoTotalPagos: '112.00', TotalRetencionesIVA: '4.00', TotalTrasladosBaseIVA16: '100.00', TotalTrasladosImpuestoIVA16: '16.00' }).DoctoRelacionado({ IdDocumento: '83805D05-4538-5C99-BC5C-5C73AEB7D0EB', MonedaDR: 'MXN', NumParcialidad: '1', ImpSaldoAnt: '112.00', ImpSaldoInsoluto: '0.00' }).RetencionesDR({ BaseDR:"100.00", ImporteDR:"4.00", ImpuestoDR:"002", TasaOCuotaDR:"0.040000", TipoFactorDR:"Tasa" }) .TrasladosDR({ BaseDR:"100.00", ImporteDR:"16.00", ImpuestoDR:"002", TasaOCuotaDR:"0.160000", TipoFactorDR:"Tasa" }).agregar(cfdi); cfdi.Pago({ FechaPago: '2018-01-16T09:33:43', FormaDePagoP: '03', MonedaP: 'MXN', Monto: '429.00' }).DoctoRelacionado({ IdDocumento: '--------------------------------', MonedaDR: 'MXN', NumParcialidad: '1', ImpSaldoAnt: '112.00', ImpSaldoInsoluto: '0.00' }).agregar(cfdi); cfdi.impuestosP({ TrasladoP: [ { BaseP:"100.00", ImporteP:"16.00", ImpuestoP:"002", TasaOCuotaP:"0.160000", TipoFactorP:"Tasa" } ], RetencionP: [ { ImporteP:"4.00", ImpuestoP:"002" } ] }) cfdi .certificar(cer) .xmlSellado(key, '12345678a') .then(xml => fs.writeFileSync('./test/testCRP.xml', xml)) .catch(err => console.log(err)); ``` ## Utilidades Windows build tools * npm install --global windows-build-tools OpenSSL Windows X64 * https://slproweb.com/download/Win64OpenSSL-1_0_2n.exe