node-nfe-nfce
Version:
Modulo que auxilia na geração de NFe e NFCe
726 lines • 19.4 kB
JavaScript
"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} Nº ${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