UNPKG

@plasoft/boletos

Version:
1,382 lines (1,355 loc) 101 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/index.ts var src_exports = {}; __export(src_exports, { Banco: () => Banco, default: () => src_default, defineConfig: () => defineConfig }); module.exports = __toCommonJS(src_exports); // src/utils/pafLeft.ts function padLeft(numero, tamanho) { numero = String(numero); if (numero.length < tamanho) { numero = `0${numero}`; return padLeft(numero, tamanho); } return numero; } // src/utils/copy.ts function copy(texto, startPosition, endPosition) { let retorno2 = ""; if (typeof texto === "number") texto = String(texto); if (!endPosition) endPosition = texto.length; for (let i = 0; i < texto.length; i++) { const index = i + 1; if (index >= startPosition && index <= endPosition) { const letra = texto[i]; retorno2 += letra; } } return retorno2; } // src/utils/getFatorVencimento.ts var import_date_fns = require("date-fns"); function getFatorVencimento(vencimento) { vencimento = new Date(vencimento); if (vencimento >= new Date(2025, 1, 22)) { return (0, import_date_fns.differenceInDays)(new Date(vencimento), new Date(2022, 4, 29)).toString(); } else { return (0, import_date_fns.differenceInDays)(new Date(vencimento), new Date(1997, 9, 7)).toString(); } } // src/banks/ailos/gerarDadosBoleto.ts function gerarDadosBoleto({ dados }) { try { const { bancario, parcela } = dados; parcela.valor = Number(parcela.valor); const fatorVencimento = getFatorVencimento(parcela.vencimento); const valor = getValor(parcela.valor); const convenio = padLeft(bancario.convenio, 6); const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9); const nossoNumero = padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento; const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2); const digitoGeral = getDigitoGeral(`0859${fatorVencimento}${valor}${campoLivre}`); const codigoBarra2 = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`; const campo1 = copy(codigoBarra2, 1, 3) + copy(codigoBarra2, 4, 4) + copy(codigoBarra2, 20, 24); const campo2 = copy(codigoBarra2, 25, 34); const campo3 = copy(codigoBarra2, 35, 44); const campo4 = copy(codigoBarra2, 5, 5); const campo5 = copy(codigoBarra2, 6, 9) + copy(codigoBarra2, 10, 19); const digito1 = getDigito(campo1); const digito2 = getDigito(campo2); const digito3 = getDigito(campo3); const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + campo5; const dadosBoleto = { linhaDigitavel, fatorVencimento, valor, convenio, nossoNumero, campoLivre, digitoGeral, codigoBarra: codigoBarra2, numeroDocumento }; return dadosBoleto; } catch (error) { console.log("Falha ao gerar dados do boleto", error); return null; } } function getValor(valor) { const valorFormatado = valor.toFixed(2).replace(/\D/g, ""); return padLeft(valorFormatado, 10); } function getDigitoGeral(texto) { let i = 43; let j = 1; let soma = 0; let digito = 0; while (i >= 1) { j++; if (j === 10) j = 2; const valor = Number(copy(texto, i, i)); soma += j * valor; i--; } const restoDivisao = soma % 11; digito = 11 - restoDivisao; if (digito === 0 || digito === 1 || digito > 9) digito = 1; return String(digito); } function getDigito(texto) { let i = texto.length; let j = 1; let total = 0; let soma = 0; let digito = 0; while (i >= 1) { j = j === 1 ? 2 : 1; let valor = Number(copy(texto, i, i)); total = valor * j; if (total >= 10) { valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2)); } else { valor = total; } soma += valor; i--; } const uni = Number(copy(soma, String(soma).length, String(soma).length)); digito = 10 - uni; if (digito === 10) digito = 0; return String(digito); } // src/banks/ailos/gerarPDF.ts var import_bwip_js = __toESM(require("bwip-js")); // src/utils/maskFormat.ts var import_string_mask = __toESM(require("string-mask")); function retornaCpfCnpjFormatado(cpfCnpj) { if ((cpfCnpj == null ? void 0 : cpfCnpj.length) <= 11) { const formatter2 = new import_string_mask.default("000.000.000-00"); return formatter2.apply(cpfCnpj); } const formatter = new import_string_mask.default("00.000.000/0000-00"); return formatter.apply(cpfCnpj); } function retornaCEPFormatado(cep) { const formatter = new import_string_mask.default("00000-000"); return formatter.apply(cep); } function numberToReal(numero) { numero = typeof numero === "string" ? parseFloat(numero) : numero; numero = numero.toFixed(2).split("."); numero[0] = numero[0].split(/(?=(?:...)*$)/).join("."); return numero.join(","); } function codigoBarra(codigo) { const formatter = new import_string_mask.default("00000.00000 00000.000000 00000.000000 0 000000000000000"); return formatter.apply(codigo); } var maskFormat_default = { numberToReal, retornaCEPFormatado, retornaCpfCnpjFormatado, codigoBarra }; // src/utils/compileHbs.ts var import_handlebars = __toESM(require("handlebars")); var import_fs = __toESM(require("fs")); function compileHbs(templatePath, data) { const html = import_fs.default.readFileSync(templatePath, "utf-8"); const content = import_handlebars.default.compile(html)(data); return content; } // src/utils/getPathTemplates.ts var import_path = __toESM(require("path")); function getPathTemplates(template) { if (process.env.NODE_ENV === "dev") { return import_path.default.resolve(process.cwd(), "views", template); } return import_path.default.resolve(__dirname, template); } // src/services/api.ts var import_config = require("dotenv/config"); var import_axios = __toESM(require("axios")); var api = import_axios.default.create({ baseURL: process.env.API_URL || "https://23136fv876.execute-api.sa-east-1.amazonaws.com/dev/create-report" }); // src/utils/zip.ts var zlib = __toESM(require("zlib")); function decompress(input) { return new Promise((resolve, reject) => { zlib.gunzip(input, (error, result) => { if (error) { return reject(error); } resolve(result.toString()); }); }); } // src/banks/ailos/gerarPDF.ts function gerarPDF(_0) { return __async(this, arguments, function* ({ dados }) { try { const { generatePDF, dadosPDF } = dados; if (!dadosPDF.pagador.cnpj) { throw new Error("CPF/CNPJ do pagador na\u0303o informado!"); } const codigoBarra2 = yield import_bwip_js.default.toBuffer({ bcid: "interleaved2of5", text: dadosPDF.boleto.codigoBarra, height: 20 }); dadosPDF.beneficiario.dadosBancario.agencia = dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, "0"); dadosPDF.beneficiario.dadosBancario.conta = dadosPDF.beneficiario.dadosBancario.conta.padStart(7, "0"); dadosPDF.boleto.linhaDigitavel = maskFormat_default.codigoBarra(dadosPDF.boleto.linhaDigitavel); dadosPDF.boleto.codigoBarraImage = codigoBarra2.toString("base64"); dadosPDF.beneficiario.cnpj = maskFormat_default.retornaCpfCnpjFormatado( dadosPDF.beneficiario.cnpj ); dadosPDF.beneficiario.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.beneficiario.endereco.cep ); dadosPDF.pagador.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.pagador.endereco.cep ); dadosPDF.pagador.cnpj = maskFormat_default.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj); dadosPDF.boleto.valorAcrescimo = maskFormat_default.numberToReal( dadosPDF.boleto.valorAcrescimo ); dadosPDF.boleto.valorCobrado = maskFormat_default.numberToReal( dadosPDF.boleto.valorCobrado ); dadosPDF.boleto.valorDescontoAbatimento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDescontoAbatimento ); const valorDocumento = Number(dadosPDF.boleto.valorDocumento); dadosPDF.boleto.valorDocumento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDocumento ); dadosPDF.boleto.valorMulta = maskFormat_default.numberToReal(dadosPDF.boleto.valorMulta); dadosPDF.boleto.valorOutrasDeducoes = maskFormat_default.numberToReal( dadosPDF.boleto.valorOutrasDeducoes ); if (dadosPDF.boleto.quantidade) { dadosPDF.boleto.quantidade = maskFormat_default.numberToReal(dadosPDF.boleto.quantidade); } const jurosMes = dadosPDF.beneficiario.dadosBancario.juros; const jurosDia = jurosMes / 100 / 30 * valorDocumento; if (jurosDia > 0) { dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat_default.numberToReal(jurosDia)} AO DIA, AP\xD3S O VENCIMENTO`; } const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0; if (descontoVencimento > 0) { dadosPDF.boleto.instrucao2 = `AT\xC9 O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`; } const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0; if (multaAtraso > 0) { dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`; } const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0; if (protestoDias > 0) { dadosPDF.boleto.instrucao4 = `PROTESTAR AP\xD3S ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`; } dadosPDF.boleto.valor = maskFormat_default.numberToReal(dadosPDF.boleto.valor); const content = compileHbs(getPathTemplates("ailos-boleto.hbs"), dadosPDF); const config = { displayHeaderFooter: false, path: "./boleto.pdf", format: "a4", printBackground: true }; let pdfBase64 = null; if (generatePDF) { pdfBase64 = yield generatePDF(content, config); } else { if (!api.defaults.baseURL) { throw new Error("BaseURL api not found"); } const response = yield api.post("/", { content, config }); const buffer = Buffer.from(response.data.pdf); pdfBase64 = yield decompress(buffer); } return { erro: false, dados: pdfBase64 }; } catch (error) { console.log(error); if (error instanceof Error) { return { erro: true, dados: error.message }; } return { erro: true, dados: "Falha ao gerar impress\xE3o do boleto" }; } }); } // src/banks/ailos/gerarRemessa.ts var import_date_fns2 = require("date-fns"); // src/lib/Arquivo.ts var Arquivo = class { constructor() { this.arquivo = ""; this.arquivo = ""; } add(texto) { this.arquivo += texto; } addLine() { this.arquivo += "\n"; } getArquivo() { return this.arquivo; } }; // src/utils/removerAcentos.ts function removerAcentos(texto) { return texto.normalize("NFD").replace(/[\u0300-\u036f.]/g, ""); } // src/banks/ailos/gerarRemessa.ts function gerarRemessa({ dados }) { try { const { dadosBancario, beneficiario, boletos } = dados.remessa; const arquivo = new Arquivo(); const dataAtual = /* @__PURE__ */ new Date(); const data = (0, import_date_fns2.format)(dataAtual, "ddMMyyyy"); const hora = (0, import_date_fns2.format)(dataAtual, "HHmmss"); const convenio = dadosBancario.convenio.padStart(7, "0"); const numero = dadosBancario.conta.padStart(7, "0") + dadosBancario.contaDigito; const remessa2 = `REM${convenio}-${numero}-${data}.REM`; arquivo.add("085"); arquivo.add("0000"); arquivo.add("0"); arquivo.add(" "); arquivo.add("2"); arquivo.add(beneficiario.cnpj); arquivo.add(dadosBancario.convenio.padEnd(20, " ")); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(removerAcentos(beneficiario.nome).substring(0, 30).padEnd(30, " ")); arquivo.add("AILOS".padEnd(30, " ")); arquivo.add(" "); arquivo.add("1"); arquivo.add(data); arquivo.add(hora); arquivo.add(dadosBancario.numeroRemessa.padStart(6, "0")); arquivo.add("087"); arquivo.add("00000"); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(29, " ")); arquivo.addLine(); arquivo.add("085"); arquivo.add("0001"); arquivo.add("1"); arquivo.add("R"); arquivo.add("01"); arquivo.add(" "); arquivo.add("045"); arquivo.add(" "); arquivo.add("2"); arquivo.add(beneficiario.cnpj.padStart(15, "0")); arquivo.add(dadosBancario.convenio.padEnd(20, " ")); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(removerAcentos(beneficiario.nome).substring(0, 30).padEnd(30, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(dadosBancario.numeroRemessa.padStart(8, "0")); arquivo.add(data); arquivo.add("00000000"); arquivo.add(" ".padEnd(33, " ")); arquivo.addLine(); let sequencia = 0; let quantidadeRegistro = 0; let total = 0; for (const boleto of boletos) { const { pagador } = boleto; const vencimento = (0, import_date_fns2.format)(new Date(boleto.vencimento), "ddMMyyyy"); total += Number(boleto.valor); const codigoJuro = dadosBancario.jurosMes > 0 ? "2" : "3"; const juros = dadosBancario.jurosMes > 0 ? dadosBancario.jurosMes.toFixed(2) : "000000000000000"; const jurosVencimento = (0, import_date_fns2.format)( (0, import_date_fns2.addDays)(new Date(boleto.vencimento), 1), "ddMMyyyy" ); const codigoDesconto = dadosBancario.descontoPagamento > 0 ? "2" : "0"; const desconto = dadosBancario.descontoPagamento > 0 ? dadosBancario.descontoPagamento.toFixed(2) : "000000000000000"; const protesto = dadosBancario.diasProtesto > 0 ? "1" : "3"; let diasProtesto = "00"; if (protesto === "1") { diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, "0"); } arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add((++sequencia).toString().padStart(5, "0")); arquivo.add("P"); arquivo.add(" "); arquivo.add("01"); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(boleto.nossoNumero.padEnd(20, " ")); arquivo.add("1"); arquivo.add("1"); arquivo.add("1"); arquivo.add("2"); arquivo.add("2"); arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, " ")); arquivo.add(vencimento); arquivo.add( Number(boleto.valor).toFixed(2).replace(".", "").padStart(15, "0") ); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add("02"); arquivo.add(boleto.aceite); arquivo.add(data); arquivo.add(codigoJuro); arquivo.add(jurosVencimento); arquivo.add(juros.replace(".", "").padStart(15, "0")); arquivo.add(codigoDesconto); arquivo.add(vencimento); arquivo.add(desconto.replace(".", "").padStart(15, "0")); arquivo.add("000000000000000"); arquivo.add("000000000000000"); arquivo.add(boleto.identificacaoTitulo.padEnd(25, " ")); arquivo.add(protesto); arquivo.add(diasProtesto); arquivo.add("2"); arquivo.add(" "); arquivo.add("09"); arquivo.add("0000000000"); arquivo.add(" "); arquivo.addLine(); let tipoInscricao = "1"; if (pagador.pessoa === "F") { tipoInscricao = "1"; } else { tipoInscricao = "2"; } pagador.endereco.logradouro = `${removerAcentos(pagador.endereco.logradouro).substring(0, 32).padEnd(32, " ")}${pagador.endereco.numero.padEnd(8, " ")}`; arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add((++sequencia).toString().padStart(5, "0")); arquivo.add("Q"); arquivo.add(" "); arquivo.add("01"); arquivo.add(tipoInscricao); arquivo.add(pagador.cpfCnpj.padStart(15, "0")); arquivo.add(removerAcentos(pagador.nome).substring(0, 40).padEnd(40, " ")); arquivo.add(removerAcentos(pagador.endereco.logradouro).substring(0, 40).padEnd(40, " ")); arquivo.add(removerAcentos(pagador.endereco.bairro).substring(0, 15).padEnd(15, " ")); arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, "0")); arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, "0")); arquivo.add(removerAcentos(pagador.endereco.municipio).substring(0, 15).padEnd(15, " ")); arquivo.add(removerAcentos(pagador.endereco.uf).padEnd(2, " ")); arquivo.add("0"); arquivo.add("000000000000000"); arquivo.add(" ".padEnd(40, " ")); arquivo.add("000"); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(8, " ")); arquivo.addLine(); dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0); if (dadosBancario.multaAtraso > 0) { const multa = dadosBancario.multaAtraso.toFixed(2); arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add((++sequencia).toString().padStart(5, "0")); arquivo.add("R"); arquivo.add(" "); arquivo.add("01"); arquivo.add("0"); arquivo.add("00000000"); arquivo.add("000000000000000"); arquivo.add("0"); arquivo.add("00000000"); arquivo.add("000000000000000"); arquivo.add("2"); arquivo.add(vencimento); arquivo.add(multa.replace(".", "").padStart(15, "0")); arquivo.add(" ".padEnd(10, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(20, " ")); arquivo.add("00000000"); arquivo.add("000"); arquivo.add("00000"); arquivo.add(" "); arquivo.add("000000000000"); arquivo.add(" "); arquivo.add(" "); arquivo.add("0"); arquivo.add("000000000"); arquivo.addLine(); } quantidadeRegistro++; } arquivo.add("085"); arquivo.add("0001"); arquivo.add("5"); arquivo.add(" ".padEnd(9, " ")); arquivo.add((sequencia + 3).toString().padStart(6, "0")); arquivo.add(quantidadeRegistro.toString().padStart(6, "0")); arquivo.add(total.toFixed(2).replace(".", "").padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add(" ".padStart(8, " ")); arquivo.add(" ".padStart(117, " ")); arquivo.addLine(); arquivo.add("085"); arquivo.add("9999"); arquivo.add("9"); arquivo.add(" ".padEnd(9, " ")); arquivo.add("000001"); arquivo.add((sequencia + 4).toString().padStart(6, "0")); arquivo.add("000000"); arquivo.add(" ".padEnd(205, " ")); return { download: remessa2, arquivo: arquivo.getArquivo() }; } catch (error) { console.log(error); return null; } } // src/banks/ailos/gerarRetorno.ts function gerarRetorno({ dados }) { try { const { arquivo } = dados; const documentos = []; let index = 0; for (const item of arquivo) { let linha = item; const banco = linha.substring(0, 3); const codigoRetorno = linha.substring(15, 17); if ((banco === "001" || banco === "085") && (codigoRetorno === "06" || codigoRetorno === "17")) { let segmento = linha.substring(13, 14); if (segmento === "T") { const linhaDoc = linha.substring(105, 130).trimEnd(); let tipoDocumento = "INDEFINIDO"; let idDocumento = linhaDoc; if (linhaDoc.includes("-")) { const [tipoDoc, idDoc] = linhaDoc.split("-"); tipoDocumento = tipoDoc; idDocumento = idDoc; } const especie = tipoDocumento.length ? tipoDocumento : "INDEFINIDO"; linha = arquivo[index + 1]; segmento = linha.substring(13, 14); if (segmento === "U") { const valorAbatimentoString = linha.substring(47, 62); const valorAbatimento = Number(valorAbatimentoString) / 100; const valorDescontoString = linha.substring(32, 47); const valorDesconto = Number(valorDescontoString) / 100; const valorPagoString = linha.substring(77, 92); const valorPago = Number(valorPagoString) / 100; const valorJurosString = linha.substring(17, 32); const valorJuros = Number(valorJurosString) / 100; const valorMulta = 0; const descontos = valorAbatimento + valorDesconto; const valorTotal = valorPago - valorJuros + descontos; const documento = { id_documento: idDocumento, especie, valor: valorPago, valor_multa: valorMulta, valor_juros: valorJuros, valor_desconto: valorDesconto, valor_total: valorTotal }; documentos.push(documento); } } } index++; } return documentos; } catch (error) { console.log(error); return null; } } // src/banks/ailos/index.ts var ailos = { gerarDadosBoleto, gerarPDF, gerarRemessa, gerarRetorno }; // src/types/Boletos.ts var Banco = /* @__PURE__ */ ((Banco2) => { Banco2["AILOS"] = "085"; Banco2["BRADESCO"] = "005"; Banco2["SICREDI"] = "748"; Banco2["SICOOB"] = "756"; Banco2["BANCO_BRASIL"] = "001"; Banco2["ITAU"] = "341"; return Banco2; })(Banco || {}); // src/banks/bradesco/gerarDadosBoleto.ts function gerarDadosBoleto2({ dados }) { try { const { bancario, parcela } = dados; parcela.valor = Number(parcela.valor); const fatorVencimento = getFatorVencimento(parcela.vencimento); const valor = getValor2(parcela.valor); const convenio = padLeft(bancario.convenio, 6); const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9); const nossoNumero = padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento; const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2); const digitoGeral = getDigitoGeral2(`0859${fatorVencimento}${valor}${campoLivre}`); const codigoBarra2 = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`; const campo1 = copy(codigoBarra2, 1, 3) + copy(codigoBarra2, 4, 4) + copy(codigoBarra2, 20, 24); const campo2 = copy(codigoBarra2, 25, 34); const campo3 = copy(codigoBarra2, 35, 44); const campo4 = copy(codigoBarra2, 5, 5); const campo5 = copy(codigoBarra2, 6, 9) + copy(codigoBarra2, 10, 19); const digito1 = getDigito2(campo1); const digito2 = getDigito2(campo2); const digito3 = getDigito2(campo3); const digito4 = getDigito2(campo4); const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + digito4 + campo5; const dadosBoleto = { linhaDigitavel, fatorVencimento, valor, convenio, nossoNumero, campoLivre, digitoGeral, codigoBarra: codigoBarra2, numeroDocumento }; return dadosBoleto; } catch (error) { console.log("Falha ao gerar dados do boleto", error); return null; } } function getValor2(valor) { const valorFormatado = valor.toFixed(2).replace(/\D/g, ""); return padLeft(valorFormatado, 10); } function getDigitoGeral2(texto) { let i = 43; let j = 1; let soma = 0; let digito = 0; while (i >= 1) { j++; if (j === 10) j = 2; const valor = Number(copy(texto, i, i)); soma += j * valor; i--; } const restoDivisao = soma % 11; digito = 11 - restoDivisao; if (digito === 0 || digito === 1 || digito > 9) digito = 1; return String(digito); } function getDigito2(texto) { let i = texto.length; let j = 1; let total = 0; let soma = 0; let digito = 0; while (i >= 1) { j = j === 1 ? 2 : 1; let valor = Number(copy(texto, i, i)); total = valor * j; if (total >= 10) { valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2)); } else { valor = total; } soma += valor; i--; } const uni = Number(copy(soma, String(soma).length, String(soma).length)); digito = 10 - uni; if (digito === 10) digito = 0; return String(digito); } // src/banks/bradesco/gerarPDF.ts var import_bwip_js2 = __toESM(require("bwip-js")); function gerarPDF2(_0) { return __async(this, arguments, function* ({ dados }) { try { const { dadosPDF, generatePDF } = dados; const codigoBarra2 = yield import_bwip_js2.default.toBuffer({ bcid: "interleaved2of5", text: dadosPDF.boleto.codigoBarra, height: 20 }); dadosPDF.beneficiario.dadosBancarios.agencia = dadosPDF.beneficiario.dadosBancarios.agencia.padStart(4, "0"); dadosPDF.beneficiario.dadosBancarios.conta = dadosPDF.beneficiario.dadosBancarios.conta.padStart(7, "0"); dadosPDF.boleto.codigoBarra = maskFormat_default.codigoBarra(dadosPDF.boleto.codigoBarra); dadosPDF.boleto.codigoBarraImage = codigoBarra2.toString("base64"); dadosPDF.beneficiario.cnpj = maskFormat_default.retornaCpfCnpjFormatado( dadosPDF.beneficiario.cnpj ); dadosPDF.beneficiario.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.beneficiario.endereco.cep ); dadosPDF.pagador.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.pagador.endereco.cep ); dadosPDF.boleto.valorAcrescimo = maskFormat_default.numberToReal( dadosPDF.boleto.valorAcrescimo ); dadosPDF.boleto.valorCobrado = maskFormat_default.numberToReal( dadosPDF.boleto.valorCobrado ); dadosPDF.boleto.valorDescontoAbatimento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDescontoAbatimento ); dadosPDF.boleto.valorDocumento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDocumento ); dadosPDF.boleto.valorMulta = maskFormat_default.numberToReal(dadosPDF.boleto.valorMulta); dadosPDF.boleto.valorOutrasDeducoes = maskFormat_default.numberToReal( dadosPDF.boleto.valorOutrasDeducoes ); if (dadosPDF.boleto.quantidade) { dadosPDF.boleto.quantidade = maskFormat_default.numberToReal(dadosPDF.boleto.quantidade); } dadosPDF.boleto.valor = maskFormat_default.numberToReal(dadosPDF.boleto.valor); const content = compileHbs(getPathTemplates("bradesco-boleto.hbs"), dadosPDF); const config = { displayHeaderFooter: false, path: "./boleto.pdf", format: "a4", printBackground: true }; let pdfBase64 = null; if (generatePDF) { pdfBase64 = yield generatePDF(content, config); } else { if (!api.defaults.baseURL) { throw new Error("BaseURL api not found"); } const response = yield api.post("/", { content, config }); const buffer = Buffer.from(response.data.pdf); pdfBase64 = yield decompress(buffer); } return { erro: false, dados: pdfBase64 }; } catch (error) { return { erro: true, dados: null }; } }); } // src/banks/bradesco/gerarRemessa.ts var import_date_fns3 = require("date-fns"); function gerarRemessa2(_0) { return __async(this, arguments, function* ({ dados }) { try { const { dadosBancario, beneficiario, boletos } = dados.remessa; const arquivo = new Arquivo(); const dataAtual = /* @__PURE__ */ new Date(); const data = (0, import_date_fns3.format)(dataAtual, "ddMMyyyy"); const hora = (0, import_date_fns3.format)(dataAtual, "HHmmss"); const convenio = dadosBancario.convenio.padStart(7, "0"); const numero = dadosBancario.conta.padStart(7, "0") + dadosBancario.contaDigito; const remessa2 = `REM${convenio}-${numero}-${data}.REM`; arquivo.add("085"); arquivo.add("0000"); arquivo.add("0"); arquivo.add(" "); arquivo.add("2"); arquivo.add(beneficiario.cnpj); arquivo.add(dadosBancario.convenio.padEnd(20, " ")); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agencia); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, " ")); arquivo.add("AILOS".padEnd(30, " ")); arquivo.add(" "); arquivo.add("1"); arquivo.add(data); arquivo.add(hora); arquivo.add(dadosBancario.numeroRemessa.padStart(6, "0")); arquivo.add("087"); arquivo.add("00000"); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(29, " ")); arquivo.addLine(); arquivo.add("085"); arquivo.add("0001"); arquivo.add("1"); arquivo.add("R"); arquivo.add("01"); arquivo.add(" "); arquivo.add("045"); arquivo.add(" "); arquivo.add("2"); arquivo.add(beneficiario.cnpj.padStart(15, "0")); arquivo.add(dadosBancario.convenio.padEnd(20, " ")); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(dadosBancario.numeroRemessa.padStart(8, "0")); arquivo.add(data); arquivo.add("00000000"); arquivo.add(" ".padEnd(33, " ")); arquivo.addLine(); let sequencia = 1; let quantidadeRegistro = 1; let total = 0; for (const boleto of boletos) { const { pagador } = boleto; const vencimento = (0, import_date_fns3.format)(new Date(boleto.vencimento), "ddMMyyyy"); total += Number(boleto.valor); const codigoJuro = dadosBancario.jurosMes > 0 ? "2" : "3"; const juros = dadosBancario.jurosMes > 0 ? dadosBancario.jurosMes.toFixed(2) : "000000000000000"; const jurosVencimento = (0, import_date_fns3.format)( (0, import_date_fns3.addDays)(new Date(boleto.vencimento), 1), "ddMMyyyy" ); const codigoDesconto = dadosBancario.descontoPagamento > 0 ? "2" : "0"; const desconto = dadosBancario.descontoPagamento > 0 ? dadosBancario.descontoPagamento.toFixed(2) : "000000000000000"; const protesto = dadosBancario.diasProtesto > 0 ? "1" : "3"; const diasProtesto = protesto === "1" ? dadosBancario.diasProtesto.toString() : "00"; arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add(sequencia.toString().padStart(5, "0")); arquivo.add("P"); arquivo.add(" "); arquivo.add("01"); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add(dadosBancario.conta.padStart(12, "0")); arquivo.add(dadosBancario.contaDigito); arquivo.add(" "); arquivo.add(boleto.nossoNumero.padEnd(20, " ")); arquivo.add("1"); arquivo.add("1"); arquivo.add("1"); arquivo.add("2"); arquivo.add("2"); arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, " ")); arquivo.add(vencimento); arquivo.add( Number(boleto.valor).toFixed(2).replace(".", "").padStart(15, "0") ); arquivo.add(dadosBancario.agencia.padStart(5, "0")); arquivo.add(dadosBancario.agenciaDigito); arquivo.add("02"); arquivo.add("A"); arquivo.add(data); arquivo.add(codigoJuro); arquivo.add(jurosVencimento); arquivo.add(juros.replace(".", "").padStart(15, "0")); arquivo.add(codigoDesconto); arquivo.add(vencimento); arquivo.add(desconto.replace(".", "").padStart(15, "0")); arquivo.add("000000000000000"); arquivo.add("000000000000000"); arquivo.add(boleto.identificacaoTitulo.padEnd(25, " ")); arquivo.add(protesto); arquivo.add(diasProtesto.padStart(1, "0")); arquivo.add("2"); arquivo.add(" "); arquivo.add("09"); arquivo.add("0000000000"); arquivo.add(" "); sequencia++; arquivo.addLine(); let tipoInscricao = "1"; if (pagador.pessoa === "F") { tipoInscricao = "1"; } else { tipoInscricao = "2"; } pagador.endereco.logradouro = `${pagador.endereco.logradouro.substring(0, 32).padEnd(32, " ")}${pagador.endereco.numero.padEnd(8, " ")}`; arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add(sequencia.toString().padStart(5, "0")); arquivo.add("Q"); arquivo.add(" "); arquivo.add("01"); arquivo.add(tipoInscricao); arquivo.add(pagador.cpfCnpj.padStart(15, "0")); arquivo.add(pagador.nome.substring(0, 40).padEnd(40, " ")); arquivo.add(pagador.endereco.logradouro.substring(0, 40).padEnd(40, " ")); arquivo.add(pagador.endereco.bairro.substring(0, 15).padEnd(15, " ")); arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, "0")); arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, "0")); arquivo.add(pagador.endereco.municipio.substring(0, 15).padEnd(15, " ")); arquivo.add(pagador.endereco.uf.padEnd(2, " ")); arquivo.add("0"); arquivo.add("000000000000000"); arquivo.add(" ".padEnd(40, " ")); arquivo.add("000"); arquivo.add(" ".padEnd(20, " ")); arquivo.add(" ".padEnd(8, " ")); dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0); if (dadosBancario.multaAtraso > 0) { arquivo.addLine(); const multa = dadosBancario.multaAtraso.toFixed(2); sequencia++; arquivo.add("085"); arquivo.add("0001"); arquivo.add("3"); arquivo.add(sequencia.toString().padStart(5, "0")); arquivo.add("R"); arquivo.add(" "); arquivo.add("01"); arquivo.add("0"); arquivo.add("00000000"); arquivo.add("000000000000000"); arquivo.add("0"); arquivo.add("00000000"); arquivo.add("000000000000000"); arquivo.add("2"); arquivo.add(vencimento); arquivo.add(multa.replace(".", "").padStart(15, "0")); arquivo.add(" ".padEnd(10, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(40, " ")); arquivo.add(" ".padEnd(20, " ")); arquivo.add("00000000"); arquivo.add("000"); arquivo.add("00000"); arquivo.add(" "); arquivo.add("000000000000"); arquivo.add(" "); arquivo.add(" "); arquivo.add("0"); arquivo.add("000000000"); } arquivo.addLine(); quantidadeRegistro++; } arquivo.add("085"); arquivo.add("0001"); arquivo.add("5"); arquivo.add(" ".padEnd(9, " ")); arquivo.add((sequencia + 3).toString().padStart(6, "0")); arquivo.add(quantidadeRegistro.toString().padStart(6, "0")); arquivo.add(total.toFixed(2).replace(".", "").padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add("0".padStart(6, "0")); arquivo.add("0".padStart(17, "0")); arquivo.add(" ".padStart(8, " ")); arquivo.add(" ".padStart(117, " ")); arquivo.addLine(); arquivo.add("085"); arquivo.add("9999"); arquivo.add("9"); arquivo.add(" ".padEnd(9, " ")); arquivo.add("000001"); arquivo.add((sequencia + 4).toString().padStart(6, "0")); arquivo.add("000000"); arquivo.add(" ".padEnd(205, " ")); return { download: remessa2, arquivo: arquivo.getArquivo() }; } catch (error) { console.log(error); return null; } }); } // src/banks/bradesco/gerarRetorno.ts function gerarRetorno2({ dados }) { try { const { arquivo } = dados; const documentos = []; let index = 0; for (const item of arquivo) { let linha = item; const banco = linha.substring(0, 3); const codigoRetorno = linha.substring(15, 17); if ((banco === "001" || banco === "085") && (codigoRetorno === "06" || codigoRetorno === "17")) { let segmento = linha.substring(13, 14); if (segmento === "T") { let tipoDocumento = ""; let idDocumento = ""; const linhaDoc = linha.substring(105, 130).trimEnd(); if (linhaDoc.includes("-")) { [tipoDocumento, idDocumento] = linha.split("-"); } else { idDocumento = linhaDoc; } const especie = tipoDocumento.length ? tipoDocumento : "INDEFINIDO"; linha = arquivo[index + 1]; segmento = linha.substring(13, 14); if (segmento === "U") { const valorAbatimentoString = linha.substring(47, 62); const valorAbatimento = Number(valorAbatimentoString) / 100; const valorDescontoString = linha.substring(32, 47); const valorDesconto = Number(valorDescontoString) / 100; const valorPagoString = linha.substring(77, 92); const valorPago = Number(valorPagoString) / 100; const valorJurosString = linha.substring(17, 32); const valorJuros = Number(valorJurosString) / 100; const valorMulta = 0; const descontos = valorAbatimento + valorDesconto; const valorTotal = valorPago - valorJuros + descontos; const documento = { id_documento: idDocumento, especie, valor: valorTotal, valor_desconto: 0, valor_juros: 0, valor_multa: 0, valor_total: 0 }; documentos.push(documento); } } } index++; } return documentos; } catch (error) { console.log(error); return null; } } // src/banks/bradesco/index.ts var bradesco = { gerarDadosBoleto: gerarDadosBoleto2, gerarPDF: gerarPDF2, gerarRemessa: gerarRemessa2, gerarRetorno: gerarRetorno2 }; // src/banks/sicredi/gerarDadosBoleto.ts function gerarDadosBoleto3({ dados }) { try { const { bancario, parcela } = dados; parcela.valor = Number(parcela.valor); const fatorVencimento = getFatorVencimento(parcela.vencimento); const valor = getValor3(parcela.valor); const nossoNumero = getNossoNumero( parcela.numeroUnico, bancario.agencia, bancario.posto, bancario.codigoCedente ); let campoLivre = bancario.tipoCobranca + bancario.tipoCarteira + nossoNumero + bancario.agencia.padStart(4, "0") + bancario.posto.padStart(2, "0") + bancario.codigoCedente.padStart(5, "0") + 10; const digitoCampoLivre = getDigitoCampoLivre(campoLivre); campoLivre = campoLivre + digitoCampoLivre; const digitoGeral = getDigitoGeral3(`7489${fatorVencimento}${valor}${campoLivre}`); const codigoBarra2 = `7489${digitoGeral}${fatorVencimento}${valor}${campoLivre}`; const campo1 = copy(codigoBarra2, 1, 3) + copy(codigoBarra2, 4, 4) + copy(codigoBarra2, 20, 24); const campo2 = copy(codigoBarra2, 25, 34); const campo3 = copy(codigoBarra2, 35, 44); const campo4 = copy(codigoBarra2, 5, 5); const campo5 = copy(codigoBarra2, 6, 9) + copy(codigoBarra2, 10, 19); const digito1 = getDigito3(campo1); const digito2 = getDigito3(campo2); const digito3 = getDigito3(campo3); const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + /*digito4*/ +campo5; const dadosBoleto = { linhaDigitavel, fatorVencimento, valor, nossoNumero, campoLivre, digitoGeral, codigoBarra: codigoBarra2 }; return dadosBoleto; } catch (error) { console.log("Falha ao gerar dados do boleto", error); return null; } } function getNossoNumero(id, agencia, posto, codigoCedente) { let i = 19; let j = 1; let soma = 0; let digito = 0; const texto = agencia.padStart(4, "0") + posto.padStart(2, "0") + codigoCedente.padStart(5, "0") + id.padStart(8, "0"); while (i >= 1) { j++; if (j === 10) j = 2; const valor = Number(copy(texto, i, i)); soma += j * valor; i--; } const restoDivisao = soma % 11; digito = 11 - restoDivisao; if (restoDivisao === 0 || restoDivisao === 1) digito = 0; return id.padStart(8, "0") + digito.toString(); } function getValor3(valor) { const valorFormatado = valor.toFixed(2).replace(/\D/g, ""); return valorFormatado.padStart(10, "0"); } function getDigitoCampoLivre(texto) { let i = 24; let j = 1; let soma = 0; let digito = 0; while (i >= 1) { j++; if (j === 10) j = 2; let valor = Number(copy(texto, i, i)); soma += valor * j; i--; } const restoDivisao = soma % 11; if (restoDivisao > 1) digito = 11 - restoDivisao; return String(digito); } function getDigitoGeral3(texto) { let i = 43; let j = 1; let soma = 0; let digito = 0; while (i >= 1) { j++; if (j === 10) j = 2; const valor = Number(copy(texto, i, i)); soma += j * valor; i--; } const restoDivisao = soma % 11; digito = 11 - restoDivisao; if (digito <= 1 || digito >= 10) digito = 1; return String(digito); } function getDigito3(texto) { let i = texto.length; let j = 1; let total = 0; let soma = 0; let digito = 0; while (i >= 1) { j = j === 1 ? 2 : 1; let valor = Number(copy(texto, i, i)); total = valor * j; if (total >= 10) { valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2)); } else { valor = total; } soma += valor; i--; } const uni = Number(copy(soma, String(soma).length, String(soma).length)); digito = 10 - uni; if (digito === 10) digito = 0; return String(digito); } // src/banks/sicredi/gerarPDF.ts var import_bwip_js3 = __toESM(require("bwip-js")); function gerarPDF3(_0) { return __async(this, arguments, function* ({ dados }) { try { const { generatePDF, dadosPDF } = dados; if (!dadosPDF.pagador.cnpj) { throw new Error("CPF/CNPJ do pagador na\u0303o informado!"); } const codigoBarra2 = yield import_bwip_js3.default.toBuffer({ bcid: "interleaved2of5", text: dadosPDF.boleto.codigoBarra, height: 20 }); dadosPDF.beneficiario.dadosBancario.agencia = dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, "0"); dadosPDF.boleto.linhaDigitavel = maskFormat_default.codigoBarra(dadosPDF.boleto.linhaDigitavel); dadosPDF.boleto.codigoBarraImage = codigoBarra2.toString("base64"); dadosPDF.beneficiario.cnpj = maskFormat_default.retornaCpfCnpjFormatado( dadosPDF.beneficiario.cnpj ); dadosPDF.beneficiario.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.beneficiario.endereco.cep ); dadosPDF.pagador.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.pagador.endereco.cep ); dadosPDF.pagador.cnpj = maskFormat_default.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj); dadosPDF.boleto.valorAcrescimo = maskFormat_default.numberToReal( dadosPDF.boleto.valorAcrescimo ); dadosPDF.boleto.valorCobrado = maskFormat_default.numberToReal( dadosPDF.boleto.valorCobrado ); dadosPDF.boleto.valorDescontoAbatimento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDescontoAbatimento ); const valorDocumento = Number(dadosPDF.boleto.valorDocumento); dadosPDF.boleto.valorDocumento = maskFormat_default.numberToReal( dadosPDF.boleto.valorDocumento ); dadosPDF.boleto.valorMulta = maskFormat_default.numberToReal(dadosPDF.boleto.valorMulta); dadosPDF.boleto.valorOutrasDeducoes = maskFormat_default.numberToReal( dadosPDF.boleto.valorOutrasDeducoes ); if (dadosPDF.boleto.quantidade) { dadosPDF.boleto.quantidade = maskFormat_default.numberToReal(dadosPDF.boleto.quantidade); } const jurosMes = dadosPDF.beneficiario.dadosBancario.juros; const jurosDia = jurosMes / 100 / 30 * valorDocumento; if (jurosDia > 0) { dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat_default.numberToReal(jurosDia)} AO DIA, AP\xD3S O VENCIMENTO`; } const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0; if (descontoVencimento > 0) { dadosPDF.boleto.instrucao2 = `AT\xC9 O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`; } const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0; if (multaAtraso > 0) { dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`; } const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0; if (protestoDias > 0) { dadosPDF.boleto.instrucao4 = `PROTESTAR AP\xD3S ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`; } dadosPDF.boleto.valor = maskFormat_default.numberToReal(dadosPDF.boleto.valor); const content = compileHbs(getPathTemplates("sicredi-boleto.hbs"), dadosPDF); const config = { displayHeaderFooter: false, path: "./boleto.pdf", format: "a4", printBackground: true }; let pdfBase64 = null; if (generatePDF) { pdfBase64 = yield generatePDF(content, config); } else { if (!api.defaults.baseURL) { throw new Error("BaseURL api not found"); } const response = yield api.post("/", { content, config }); const buffer = Buffer.from(response.data.pdf); pdfBase64 = yield decompress(buffer); } return { erro: false, dados: pdfBase64 }; } catch (error) { console.log(error); if (error instanceof Error) { return { erro: true, dados: error.message };