UNPKG

@plasoft/boletos

Version:
1,397 lines (1,373 loc) 133 kB
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/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/sicredi/gerarPDFCarne.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.replace(/\D/g, "")); } var maskFormat_default = { numberToReal, retornaCEPFormatado, retornaCpfCnpjFormatado, codigoBarra }; // src/banks/sicredi/gerarPDFCarne.ts import QRCode from "qrcode"; function gerarPDFCarne(_0) { return __async(this, arguments, function* ({ dados }) { try { const { generatePDF, dadosPDF } = dados; const carnes = []; if (!dadosPDF.pagador.cpfcnpj) { throw new Error("CPF/CNPJ do pagador na\u0303o informado!"); } dadosPDF.beneficiario.dadosBancario.agencia = dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, "0"); dadosPDF.beneficiario.cnpj = maskFormat_default.retornaCpfCnpjFormatado( dadosPDF.beneficiario.cnpj ); dadosPDF.pagador.endereco.cep = maskFormat_default.retornaCEPFormatado( dadosPDF.pagador.endereco.cep ); dadosPDF.pagador.cpfcnpj = maskFormat_default.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj); for (const boleto of dados.dadosPDF.boleto) { const codigoBarra2 = yield BwipJs.toBuffer({ bcid: "interleaved2of5", text: boleto.codigoBarra, height: 20 }); const qrCode = yield QRCode.toDataURL(boleto.pixCopiaCola, { errorCorrectionLevel: "H", type: "image/png", margin: 1, scale: 6 }); boleto.qrCodeImage = qrCode; boleto.linhaDigitavel = maskFormat_default.codigoBarra(boleto.linhaDigitavel); boleto.codigoBarraImage = codigoBarra2.toString("base64"); boleto.valorAcrescimo = maskFormat_default.numberToReal( boleto.valorAcrescimo ); boleto.valorCobrado = maskFormat_default.numberToReal( boleto.valorCobrado ); boleto.valorDescontoAbatimento = maskFormat_default.numberToReal( boleto.valorDescontoAbatimento ); const valorDocumento = Number(boleto.valorDocumento); boleto.valorDocumento = maskFormat_default.numberToReal( boleto.valorDocumento ); boleto.valorMulta = maskFormat_default.numberToReal(boleto.valorMulta); boleto.valorOutrasDeducoes = maskFormat_default.numberToReal( boleto.valorOutrasDeducoes ); const jurosMes = dadosPDF.beneficiario.dadosBancario.juros; const jurosDia = jurosMes / 100 / 30 * valorDocumento; if (jurosDia > 0) { boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat_default.numberToReal(jurosDia)} AO DIA, AP\xD3S O VENCIMENTO`; } const descontoVencimento = boleto.desconto > 0 ? boleto.desconto : dadosPDF.beneficiario.dadosBancario.desconto > 0 ? dadosPDF.beneficiario.dadosBancario.desconto : 0; if (descontoVencimento > 0) { boleto.instrucao2 = `AT\xC9 O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`; } const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0; if (multaAtraso > 0) { boleto.instrucao3 = `MULTA DE ${multaAtraso}%`; } const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0; if (protestoDias > 0) { boleto.instrucao4 = `PROTESTAR AP\xD3S ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`; } dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14; carnes.push({ boleto, pagador: dadosPDF.pagador, beneficiario: dadosPDF.beneficiario }); } const content = compileHbs(getPathTemplates("sicredi-carne.hbs"), { boletos: carnes }); const config = { displayHeaderFooter: false, path: "./boleto.pdf", format: "a4", printBackground: true, preferCSSPageSize: 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/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/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/banks/sicredi/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 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 = getDigitoGeral(`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 = getDigito(campo1); const digito2 = getDigito(campo2); const digito3 = getDigito(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 getValor(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 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 <= 1 || digito >= 10) 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/sicredi/gerarPDF.ts import BwipJs2 from "bwip-js"; function gerarPDF(_0) { return __async(this, arguments, function* ({ dados }) { try { const { generatePDF, dadosPDF } = dados; if (!dadosPDF.pagador.cpfcnpj) { throw new Error("CPF/CNPJ do pagador na\u0303o informado!"); } const codigoBarra2 = yield BwipJs2.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.cpfcnpj = maskFormat_default.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj); 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.boleto.desconto > 0 ? dadosPDF.boleto.desconto : dadosPDF.beneficiario.dadosBancario.desconto > 0 ? 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); dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14; 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/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/removerCaracterEspecial.ts function removerCaracterEspecial(texto) { if (!texto) return ""; let textoFormatado = texto.replace(/[`~!@#$°%^&*()_+=?;'"<>{}[\]\\]/gi, ""); textoFormatado = textoFormatado.replace(/[áàãâä]/g, "a"); textoFormatado = textoFormatado.replace(/[ÁÀÃÂÄ]/g, "A"); textoFormatado = textoFormatado.replace(/[éèêë]/g, "e"); textoFormatado = textoFormatado.replace(/[ÉÈÊË]/g, "E"); textoFormatado = textoFormatado.replace(/[íìîï]/g, "i"); textoFormatado = textoFormatado.replace(/[ÍÌÎÏ]/g, "I"); textoFormatado = textoFormatado.replace(/[óòõôö]/g, "o"); textoFormatado = textoFormatado.replace(/[ÓÒÔÕÖ]/g, "O"); textoFormatado = textoFormatado.replace(/[úùûü]/g, "u"); textoFormatado = textoFormatado.replace(/[ÚÙÛÜ]/g, "U"); textoFormatado = textoFormatado.replace(/ç/g, "c"); textoFormatado = textoFormatado.replace(/Ç/g, "C"); textoFormatado = textoFormatado.replace(/[^a-zA-Z0-9|/,-]/g, " "); return textoFormatado; } // src/banks/sicredi/gerarRemessa.ts import { format } from "date-fns"; function gerarRemessa({ dados }) { try { const { dadosBancario, beneficiario, boletos } = dados.remessa; const arquivo = new Arquivo(); const data = /* @__PURE__ */ new Date(); let protestar = "00"; let negativar = "0000"; switch (dadosBancario.tipo_protesto) { case "Nenhum": protestar = "00"; negativar = "0000"; break; case "Protestar": protestar = "06"; negativar = "0000"; break; case "Negativar": protestar = "00"; negativar = "06" + String(dadosBancario.diasProtesto).padStart(2, "0"); break; default: protestar = "00"; negativar = "0000"; break; } 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(format(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 (boleto.desconto) { desconto = boleto.desconto.toFixed(2).replace(".", "").padStart(13, "0"); dataDesconto = format(new Date(boleto.vencimento), "ddMMyy"); } if (!boleto.desconto && dadosBancario.descontoPagamento) { desconto = dadosBancario.descontoPagamento.toFixed(2).replace(".", "").padStart(13, "0"); dataDesconto = format(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(format(new Date(boleto.emissao), "yyyyMMdd")); arquivo.add(" "); arquivo.add("N"); arquivo.add(" "); arquivo.add("B"); arquivo.add("0000"); arquivo.add(" ".padEnd(4, " ")); arquivo.add("0".padEnd(10, "0")); arquivo.add(multaAtraso.padStart(4, "0")); arquivo.add(" ".padEnd(12, " ")); arquivo.add("01"); arquivo.add(boleto.identificacaoTitulo.padEnd(10, " ")); arquivo.add(format(new Date(boleto.vencimento), "ddMMyy")); arquivo.add(Number(boleto.valor).toFixed(2).replace(".", "").padStart(13, "0")); arquivo.add(" ".padEnd(9, " ")); arquivo.add("A"); arquivo.add(boleto.aceite); arquivo.add(format(new Date(boleto.emissao), "ddMMyy")); arquivo.add(protestar); arquivo.add(String(dadosBancario.diasProtesto).padStart(2, "0")); arquivo.add(Number(valorJurosDias).toFixed(2).replace(".", "").padStart(13, "0")); arquivo.add(dataDesconto); arquivo.add(desconto); arquivo.add(negativar); arquivo.add("0".padEnd(22, "0")); arquivo.add(tipoInscricao); arquivo.add("0"); arquivo.add(pagador.cpfCnpj.padStart(14, "0")); arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, " ")); arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, " ")); arquivo.add("0".padEnd(11, "0")); arquivo.add(" "); arquivo.add(pagador.endereco.cep.padEnd(8, " ")); arquivo.add("00000"); arquivo.add(" ".padEnd(55, " ")); arquivo.add(String(sequencia).padStart(6, "0")); arquivo.addLine(); sequencia++; } arquivo.add("91748"); arquivo.add(dadosBancario.codigo_cedente); arquivo.add(" ".padEnd(384, " ")); arquivo.add(String(sequencia).padStart(6, "0")); arquivo.addLine(); return { download: `${dadosBancario.codigo_cedente}${retornaMes(data)}${format(data, "dd")}.crm`, arquivo: arquivo.getArquivo() }; } catch (error) { console.log(error); return null; } } function retornaMes(data) { const mes = data.getMonth() + 1; switch (mes) { case 10: return "O"; case 11: return "N"; case 12: return "D"; default: return mes.toString(); } } // src/utils/agruparRetorno.ts import { format as format2 } from "date-fns"; function agruparRetorno(documentos) { return documentos.reduce((acc, documento) => { const dateObj = new Date(documento.data); if (isNaN(dateObj.getTime())) { return acc; } const dataKey = format2(dateObj, "yyyy-MM-dd"); if (!acc[dataKey]) { acc[dataKey] = []; } acc[dataKey].push(documento); return acc; }, {}); } // src/banks/sicredi/gerarRetorno.ts import { parse } from "date-fns"; function gerarRetorno({ dados }) { try { const { arquivo } = dados; const documentos = []; for (const linha of arquivo) { const id_registro = linha.substring(0, 1); if (id_registro !== "1" /* DETALHE */) { continue; } const ocorrencia = linha.substring(108, 110); if (ocorrencia !== "06" && ocorrencia !== "15" && ocorrencia !== "17" && ocorrencia !== "03") { continue; } const motivo = linha.substring(213, 223).trim(); const meu_numero = linha.substring(116, 126).trim(); let tipo_documento = ""; let id_documento = ""; if (meu_numero.includes("-")) { const [tipo, id] = meu_numero.split("-"); tipo_documento = tipo; id_documento = id; } let especie = "INDEFINIDO"; if (tipo_documento.length) { especie = tipo_documento === "N" ? "NFE" : tipo_documento === "F" ? "FAT" : tipo_documento === "L" ? "FIN" : "INDEFINIDO"; } let dataCredito; const dataCreditoString = linha.substring(328, 336); if (dataCreditoString && dataCreditoString !== "00000000") { dataCredito = parse(dataCreditoString, "yyyyMMdd", /* @__PURE__ */ new Date()); } else { const dataOcorrenciaString = linha.substring(110, 116); dataCredito = parse(dataOcorrenciaString, "ddMMyy", /* @__PURE__ */ new Date()); } const valor_titulo = Number(linha.substring(152, 165)) / 100; const abatimento = Number(linha.substring(227, 240)) / 100; let valor_desconto = Number(linha.substring(240, 253)) / 100; const valor_pago = Number(linha.substring(253, 266)) / 100; let valor_juros = Number(linha.substring(266, 279)) / 100; const valor_multa = Number(linha.substring(279, 292)) / 100; if (valor_titulo > valor_pago && valor_desconto === 0) { valor_desconto = valor_titulo - valor_pago; } if (valor_titulo < valor_pago && valor_juros === 0) { valor_juros = valor_pago - valor_titulo; } const descontos = abatimento + valor_desconto; const valor_total = valor_titulo + valor_multa + valor_juros - descontos; let rejeitado = false; let motivoRejeicao = ""; if (ocorrencia === "03") { rejeitado = true; motivoRejeicao = retornaMotivoRejeicao(motivo); } documentos.push({ id_documento, especie, valor: valor_pago, valor_multa, valor_juros, valor_desconto, valor_total, data: dataCredito, rejeitado, motivo: motivoRejeicao }); } const documentosAgrupado = agruparRetorno(documentos); return documentosAgrupado; } catch (error) { console.log(error); return null; } } function retornaMotivoRejeicao(codigo) { switch (codigo) { case "01": return "C\xF3digo do banco inv\xE1lido"; case "02": return "C\xF3digo do registro detalhe inv\xE1lido"; case "03": return "C\xF3digo do segmento inv\xE1lido"; case "04": return "C\xF3digo de movimento n\xE3o permitido para carteira"; case "05": return "C\xF3digo de movimento inv\xE1lido"; case "06": return "Tipo/n\xFAmero de inscri\xE7\xE3o do benefici\xE1rio inv\xE1lidos"; case "07": return "Cooperativa cr\xE9dito/ag\xEAncia/conta/DV inv\xE1lido"; case "08": return "Nosso n\xFAmero inv\xE1lido"; case "09": return "Nosso n\xFAmero duplicado"; case "10": return "Carteira inv\xE1lida"; case "11": return "Forma de cadastramento do t\xEDtulo inv\xE1lido"; case "12": return "Tipo de documento inv\xE1lido"; case "13": return "Identifica\xE7\xE3o da emiss\xE3o do boleto inv\xE1lida"; case "14": return "Identifica\xE7\xE3o da distribui\xE7\xE3o do boleto inv\xE1lida"; case "15": return "Caracter\xEDsticas da cobran\xE7a incompat\xEDveis"; case "16": return "Data de vencimento inv\xE1lida"; case "17": return "Data de vencimento anterior a data de emiss\xE3o"; case "18": return "Vencimento fora do prazo de opera\xE7\xE3o"; case "20": return "Valor do t\xEDtulo inv\xE1lido"; case "21": return "Esp\xE9cie do t\xEDtulo inv\xE1lida"; case "22": return "Esp\xE9cie do t\xEDtulo n\xE3o permitida para a carteira"; case "23": return "Aceite inv\xE1lido"; case "24": return "Data da emiss\xE3o inv\xE1lida"; case "25": return "Data da emiss\xE3o posterior a data de entrada"; case "26": return "C\xF3digo de juros de mora inv\xE1lido"; case "27": return "Valor/taxa de juros de mora inv\xE1lido"; case "28": return "C\xF3digo do desconto inv\xE1lido"; case "29": return "Valor do desconto maior ou igual ao valor do t\xEDtulo"; case "30": return "Desconto a conceder n\xE3o confere"; case "31": return "Concess\xE3o de desconto - j\xE1 existe desconto anterior"; case "33": return "Valor do abatimento inv\xE1lido"; case "34": return "Valor do abatimento maior ou igual ao valor do t\xEDtulo"; case "35": return "Valor a conceder n\xE3o confere"; case "36": return "Concess\xE3o de abatimento - j\xE1 existe abatimento anterior"; case "37": return "C\xF3digo para protesto inv\xE1lido"; case "38": return "Prazo para protesto inv\xE1lido"; case "39": return "Pedido de protesto n\xE3o permitido para o t\xEDtulo"; case "40": return "T\xEDtulo com ordem de protesto emitida"; case "41": return "Pedido de cancelamento/susta\xE7\xE3o para t\xEDtulos sem instru\xE7\xE3o de protesto/negativa\xE7\xE3o"; case "44": return "C\xF3digo da moeda inv\xE1lido"; case "45": return "Nome do pagador n\xE3o informado"; case "46": return "Tipo/n\xFAmero de inscri\xE7\xE3o do pagador inv\xE1lidos"; case "47": return "Endere\xE7o do pagador n\xE3o informado"; case "48": return "CEP inv\xE1lido"; case "53": return "Tipo/n\xFAmero de inscri\xE7\xE3o do pagador/avalista inv\xE1lido"; case "54": return "Pagador/avalista n\xE3o informado"; case "55": return "Nosso n\xFAmero no banco correspondente n\xE3o informado"; case "56": return "C\xF3digo do banco correspondente n\xE3o informado"; case "57": return "C\xF3digo da multa inv\xE1lido"; case "58": return "Data da multa inv\xE1lida"; case "59": return "Valor/percentual da multa inv\xE1lido"; case "60": return "Movimento para t\xEDtulo n\xE3o cadastrado"; case "61": return "Altera\xE7\xE3o da cooperativa cr\xE9dito/ag\xEAncia cobradora/DV inv\xE1lida"; case "62": return "Tipo de impress\xE3o inv\xE1lido"; case "63": return "Entrada para t\xEDtulo j\xE1 cadastrado"; case "64": return "N\xFAmero da linha inv\xE1lido"; case "79": return "Data juros de mora inv\xE1lida"; case "80": return "Data do desconto inv\xE1lida"; case "84": return "N\xFAmero autoriza\xE7\xE3o inexistente"; case "85": return "T\xEDtulo com pagamento vinculado"; case "86": return "Seu n\xFAmero inv\xE1lido"; case "A4": return "Pagador DDA"; case "CZ": return "Instru\xE7\xE3o Inv\xE1lida"; case "L6": return "Tipo de comando de instru\xE7\xE3o inv\xE1lida para benefici\xE1rio pessoa f\xEDsica."; default: return "Motivo desconhecido"; } } // src/banks/sicredi/index.ts var sicredi = { gerarDadosBoleto, gerarPDF, gerarRemessa, gerarRetorno, gerarPDFCarne }; // 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/carne.ts function carne({ banco, dados }) { if (banco === "748" /* SICREDI */) { return sicredi.gerarPDFCarne({ banco, dados }); } } // 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/banks/ailos/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 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 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/ailos/gerarPDF.ts import BwipJs3 from "bwip-js"; function gerarPDF2(_0) { return __async(this, arguments, function* ({ dados }) { var _a; try { const { generatePDF, dadosPDF } = dados; if (!dadosPDF.pagador.cpfcnpj) { 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.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.cpfcnpj = maskFormat_default.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj); 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.boleto.desconto > 0 ? dadosPDF.boleto.desconto : dadosPDF.beneficiario.dadosBancario.desconto > 0 ? 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); dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14; let content = compileHbs(getPathTemplates("ailos-boleto.hbs"), dadosPDF); if ((_a = dadosPDF.boleto) == null ? void 0 : _a.pix) { content = compileHbs(getPathTemplates("ailos-boleto-hibrido.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 as format3 } from "date-fns"; function gerarRemessa2({ dados }) { try { const { dadosBancario, beneficiario, boletos } = dados.remessa; const arquivo = new Arquivo(); const dataAtual = /* @__PURE__ */ new Date(); const data = format3(dataAtual, "ddMMyyyy"); const hora = format3(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(removerCaracterEspecial(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(removerCaracterEspecial(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 = format3(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 = format3( addDays(new Date(boleto.vencimento), 1), "ddMMyyyy" ); const codigoDesconto = dadosBancario.descontoPagamento > 0 ? "2" : "0"; const desconto = boleto.desconto > 0 ? boleto.desconto.toFixed(2) : dadosBancario.descontoPagamento > 0 ? dadosBancario.descontoPagamento.toFixed(2) : "000000000000000"; let diasProtesto = "00"; let protesto = "3"; switch (dadosBancario.tipo_protesto) { case "Nenhum": protesto = "3"; diasProtesto = "00"; break; case "Protestar": protesto = "1"; diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, "0"); break; case "Negativar": protesto = "2"; diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, "0"); break; default: protesto = "3"; diasProtesto = "00"; break; } 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 = `${removerCaracterEspecial(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(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, " ")); arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, " ")); arquivo.add(removerCaracterEspecial(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(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, " ")); arquivo.add(removerCaracterEspecial(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 import { parse as parse2 } from "date-fns"; function gerarRetorno2({ dados }) { try { const { arquivo } = dados; const documentos = []; let index = 0; for (const item of arquivo) { let linha = item; const codigoRetorno = linha.substring(15, 17); if (codigoRetorno === "06" || codigoRetorno === "17" || codigoRetorno === "03") { let segmento = linha.substring(13, 14); if (segmento === "T") { const motivo = linha.substring(213, 223).trim(); 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") { let dataCredito; const dataCreditoString = linha.substring(145, 153); if (dataCreditoString && dataCreditoString !== "00000000") { dataCredito = parse2(dataCreditoString, "ddMMyyyy", /* @__PURE__ */ new Date()); } else { const dataOcorrenciaString = linha.substring(157, 165); dataCredito = parse2(dataOcorrenciaString, "ddMMyyyy", /* @__PURE__ */ new Date()); } 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 va