UNPKG

node-nfe-nfce

Version:

Modulo que auxilia na geração de NFe e NFCe

726 lines 19.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.pdfNFCe = void 0; const load_fontes_1 = require("../../../application/helpers/generate-pdf/nfe/load-fontes"); const normal_1 = require("../../../application/helpers/generate-pdf/nfe/normal"); const negrito_1 = require("../../../application/helpers/generate-pdf/nfe/negrito"); const pdfkit_1 = __importDefault(require("pdfkit")); const date_fns_1 = require("date-fns"); const qrcode_1 = __importDefault(require("qrcode")); async function pdfNFCe(nf, pathLogo) { const { NFe, protNFe } = nf; const { infProt } = protNFe; const { ide, emit, det, total, pag, dest, infAdic } = NFe.infNFe; const larguraPagina = 201; const margemPadrao = 2.5; const larguraUtil = larguraPagina - margemPadrao * 2; const docMedicao = new pdfkit_1.default({ size: [larguraPagina, 5000] }); (0, load_fontes_1.loadFontsNFCe)(docMedicao); const hLogo = pathLogo ? 65 : 0; docMedicao.fontSize(10); const hNomeEmit = docMedicao.heightOfString(emit.xNome, { width: larguraUtil, }); docMedicao.fontSize(8); const hEndEmit = docMedicao.heightOfString(`${emit.enderEmit.xLgr}, ${emit.enderEmit.nro}${emit.enderEmit.xCpl ?? ''}. ${emit.enderEmit.xBairro}, ${emit.enderEmit.xMun}-${emit.enderEmit.UF}. ${emit.enderEmit.CEP}`, { width: larguraUtil }); docMedicao.fontSize(7); const hItens = det.length * 9; const hPagamentos = pag.detPag.length * 9; const hMensagensAdicionais = infAdic?.infCpl ? docMedicao.heightOfString(infAdic.infCpl, { width: larguraUtil }) : 10; const hCnpjEmit = 12; const alturaCalculada = hLogo + hNomeEmit + hCnpjEmit + hEndEmit + hItens + hPagamentos + hMensagensAdicionais + 280; const doc = new pdfkit_1.default({ size: [larguraPagina, alturaCalculada], margins: { top: margemPadrao, bottom: 5, left: margemPadrao, right: margemPadrao, }, }); (0, load_fontes_1.loadFontsNFCe)(doc); if (pathLogo !== undefined) { doc.image(pathLogo, (larguraPagina - 60) / 2, doc.y, { fit: [60, 60], }); } (0, negrito_1.negrito)({ doc, value: emit.xNome, x: 0, y: doc.y, largura: larguraPagina, tamanho: 10, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, }); (0, negrito_1.negrito)({ doc, value: emit.CNPJ.replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/, '$1.$2.$3/$4-$5'), x: 0, y: doc.y, largura: larguraPagina, tamanho: 10, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, }); (0, normal_1.normal)({ doc, value: `${emit.enderEmit.xLgr}, ${emit.enderEmit.nro}${emit.enderEmit.xCpl !== undefined ? ' ' + emit.enderEmit.xCpl : ''}. ${emit.enderEmit.xBairro}, ${emit.enderEmit.xMun}-${emit.enderEmit.UF}. ${emit.enderEmit.CEP}`, x: 0, y: doc.y, largura: larguraPagina, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, }); doc.y += 5; (0, negrito_1.negrito)({ doc, value: 'Documento Auxiliar da Nota Fiscal de Consumidor Eletronica', x: 0, y: doc.y, largura: larguraPagina, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, }); doc.y += 5; let posicao = doc.y; (0, negrito_1.negrito)({ doc, value: 'CODIGO', x: 0, y: posicao, largura: 26.5, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: margemPadrao, margemTopo: 0, alinhamento: 'left', }); (0, negrito_1.negrito)({ doc, value: 'DESCRICAO', x: 31, y: posicao, largura: 74.5, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); (0, negrito_1.negrito)({ doc, value: 'UN', x: 105, y: posicao, largura: 15, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, negrito_1.negrito)({ doc, value: 'QTD', x: 120, y: posicao, largura: 20, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, negrito_1.negrito)({ doc, value: 'VL UN', x: 140, y: posicao, largura: 27, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, negrito_1.negrito)({ doc, value: 'VL TOTAL', x: 167, y: posicao, largura: larguraPagina - 167, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); det.forEach((element) => { posicao = doc.y; (0, normal_1.normal)({ doc, value: element.prod.cProd.padStart(9, '0'), x: 0 + margemPadrao, y: posicao, largura: 28, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); (0, normal_1.normal)({ doc, value: ajusteTamanhoTexto(doc, ide.tpAmb === '1' ? element.prod.xProd : 'NOTA FISCAL EMITIDA EM AMB', 73.5), x: 31, y: posicao, largura: 73.5, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); (0, normal_1.normal)({ doc, value: element.prod.uCom, x: 105, y: posicao, largura: 15, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: element.prod.qCom, x: 120, y: posicao, largura: 20, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(element.prod.vUnCom)), x: 140, y: posicao, largura: 27, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(element.prod.vProd)), x: 167, y: posicao, largura: larguraPagina - 167, tamanho: 6, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); posicao += 7; }); doc.y += 2; (0, normal_1.normal)({ doc, value: 'Quantidade Total de Itens', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: String(det.length), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); (0, normal_1.normal)({ doc, value: 'Valor Total', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(total.ICMSTot.vProd)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); (0, normal_1.normal)({ doc, value: 'Desconto', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(total.ICMSTot.vDesc)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); (0, normal_1.normal)({ doc, value: 'Adicional/Frete/Seguro', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(total.ICMSTot.vFrete)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); (0, normal_1.normal)({ doc, value: 'Valor a Pagar', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(total.ICMSTot.vNF)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); doc.y += 5; (0, normal_1.normal)({ doc, value: 'FORMA DE PAGAMENTO', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: 'VALOR PAGO', x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); pag.detPag.forEach((element) => { (0, normal_1.normal)({ doc, value: getPagName(element.tPag), x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(element.vPag)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); }); (0, normal_1.normal)({ doc, value: 'TROCO', x: margemPadrao, y: doc.y, largura: larguraPagina, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y -= 7; (0, normal_1.normal)({ doc, value: Intl.NumberFormat('pt-BR', { minimumFractionDigits: 2 }).format(Number(pag.vTroco ?? 0)), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'right', }); doc.y += 7; (0, negrito_1.negrito)({ doc, value: 'Consulte pela chave de acesso em', x: 0, y: doc.y, largura: larguraPagina - margemPadrao * 2, tamanho: 8, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: NFe.infNFeSupl.urlChave, x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); doc.y += 7; (0, normal_1.normal)({ doc, value: nf.protNFe.infProt.chNFe.replace(/(.{4})(?=.)/g, '$1 '), x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); doc.y += 7; if (dest?.CNPJ !== undefined) { (0, normal_1.normal)({ doc, value: ' CNPJ: ' + dest.CNPJ?.replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/, '$1.$2.$3/$4-$5'), x: doc.x, y: doc.y, largura: 112, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); } else if (dest?.CPF !== undefined) { (0, normal_1.normal)({ doc, value: ' CPF: ' + dest.CPF?.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4'), x: doc.x, y: doc.y, largura: 112, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); } else { (0, normal_1.normal)({ doc, value: 'CONSUMIDOR NAO IDENTIFICADO', x: margemPadrao, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'justify', }); } doc.y += 7; (0, normal_1.normal)({ doc, value: `NFC-e Série ${ide.serie} ${ide.nNF} Data Emissão: ${(0, date_fns_1.format)((0, date_fns_1.parseISO)(ide.dhEmi), 'dd/MM/yyyy HH:mm:ss')}`, x: doc.x, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: 'Consulta via Leitor QR Code', x: margemPadrao, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); doc.y += 1; const qrImage = await qrcode_1.default.toDataURL(NFe.infNFeSupl.qrCode); doc.image(qrImage, larguraPagina / 2 - 45, doc.y, { fit: [90, 90], align: 'center', }); (0, normal_1.normal)({ doc, value: `Protocolo de Autorização: ${infProt.nProt}`, x: doc.x, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); (0, normal_1.normal)({ doc, value: `Data Autorização: ${(0, date_fns_1.format)((0, date_fns_1.parseISO)(infProt.dhRecbto), 'dd/MM/yyyy HH:mm:ss')}`, x: doc.x, y: doc.y, largura: 112, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'left', }); doc.y += 7; (0, normal_1.normal)({ doc, value: 'Informacoes de interesse do contribuinte:', x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); (0, normal_1.normal)({ doc, value: infAdic?.infCpl ?? '', x: 0, y: doc.y, largura: larguraPagina - margemPadrao, tamanho: 7, ajusteX: 0, ajusteY: 0, margemEsquerda: 0, margemTopo: 0, alinhamento: 'center', }); doc.end(); return doc; } exports.pdfNFCe = pdfNFCe; function ajusteTamanhoTexto(doc, value, tamanho) { while (doc.widthOfString(value) > tamanho) { value = value.substring(0, value.length - 1); } return value; } function getPagName(value) { if (value === '01') { return 'Dinheiro'; } if (value === '02') { return 'Cheque'; } if (value === '03') { return 'Cartão de Crédito'; } if (value === '04') { return 'Cartão de Débito'; } if (value === '05') { return 'Crédito Loja'; } if (value === '10') { return 'Vale Alimentação'; } if (value === '11') { return 'Vale Refeição'; } if (value === '12') { return 'Vale Presente'; } if (value === '13') { return 'Vale Combustível'; } if (value === '14') { return 'Duplicata Mercantil'; } if (value === '15') { return 'Boleto Bancário'; } if (value === '16') { return 'Depósito Bancário'; } if (value === '17') { return 'Pagamento Instantâneo (PIX)'; } if (value === '18') { return 'Transferência bancária, Carteira Digital'; } if (value === '19') { return 'Programa de fidelidade, CashBack, Crédito Virtual'; } if (value === '90') { return 'Sem pagamento'; } return 'Outros'; } //# sourceMappingURL=pdf-NFCe.js.map