@plasoft/boletos
Version:
1,408 lines (1,381 loc) • 98.8 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
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 __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/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
import { differenceInDays } from "date-fns";
function getFatorVencimento(vencimento) {
vencimento = new Date(vencimento);
if (vencimento >= new Date(2025, 1, 22)) {
return differenceInDays(new Date(vencimento), new Date(2022, 4, 29)).toString();
} else {
return 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
import BwipJs from "bwip-js";
// src/utils/maskFormat.ts
import StringMask from "string-mask";
function retornaCpfCnpjFormatado(cpfCnpj) {
if ((cpfCnpj == null ? void 0 : cpfCnpj.length) <= 11) {
const formatter2 = new StringMask("000.000.000-00");
return formatter2.apply(cpfCnpj);
}
const formatter = new StringMask("00.000.000/0000-00");
return formatter.apply(cpfCnpj);
}
function retornaCEPFormatado(cep) {
const formatter = new StringMask("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 StringMask("00000.00000 00000.000000 00000.000000 0 000000000000000");
return formatter.apply(codigo);
}
var maskFormat_default = {
numberToReal,
retornaCEPFormatado,
retornaCpfCnpjFormatado,
codigoBarra
};
// src/utils/compileHbs.ts
import hbs from "handlebars";
import fs from "fs";
function compileHbs(templatePath, data) {
const html = fs.readFileSync(templatePath, "utf-8");
const content = hbs.compile(html)(data);
return content;
}
// src/utils/getPathTemplates.ts
import path from "path";
function getPathTemplates(template) {
if (process.env.NODE_ENV === "dev") {
return path.resolve(process.cwd(), "views", template);
}
return path.resolve(__dirname, template);
}
// src/services/api.ts
import "dotenv/config";
import axios from "axios";
var api = axios.create({
baseURL: process.env.API_URL || "https://23136fv876.execute-api.sa-east-1.amazonaws.com/dev/create-report"
});
// src/utils/zip.ts
import * as zlib from "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 BwipJs.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
import { addDays, format } from "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 = format(dataAtual, "ddMMyyyy");
const hora = 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 = 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 = format(
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
import BwipJs2 from "bwip-js";
function gerarPDF2(_0) {
return __async(this, arguments, function* ({ dados }) {
try {
const { dadosPDF, generatePDF } = dados;
const codigoBarra2 = yield BwipJs2.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
import { addDays as addDays2, format as format2 } from "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 = format2(dataAtual, "ddMMyyyy");
const hora = format2(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 = format2(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 = format2(
addDays2(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
import BwipJs3 from "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 BwipJs3.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
};
}
return {
erro: true,
dados: "Falha ao gerar impress\xE3o do boleto"
};
}
});
}
// src/banks/sicredi/gerarRemessa.ts
import { format as format3 } from "date-fns";
function gerarRemessa3({ dados }) {
try {
const { dadosBancario, beneficiario, boletos } = dados.remessa;
const arquivo = new Arquivo();
const data = /* @__PURE__ */ new Date();
let protestar = "00";
let negativar = "0000";
if (dadosBancario.diasProtesto > 0) {
protestar = "06";
}
arquivo.add("01REMESSA");
arquivo.add("01");
arquivo.add("COBRANCA".padEnd(15, " "));
arquivo.add(dadosBancario.codigo_cedente);
arquivo.add(beneficiario.cnpj);
arquivo.add(" ".padEnd(31, " "));
arquivo.add("748");
arquivo.add("SICREDI".padEnd(15, " "));
arquivo.add(format3(data, "yyyyMMdd"));
arquivo.add(" ".padEnd(8, " "));
arquivo.add(dadosBancario.numeroRemessa.padStart(7, "0"));
arquivo.add(" ".padEnd(273, " "));
arquivo.add("2.00");
arquivo.add("000001");
arquivo.addLine();
let sequencia = 2;
let total = 0;
for (const boleto of boletos) {
const { pagador } = boleto;
total += Number(boleto.valor);
let tipoInscricao = pagador.pessoa === "F" ? "1" : "2";
let desconto = "0000000000000";
let dataDesconto = "000000";
if (dadosBancario.descontoPagamento) {
desconto = dadosBancario.descontoPagamento.toFixed(2).replace(".", "").padStart(13, "0");
dataDesconto = format3(new Date(boleto.vencimento), "ddMMyy");
}
let valorJurosDias = Number(boleto.valor) * Number(dadosBancario.jurosMes) / 100 / 30;
let multaAtraso = String(dadosBancario.multaAtraso * 100);
arquivo.add("1");
arquivo.add("AAA");
arquivo.add(" ".padEnd(12, " "));
arquivo.add("AAA");
arquivo.add(" ".padEnd(28, " "));
arquivo.add(boleto.nossoNumero.padEnd(9, " "));
arquivo.add(" ".padEnd(6, " "));
arquivo.add(format3(new Date(boleto.emissao), "yyyyMMdd"));
arquivo.add(" ");
arquivo.add("N");
arquivo.add(" ");