@plasoft/boletos 1.0.53 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/ailos-boleto.hbs +2 -1
- package/build/banco-brasil-boleto.hbs +1 -1
- package/build/index.d.mts +6 -3
- package/build/index.d.ts +6 -3
- package/build/index.js +10 -7
- package/build/index.js.map +1 -1
- package/build/index.mjs +10 -7
- package/build/index.mjs.map +1 -1
- package/build/sicoob-boleto.hbs +1 -1
- package/package.json +2 -2
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/pafLeft.ts","../src/utils/copy.ts","../src/utils/getFatorVencimento.ts","../src/banks/ailos/gerarDadosBoleto.ts","../src/banks/ailos/gerarPDF.ts","../src/utils/maskFormat.ts","../src/utils/compileHbs.ts","../src/utils/getPathTemplates.ts","../src/services/api.ts","../src/utils/zip.ts","../src/banks/ailos/gerarRemessa.ts","../src/lib/Arquivo.ts","../src/utils/removerCaracterEspecial.ts","../src/banks/ailos/gerarRetorno.ts","../src/banks/ailos/index.ts","../src/types/Boletos.ts","../src/banks/bradesco/gerarDadosBoleto.ts","../src/banks/bradesco/gerarPDF.ts","../src/banks/bradesco/gerarRemessa.ts","../src/banks/bradesco/gerarRetorno.ts","../src/banks/bradesco/index.ts","../src/banks/sicredi/gerarDadosBoleto.ts","../src/banks/sicredi/gerarPDF.ts","../src/banks/sicredi/gerarRemessa.ts","../src/banks/sicredi/gerarRetorno.ts","../src/banks/sicredi/index.ts","../src/banks/sicoob/gerarDadosBoleto.ts","../src/banks/sicoob/gerarRemessa.ts","../src/banks/sicoob/gerarPDF.ts","../src/banks/sicoob/gerarRetorno.ts","../src/banks/sicoob/index.ts","../src/banks/banco-brasil/gerarDadosBoleto.ts","../src/banks/banco-brasil/gerarPDF.ts","../src/banks/banco-brasil/gerarRemessa.ts","../src/banks/banco-brasil/gerarRetorno.ts","../src/banks/banco-brasil/index.ts","../src/gerar.ts","../src/banks/itau/gerarPDF.ts","../src/banks/itau/index.ts","../src/pdf.ts","../src/remessa.ts","../src/retorno.ts","../src/config/index.ts","../src/index.ts"],"sourcesContent":["export function padLeft(numero: number | string, tamanho: number) {\n numero = String(numero);\n if (numero.length < tamanho) {\n numero = `0${numero}`;\n return padLeft(numero, tamanho);\n }\n return numero;\n}\n","export function copy(\n texto: string | number,\n startPosition: number,\n endPosition?: number,\n) {\n let retorno = '';\n\n if (typeof texto === 'number') texto = String(texto);\n if (!endPosition) endPosition = texto.length;\n\n for (let i = 0; i < texto.length; i++) {\n const index = i + 1;\n\n if (index >= startPosition && index <= endPosition) {\n const letra = texto[i];\n retorno += letra;\n }\n }\n\n return retorno;\n}\n","import { differenceInDays } from \"date-fns\";\n\nexport function getFatorVencimento(vencimento: string | Date) {\n vencimento = new Date(vencimento);\n if (vencimento >= new Date(2025, 1, 22)) {\n return differenceInDays(new Date(vencimento), new Date(2022, 4, 29)).toString();\n } else {\n return differenceInDays(new Date(vencimento), new Date(1997, 9, 7)).toString();\n }\n}\n","import { IGerarBoletoAilos } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoAilos) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = padLeft(bancario.convenio, 6);\n const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9);\n const nossoNumero = padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento;\n\n const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2);\n const digitoGeral = getDigitoGeral(`0859${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n /* const digito4 = getDigito(campo4); Aviso: No solution está errado, mas da certo, esse digito 4 não usa*/\n\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 /*+ digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito === 0 || digito === 1 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFAilos } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFAilos) {\n try {\n const { generatePDF, dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancario.conta =\n dadosPDF.beneficiario.dadosBancario.conta.padStart(7, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n const content = compileHbs(getPathTemplates('ailos-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import StringMask from 'string-mask';\n\nexport function retornaCpfCnpjFormatado(cpfCnpj: string) {\n if (cpfCnpj?.length <= 11) {\n const formatter = new StringMask('000.000.000-00');\n return formatter.apply(cpfCnpj);\n }\n\n const formatter = new StringMask('00.000.000/0000-00');\n return formatter.apply(cpfCnpj);\n}\n\nexport function retornaCEPFormatado(cep: string) {\n const formatter = new StringMask('00000-000');\n return formatter.apply(cep);\n}\n\n\nexport function numberToReal(numero: any) {\n numero = typeof numero === 'string' ? parseFloat(numero) : numero;\n numero = numero.toFixed(2).split('.');\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\n return numero.join(',');\n}\n\nexport function codigoBarra(codigo: string) {\n const formatter = new StringMask('00000.00000 00000.000000 00000.000000 0 000000000000000');\n return formatter.apply(codigo);\n}\n\nexport default {\n numberToReal,\n retornaCEPFormatado,\n retornaCpfCnpjFormatado,\n codigoBarra,\n};\n","import hbs from 'handlebars';\nimport fs from 'fs';\n\nexport function compileHbs(templatePath: string, data?: any) {\n const html = fs.readFileSync(templatePath, 'utf-8');\n const content = hbs.compile(html)(data);\n\n return content;\n}\n","import path from 'path';\n\nexport function getPathTemplates(template: string) {\n if (process.env.NODE_ENV === 'dev') {\n return path.resolve(process.cwd(), 'views', template);\n }\n\n return path.resolve(__dirname, template);\n}\n","import 'dotenv/config';\nimport axios from \"axios\";\n\nexport const api = axios.create({\n baseURL: process.env.API_URL || 'https://23136fv876.execute-api.sa-east-1.amazonaws.com/dev/create-report',\n});\n","import * as zlib from 'zlib';\n\nfunction compress(input: string): Promise<{ erro: boolean; dados: Buffer }> {\n return new Promise((resolve, reject) => {\n zlib.gzip(input, (error, result) => {\n if (error) {\n return reject(error);\n }\n resolve({\n erro: false,\n dados: result,\n });\n });\n });\n}\n\nfunction decompress(input: Buffer): Promise<string> {\n return new Promise((resolve, reject) => {\n zlib.gunzip(input, (error, result) => {\n if (error) {\n return reject(error);\n }\n resolve(result.toString());\n });\n });\n}\n\nexport { compress, decompress };\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaAilos } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaAilos) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const convenio = dadosBancario.convenio.padStart(7, '0');\n const numero =\n dadosBancario.conta.padStart(7, '0') + dadosBancario.contaDigito;\n\n const remessa = `REM${convenio}-${numero}-${data}.REM`;\n\n // Header do arquivo\n arquivo.add('085');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('AILOS'.padEnd(30, ' '));\n arquivo.add(' ');\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('087');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(29, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('045');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // Cálculos de juros\n const codigoJuro = dadosBancario.jurosMes > 0 ? '2' : '3';\n const juros =\n dadosBancario.jurosMes > 0\n ? dadosBancario.jurosMes.toFixed(2)\n : '000000000000000';\n\n // Cálculos de desconto\n const jurosVencimento = format(\n addDays(new Date(boleto.vencimento), 1),\n 'ddMMyyyy',\n );\n const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto =\n dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\n\n let diasProtesto = '00';\n let protesto = '3';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n diasProtesto = '00';\n break;\n case 'Protestar':\n protesto = '1';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n break;\n case 'Negativar':\n protesto = '2';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n break;\n default:\n protesto = '3';\n diasProtesto = '00';\n break;\n }\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padEnd(20, ' '));\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('2');\n arquivo.add('2');\n arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add(codigoJuro);\n arquivo.add(jurosVencimento);\n arquivo.add(juros.replace('.', '').padStart(15, '0'));\n arquivo.add(codigoDesconto);\n arquivo.add(vencimento);\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add('2');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${\n removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, '0'));\n arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, '0'));\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(8, ' '));\n\n arquivo.addLine();\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n // Registro Detalhe – Segmento R\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add('000000000');\n\n arquivo.addLine();\n }\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 3).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add(total.toFixed(2).replace('.', '').padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add(' '.padStart(8, ' '));\n arquivo.add(' '.padStart(117, ' '));\n\n arquivo.addLine();\n\n // Registro Trailer de Arquivo\n arquivo.add('085');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","export class Arquivo {\n arquivo = '';\n\n constructor() {\n this.arquivo = '';\n }\n\n add(texto: string) {\n this.arquivo += texto;\n }\n\n addLine() {\n this.arquivo += '\\n';\n }\n\n getArquivo() {\n return this.arquivo;\n }\n}\n","export function removerCaracterEspecial(texto: string) {\n if (!texto) return '';\n\n // Remove caracteres especiais, exceto | / , -\n let textoFormatado = texto.replace(/[`~!@#$°%^&*()_+=?;'\"<>{}[\\]\\\\]/gi, '');\n\n // Substitui caracteres acentuados por seus equivalentes sem acento\n textoFormatado = textoFormatado.replace(/[áàãâä]/g, 'a');\n textoFormatado = textoFormatado.replace(/[ÁÀÃÂÄ]/g, 'A');\n textoFormatado = textoFormatado.replace(/[éèêë]/g, 'e');\n textoFormatado = textoFormatado.replace(/[ÉÈÊË]/g, 'E');\n textoFormatado = textoFormatado.replace(/[íìîï]/g, 'i');\n textoFormatado = textoFormatado.replace(/[ÍÌÎÏ]/g, 'I');\n textoFormatado = textoFormatado.replace(/[óòõôö]/g, 'o');\n textoFormatado = textoFormatado.replace(/[ÓÒÔÕÖ]/g, 'O');\n textoFormatado = textoFormatado.replace(/[úùûü]/g, 'u');\n textoFormatado = textoFormatado.replace(/[ÚÙÛÜ]/g, 'U');\n textoFormatado = textoFormatado.replace(/ç/g, 'c');\n textoFormatado = textoFormatado.replace(/Ç/g, 'C');\n\n // Substitui quaisquer caracteres não alfanuméricos, exceto | / , -\n textoFormatado = textoFormatado.replace(/[^a-zA-Z0-9|/,-]/g, ' ');\n\n return textoFormatado;\n}","import { IGerarRetornoAilos, IDocumentoRetornoAilos } from './types';\n\nexport function gerarRetorno({ dados }: IGerarRetornoAilos){\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoAilos[] = [];\n\n let index = 0;\n\n for (const item of arquivo) {\n let linha = item;\n\n const banco = linha.substring(0, 3);\n const codigoRetorno = linha.substring(15, 17);\n\n if (\n (banco === '001' || banco === '085') &&\n (codigoRetorno === '06' || codigoRetorno === '17')\n ) {\n let segmento = linha.substring(13, 14);\n\n if (segmento === 'T') {\n const linhaDoc = linha.substring(105, 130).trimEnd();\n\n let tipoDocumento: string = 'INDEFINIDO';\n let idDocumento: string = linhaDoc;\n\n if (linhaDoc.includes('-')) {\n const [tipoDoc, idDoc] = linhaDoc.split('-');\n tipoDocumento = tipoDoc;\n idDocumento = idDoc;\n }\n\n const especie = tipoDocumento.length ? tipoDocumento : 'INDEFINIDO';\n\n linha = arquivo[index + 1];\n segmento = linha.substring(13, 14);\n\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento: idDocumento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const ailos = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { IGerarBoletoAilos, IGerarPDFAilos, IGerarRemessaAilos, IGerarRetornoAilos } from \"@/banks/ailos/types\";\nimport { IGerarBoletoBradesco, IGerarPDFBradesco, IGerarRemessaBradesco, IGerarRetornoBradesco } from \"@/banks/bradesco/types\";\nimport { IGerarBoletoSicredi, IGerarPDFSicredi, IGerarRemessaSicredi, IGerarRetornoSicredi } from \"@/banks/sicredi/types\";\nimport { IGerarBoletoSicoob, IGerarPDFSicoob, IGerarRemessaSicoob, IGerarRetornoSicoob } from \"@/banks/sicoob/types\";\nimport { IGerarBoletoBancoBrasil, IGerarPDFBancoBrasil, IGerarRemessaBancoBrasil, IGerarRetornoBancoBrasil } from \"@/banks/banco-brasil/types\";\nimport { IGerarPDFItau } from \"@/banks/itau/types\";\n\nexport type IGerarBoleto =\n IGerarBoletoAilos |\n IGerarBoletoBradesco |\n IGerarBoletoSicredi |\n IGerarBoletoSicoob |\n IGerarBoletoBancoBrasil;\n\nexport type IGerarPDF =\n IGerarPDFAilos |\n IGerarPDFBradesco |\n IGerarPDFSicredi |\n IGerarPDFSicoob |\n IGerarPDFBancoBrasil |\n IGerarPDFItau;\n\nexport type IGerarRemessa =\n IGerarRemessaAilos |\n IGerarRemessaBradesco |\n IGerarRemessaSicredi |\n IGerarRemessaSicoob |\n IGerarRemessaBancoBrasil;\n\nexport type IGerarRetorno =\n IGerarRetornoAilos |\n IGerarRetornoBradesco |\n IGerarRetornoSicredi |\n IGerarRetornoSicoob |\n IGerarRetornoBancoBrasil;\n\nexport enum Banco {\n AILOS = '085',\n BRADESCO = '005',\n SICREDI = '748',\n SICOOB = '756',\n BANCO_BRASIL = '001',\n ITAU = '341',\n}\n","import { IGerarBoletoBradesco } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoBradesco) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = padLeft(bancario.convenio, 6);\n const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9);\n const nossoNumero =\n padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento;\n\n const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2);\n const digitoGeral = getDigitoGeral(`0859${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n const digito4 = getDigito(campo4);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + digito4 + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito === 0 || digito === 1 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFBradesco } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFBradesco) {\n try {\n const { dadosPDF, generatePDF } = dados;\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancarios.agencia =\n dadosPDF.beneficiario.dadosBancarios.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancarios.conta =\n dadosPDF.beneficiario.dadosBancarios.conta.padStart(7, '0');\n\n dadosPDF.boleto.codigoBarra = maskFormat.codigoBarra(dadosPDF.boleto.codigoBarra);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n\n const content = compileHbs(getPathTemplates('bradesco-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n return {\n erro: true,\n dados: null,\n };\n }\n}\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaBradesco } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\n\nexport async function gerarRemessa({ dados }: IGerarRemessaBradesco) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const convenio = dadosBancario.convenio.padStart(7, '0');\n const numero =\n dadosBancario.conta.padStart(7, '0') + dadosBancario.contaDigito;\n\n const remessa = `REM${convenio}-${numero}-${data}.REM`;\n\n // Header do arquivo\n arquivo.add('085');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agencia);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, ' '));\n arquivo.add('AILOS'.padEnd(30, ' '));\n arquivo.add(' ');\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('087');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(29, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('045');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 1;\n let quantidadeRegistro = 1;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // Cálculos de juros\n const codigoJuro = dadosBancario.jurosMes > 0 ? '2' : '3';\n const juros =\n dadosBancario.jurosMes > 0\n ? dadosBancario.jurosMes.toFixed(2)\n : '000000000000000';\n\n // Cálculos de desconto\n const jurosVencimento = format(\n addDays(new Date(boleto.vencimento), 1),\n 'ddMMyyyy',\n );\n const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto =\n dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\n\n const protesto = dadosBancario.diasProtesto > 0 ? '1' : '3';\n const diasProtesto =\n protesto === '1' ? dadosBancario.diasProtesto.toString() : '00';\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padEnd(20, ' '));\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('2');\n arquivo.add('2');\n arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add('02'); // Mandar fixo ou criar parâmetro na forma de pagamento\n arquivo.add('A');\n arquivo.add(data);\n arquivo.add(codigoJuro);\n arquivo.add(jurosVencimento);\n arquivo.add(juros.replace('.', '').padStart(15, '0'));\n arquivo.add(codigoDesconto);\n arquivo.add(vencimento);\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto.padStart(1, '0'));\n arquivo.add('2');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n sequencia++;\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${pagador.endereco.logradouro\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(pagador.nome.substring(0, 40).padEnd(40, ' '));\n arquivo.add(pagador.endereco.logradouro.substring(0, 40).padEnd(40, ' '));\n arquivo.add(pagador.endereco.bairro.substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, '0'));\n arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, '0'));\n arquivo.add(pagador.endereco.municipio.substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.uf.padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(8, ' '));\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n arquivo.addLine();\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n sequencia++;\n\n // Registro Detalhe – Segmento R\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add('000000000');\n }\n\n arquivo.addLine();\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 3).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add(total.toFixed(2).replace('.', '').padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add(' '.padStart(8, ' '));\n arquivo.add(' '.padStart(117, ' '));\n\n arquivo.addLine();\n\n // Registro Trailer de Arquivo\n arquivo.add('085');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { IGerarRetornoBradesco, IDocumentoRetornoBradesco } from './types';\n\nexport function gerarRetorno({ dados }: IGerarRetornoBradesco){\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoBradesco[] = [];\n\n let index = 0;\n\n for (const item of arquivo) {\n let linha = item;\n\n const banco = linha.substring(0, 3);\n const codigoRetorno = linha.substring(15, 17);\n\n if (\n (banco === '001' || banco === '085') &&\n (codigoRetorno === '06' || codigoRetorno === '17')\n ) {\n let segmento = linha.substring(13, 14);\n\n if (segmento === 'T') {\n let tipoDocumento: string = '';\n let idDocumento: string = '';\n\n const linhaDoc = linha.substring(105, 130).trimEnd();\n\n if (linhaDoc.includes('-')) {\n [tipoDocumento, idDocumento] = linha.split('-');\n } else {\n idDocumento = linhaDoc;\n }\n\n const especie = tipoDocumento.length ? tipoDocumento : 'INDEFINIDO';\n\n linha = arquivo[index + 1];\n segmento = linha.substring(13, 14);\n\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento: IDocumentoRetornoBradesco = {\n id_documento: idDocumento,\n especie,\n valor: valorTotal,\n valor_desconto: 0,\n valor_juros: 0,\n valor_multa: 0,\n valor_total: 0,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const bradesco = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { getFatorVencimento } from '@/utils/getFatorVencimento';\nimport { IGerarBoletoSicredi } from './types';\nimport { copy } from '@/utils/copy';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoSicredi) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const nossoNumero = getNossoNumero(\n parcela.numeroUnico,\n bancario.agencia,\n bancario.posto,\n bancario.codigoCedente\n );\n\n let campoLivre = bancario.tipoCobranca + bancario.tipoCarteira + nossoNumero + bancario.agencia.padStart(4, '0')\n + bancario.posto.padStart(2, '0') + bancario.codigoCedente.padStart(5, '0') + 10;\n\n const digitoCampoLivre = getDigitoCampoLivre(campoLivre);\n campoLivre = campoLivre + digitoCampoLivre;\n const digitoGeral = getDigitoGeral(`7489${fatorVencimento}${valor}${campoLivre}`);\n\n const codigoBarra = `7489${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n // const digito4 = getDigito(campo4);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + /*digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getNossoNumero(id: string, agencia: string, posto: string, codigoCedente: string) {\n let i = 19;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n const texto = agencia.padStart(4, '0') + posto.padStart(2, '0') + codigoCedente.padStart(5, '0') + id.padStart(8, '0');\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (restoDivisao === 0 || restoDivisao === 1) digito = 0;\n\n return id.padStart(8, '0') + digito.toString();\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return valorFormatado.padStart(10, '0');\n}\n\nfunction getDigitoCampoLivre(texto: string) {\n let i = 24;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n let valor = Number(copy(texto, i, i));\n soma += valor * j;\n i--;\n }\n\n const restoDivisao = soma % 11;\n\n if (restoDivisao > 1) digito = 11 - restoDivisao;\n\n return String(digito);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito <= 1 || digito >= 10) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFSicredi } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFSicredi) {\n try {\n const { generatePDF, dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n const content = compileHbs(getPathTemplates('sicredi-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import { IGerarRemessaSicredi } from \"@/banks/sicredi/types\";\nimport { Arquivo } from \"@/lib/Arquivo\";\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\nimport { format } from \"date-fns\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaSicredi) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const data = new Date();\n\n let protestar = '00';\n let negativar = '0000';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protestar = '00';\n negativar = '0000';\n break;\n case 'Protestar':\n protestar = '06';\n negativar = '0000';\n break;\n case 'Negativar':\n protestar = '00';\n negativar = '06' + String(dadosBancario.diasProtesto).padStart(2, '0');\n break;\n default:\n protestar = '00';\n negativar = '0000';\n break;\n }\n\n // Header do arquivo\n arquivo.add('01REMESSA');\n arquivo.add('01');\n arquivo.add('COBRANCA'.padEnd(15, ' '));\n arquivo.add(dadosBancario.codigo_cedente);\n arquivo.add(beneficiario.cnpj);\n arquivo.add(' '.padEnd(31, ' '));\n arquivo.add('748');\n arquivo.add('SICREDI'.padEnd(15, ' '));\n arquivo.add(format(data, 'yyyyMMdd'));\n arquivo.add(' '.padEnd(8, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(7, '0'));\n arquivo.add(' '.padEnd(273, ' '));\n arquivo.add('2.00');\n arquivo.add('000001');\n\n arquivo.addLine();\n let sequencia = 2;\n let total = 0;\n\n // Registros arquivo\n for (const boleto of boletos) {\n const { pagador } = boleto;\n total += Number(boleto.valor);\n\n let tipoInscricao = pagador.pessoa === 'F' ? '1' : '2';\n\n // cálculos desconto\n let desconto = '0000000000000';\n let dataDesconto = '000000';\n\n if (dadosBancario.descontoPagamento) {\n desconto = dadosBancario.descontoPagamento.toFixed(2).replace('.', '').padStart(13, '0');\n dataDesconto = format(new Date(boleto.vencimento), 'ddMMyy');\n }\n\n // cálculos juros\n let valorJurosDias = Number(boleto.valor) * Number(dadosBancario.jurosMes) / 100 / 30;\n let multaAtraso = String(dadosBancario.multaAtraso * 100);\n\n arquivo.add('1');\n arquivo.add('AAA');\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.add('AAA');\n arquivo.add(' '.padEnd(28, ' '));\n arquivo.add(boleto.nossoNumero.padEnd(9, ' '));\n arquivo.add(' '.padEnd(6, ' '));\n arquivo.add(format(new Date(boleto.emissao), 'yyyyMMdd'));\n arquivo.add(' ');\n arquivo.add('N');\n arquivo.add(' ');\n arquivo.add('B');\n arquivo.add('0000');\n arquivo.add(' '.padEnd(4, ' '));\n arquivo.add('0'.padEnd(10, '0'));\n arquivo.add(multaAtraso.padStart(4, '0'));\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.add('01');\n arquivo.add(boleto.identificacaoTitulo.padEnd(10, ' ')); // identificacao titulo, usar depois (retorno)\n arquivo.add(format(new Date(boleto.vencimento), 'ddMMyy'));\n arquivo.add(Number(boleto.valor).toFixed(2).replace('.', '').padStart(13, '0'));\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('A'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(format(new Date(boleto.emissao), 'ddMMyy'));\n arquivo.add(protestar);\n arquivo.add(String(dadosBancario.diasProtesto).padStart(2, '0'));\n arquivo.add(Number(valorJurosDias).toFixed(2).replace('.', '').padStart(13, '0'));\n arquivo.add(dataDesconto);\n arquivo.add(desconto);\n arquivo.add(negativar);\n arquivo.add('0'.padEnd(22, '0'));\n arquivo.add(tipoInscricao);\n arquivo.add('0');\n arquivo.add(pagador.cpfCnpj.padStart(14, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add('0'.padEnd(11, '0'));\n arquivo.add(' ');\n arquivo.add(pagador.endereco.cep.padEnd(8, ' '));\n arquivo.add('00000');\n arquivo.add(' '.padEnd(55, ' '));\n arquivo.add(String(sequencia).padStart(6, '0'));\n\n arquivo.addLine();\n sequencia++;\n }\n\n arquivo.add('91748');\n arquivo.add(dadosBancario.codigo_cedente);\n arquivo.add(' '.padEnd(384, ' '));\n arquivo.add(String(sequencia).padStart(6, '0'));\n arquivo.addLine();\n\n return {\n download: `${dadosBancario.codigo_cedente}${retornaMes(data)}${format(data, 'dd')}.crm`,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMes(data: Date) {\n const mes = data.getMonth() + 1;\n\n switch (mes) {\n case 10:\n return 'O';\n case 11:\n return 'N';\n case 12:\n return 'D';\n default:\n return mes.toString();\n }\n}\n","import { IGerarRetornoSicredi, IDocumentoRetornoSicredi } from './types';\n\nenum Registro {\n HEADER = '0',\n DETALHE = '1',\n TRAILER = '9',\n}\n\nexport function gerarRetorno({ dados }: IGerarRetornoSicredi) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoSicredi[] = [];\n\n for (const linha of arquivo) {\n const id_registro = linha.substring(0, 1);\n\n if (id_registro !== Registro.DETALHE) {\n continue;\n }\n\n const ocorrencia = linha.substring(108, 110);\n\n if (ocorrencia !== '06' && ocorrencia !== '15' && ocorrencia !== '17') {\n continue;\n }\n\n const meu_numero = linha.substring(116, 126).trim();\n let tipo_documento: string = '';\n let id_documento: string = '';\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n let especie = 'INDEFINIDO';\n if (tipo_documento.length) {\n especie =\n tipo_documento === 'N' ? 'NFE' :\n tipo_documento === 'F' ? 'FAT' :\n tipo_documento === 'L' ? 'FIN' :\n 'INDEFINIDO';\n }\n\n const valor_titulo = Number(linha.substring(152, 165)) / 100;\n const abatimento = Number(linha.substring(227, 240)) / 100;\n let valor_desconto = Number(linha.substring(240, 253)) / 100;\n const valor_pago = Number(linha.substring(253, 266)) / 100;\n let valor_juros = Number(linha.substring(266, 279)) / 100;\n const valor_multa = Number(linha.substring(279, 292)) / 100;\n\n if (valor_titulo > valor_pago && valor_desconto === 0) {\n valor_desconto = valor_titulo - valor_pago;\n }\n\n if (valor_titulo < valor_pago && valor_juros === 0) {\n valor_juros = valor_pago - valor_titulo;\n }\n\n const descontos = abatimento + valor_desconto;\n const valor_total = valor_titulo + valor_multa + valor_juros - descontos;\n\n documentos.push({\n id_documento,\n especie,\n valor: valor_pago,\n valor_multa,\n valor_juros,\n valor_desconto,\n valor_total,\n });\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const sicredi = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n}\n","import { IGerarBoletoSicoob } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoSicoob) {\n try {\n const { bancario, parcela } = dados;\n\n if (!bancario.modalidade) {\n bancario.modalidade = '01';\n }\n\n bancario.modalidade = padLeft(bancario.modalidade, 2);\n const codigo_cliente = `${bancario.codigo_cliente}${bancario.codigo_cliente_dv}`;\n\n const nossoNumero = getNossoNumero(bancario.agencia, codigo_cliente, String(parcela.id_boleto));\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(Number(parcela.valor));\n const campoLivre = '1' + bancario.agencia + bancario.modalidade +\n padLeft(codigo_cliente, 7) + nossoNumero + padLeft(parcela.parcela, 3);\n\n const digitoGeral = getDigitoGeral(`7569${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `7569${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getNossoNumero(\n agencia: string,\n codigo_cliente: string,\n id_boleto: string,\n) {\n // formatar numeros\n codigo_cliente = padLeft(codigo_cliente, 10);\n id_boleto = padLeft(id_boleto, 7);\n\n // concatenar\n const aux = `${agencia}${codigo_cliente}${id_boleto}`;\n\n let i = 22, m = 3, soma = 0;\n while (true) {\n i--;\n soma += m * Number(copy(aux, i, i));\n if (i === 1) break;\n else if (m === 3) m = 7;\n else if (m === 7) m = 9;\n else if (m === 9) m = 1;\n else if (m === 1) m = 3;\n }\n\n // calcula o digito\n let dig = soma % 11;\n dig = dig === 1 ? dig = 0 : 11 - dig;\n return `${id_boleto}${dig}`;\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n\n while (i >= 1) {\n j++;\n if (j === 10) j = 2;\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n i--;\n }\n\n const resto = soma % 11;\n let digito = 11 - resto;\n if (digito === 0 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaSicoob } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaSicoob) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const remessa = `REM${dadosBancario.numeroRemessa.padStart(6, '0')}.REM`;\n\n // Header do arquivo\n arquivo.add('756');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add('0');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('SICOOB'.padEnd(30, ' '));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('081');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(69, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('040');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(80, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n const valor_juros_dia = Number(boleto.valor) * dadosBancario.jurosMes / 100 / 30;\n let protesto = '3';\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n break;\n case 'Protestar':\n protesto = '1';\n break;\n case 'Negativar':\n protesto = '8';\n break;\n }\n const diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n total += Number(boleto.valor);\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padStart(10, '0'));\n arquivo.add(boleto.parcela.toString().padStart(2, '0'));\n arquivo.add(dadosBancario.modalidade.padStart(2, '0'));\n arquivo.add('6');\n arquivo.add(' '.padEnd(5, ' '));\n arquivo.add(dadosBancario.carteira);\n arquivo.add('0 22');\n arquivo.add(`${boleto.numeroDocumento}/${Number(boleto.parcela)}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add('1');\n arquivo.add(format(addDays(new Date(boleto.vencimento), 1), 'ddMMyyyy'));\n arquivo.add(valor_juros_dia.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${\n removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.padEnd(8, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(28, ' '));\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento R\n\n let multa = '0';\n let data_multa = '00000000';\n let valor_multa = '000000000000000';\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n multa = '2';\n data_multa = format(addDays(new Date(boleto.vencimento), 1), 'ddMMyyyy');\n valor_multa = dadosBancario.multaAtraso.toFixed(2).replace('.', '').padStart(15, '0');\n }\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add('');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add(multa);\n arquivo.add(data_multa);\n arquivo.add(valor_multa);\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n\n arquivo.addLine();\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 2).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add('00');\n arquivo.add(total.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000000000000000000000000000000000000000000000000000000000');\n arquivo.add(' '.padEnd(125, ' '));\n\n arquivo.addLine();\n\n arquivo.add('756');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFSicoob } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport StringMask from 'string-mask';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFSicoob) {\n try {\n const { dadosPDF, generatePDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia = formatAgenciaCodigoCedente(\n dadosPDF.beneficiario.dadosBancario.agencia,\n dadosPDF.beneficiario.dadosBancario.codigo_cliente,\n );\n\n dadosPDF.beneficiario.dadosBancario.carteira = dadosPDF.beneficiario.dadosBancario.carteira.padStart(2, '0');\n\n dadosPDF.boleto.nossoNumero = formatNossoNumero(\n dadosPDF.boleto.parcela,\n dadosPDF.boleto.nossoNumero,\n );\n\n dadosPDF.pagador.cnpj =\n dadosPDF.pagador.cnpj.length === 11 ?\n `CPF: ${maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj)}` :\n `CNPJ: ${maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj)}`;\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarra = maskFormat.codigoBarra(dadosPDF.boleto.codigoBarra);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n\n const content = compileHbs(getPathTemplates('sicoob-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n\nfunction formatAgenciaCodigoCedente(agencia: string, conta: string) {\n agencia = agencia.slice(0, -1).padStart(4, '0');\n conta = conta.padStart(7, '0');\n\n const agenciaFmt = new StringMask('0000.000000-0');\n return agenciaFmt.apply(agencia + conta);\n}\n\nfunction formatNossoNumero(parcela: number | string, nossoNumero: string) {\n parcela = String(parcela).padStart(2, '0');\n nossoNumero = nossoNumero.padStart(8, '0');\n return `${parcela}/${nossoNumero.slice(0, 7)}-${nossoNumero.slice(7, 8)}`;\n}\n","import { IGerarRetornoSicoob, IDocumentoRetornoSicoob } from './types';\nimport { Banco } from '@/types/Boletos';\n\nexport function gerarRetorno({ dados }: IGerarRetornoSicoob) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoSicoob[] = [];\n\n for (let i = 0; i < arquivo.length; i++) {\n let linha = arquivo[i];\n\n const banco = linha.substring(0, 3);\n if (banco !== Banco.SICOOB) {\n continue;\n }\n\n const ocorrencia = linha.substring(15, 17);\n if (ocorrencia !== '06' && ocorrencia !== '17') {\n continue;\n }\n\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const meu_numero = linha.substring(105, 130).trimEnd();\n let tipo_documento = 'INDEFINIDO';\n let id_documento = meu_numero;\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n const especie = tipo_documento.length ? tipo_documento : 'INDEFINIDO';\n linha = arquivo[++i];\n segmento = linha.substring(13, 14);\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const sicoob = {\n gerarDadosBoleto,\n gerarRemessa,\n gerarPDF,\n gerarRetorno,\n};\n","import { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\nimport { IGerarBoletoBancoBrasil } from './types';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoBancoBrasil) {\n try {\n const {\n bancario,\n parcela,\n } = dados;\n\n parcela.valor = Number(parcela.valor);\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = bancario.convenio;\n\n let nossoNumero = '';\n let numeroDocumento = '';\n let campoLivre = '';\n if (convenio.length === 6) {\n switch (parcela.tipoDocumento) {\n case 'NFE':\n numeroDocumento = padLeft(`${parcela.id_boleto}2`, 5);\n break;\n case 'FAT':\n numeroDocumento = padLeft(`${parcela.id_boleto}4`, 5);\n break;\n case 'FIN':\n numeroDocumento = padLeft(`${parcela.id_boleto}5`, 5);\n break;\n }\n nossoNumero = getNossoNumero(`${convenio}${numeroDocumento}`);\n campoLivre =\n copy(nossoNumero, 1, 11) +\n padLeft(bancario.agencia, 4) +\n padLeft(`${bancario.numero}${bancario.numero_dv}`, 8) +\n padLeft(bancario.carteira, 2);\n } else if (convenio.length === 7) {\n switch (parcela.tipoDocumento) {\n case 'NFE':\n numeroDocumento = padLeft(`${parcela.id_boleto}2`, 10);\n break;\n case 'FAT':\n numeroDocumento = padLeft(`${parcela.id_boleto}4`, 10);\n break;\n case 'FIN':\n numeroDocumento = padLeft(`${parcela.id_boleto}5`, 10);\n break;\n }\n nossoNumero = `${convenio}${numeroDocumento}`;\n campoLivre = `000000${nossoNumero}${padLeft(bancario.carteira, 2)}`;\n }\n\n const digitoGeral = getDigitoGeral(`0019${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0019${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n /* const digito4 = getDigito(campo4); Aviso: No solution está errado, mas da certo, esse digito 4 não usa*/\n\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 /*+ digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nexport function getNossoNumero(auxiliar: string) {\n let i = 11, j = 10, soma = 0;\n\n while (i >= 1) {\n j--;\n if (j === 1) j = 9;\n const numero = Number(copy(auxiliar, i, i));\n soma += j * numero;\n i--;\n }\n\n const resto = soma % 11;\n const digito = resto < 10 ? String(resto) : 'X';\n const nosso_numero = auxiliar + digito;\n\n return nosso_numero;\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n\n while (i >= 1) {\n j++;\n if (j === 10) j = 2;\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n i--;\n }\n\n const resto = soma % 11;\n let digito = 11 - resto;\n if (digito === 0 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFBancoBrasil } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFBancoBrasil) {\n try {\n const { dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancario.conta =\n dadosPDF.beneficiario.dadosBancario.conta.padStart(7, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${jurosDia} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n const content = compileHbs(getPathTemplates('banco-brasil-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import { format } from 'date-fns';\nimport { IGerarRemessaBancoBrasil } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\nimport { getNossoNumero } from './gerarDadosBoleto';\n\nexport function gerarRemessa({ dados }: IGerarRemessaBancoBrasil) {\n try {\n const {\n dadosBancario,\n beneficiario,\n boletos,\n } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n const remessa = `REM${dadosBancario.numeroRemessa.padStart(5, '0')}.CNAB`;\n\n // header do arquivo\n arquivo.add('001');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(14, '0'));\n arquivo.add(dadosBancario.convenio.padStart(9, '0'));\n arquivo.add('0014');\n arquivo.add(dadosBancario.carteira.padStart(2, '0'));\n arquivo.add(dadosBancario.variacao_carteira.padStart(3, '0'));\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('BANCO DO BRASIL S.A.'.padEnd(30, ' '));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('030');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(11, ' '));\n arquivo.add('CSP');\n arquivo.add('000');\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.addLine();\n\n // header do lote\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ')\n arquivo.add('020');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padStart(9, '0'));\n arquivo.add('0014');\n arquivo.add(dadosBancario.carteira.padStart(2, '0'));\n arquivo.add(dadosBancario.variacao_carteira.padStart(3, '0'));\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(80, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n for (const boleto of boletos) {\n const convenio = dadosBancario.convenio;\n let nosso_numero: string = '';\n\n if (convenio.length === 6) {\n switch (boleto.tipoDocumento) {\n case 'NFE': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}2`);\n break;\n }\n case 'FAT': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}4`);\n break;\n }\n case 'FIN': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}5`);\n break;\n }\n }\n } else if (convenio.length === 7) {\n switch (boleto.tipoDocumento) {\n case 'NFE': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '2').padStart(10, '0')}`;\n break;\n }\n case 'FAT': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '4').padStart(10, '0')}`;\n break;\n }\n case 'FIN': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '5').padStart(10, '0')}`;\n break;\n }\n }\n }\n\n const valorJurosDia = dadosBancario.jurosMes > 0\n ? Number(boleto.valor) * dadosBancario.jurosMes / 100 / 30\n : 0;\n\n const { pagador } = boleto;\n const tipoInscricao = pagador.pessoa === 'F' ? '1' : '2';\n\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // PROTESTO/NEGATIVAÇÃO\n let protesto = '3';\n let diasProtesto = '00';\n let baixarDevolver = '1';\n let diasBaixa = '000';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n diasProtesto = '00';\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n case 'Protestar':\n protesto = '1';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n baixarDevolver = '2';\n diasBaixa = '060';\n break;\n case 'Negativar':\n protesto = '8';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n default:\n protesto = '3';\n diasProtesto = '00';\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n }\n\n // segmento P\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(nosso_numero.padEnd(20, ' '));\n arquivo.add('7'); // codigo carteira\n arquivo.add('1122');\n arquivo.add(`${boleto.numeroDocumento.padStart(6, '0')}-${boleto.parcela.toString().padStart(2, '0')}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add('00000 ');\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add('1');\n arquivo.add('00000000');\n arquivo.add(valorJurosDia.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // identificacao titulo, usar depois (retorno)\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add(baixarDevolver);\n arquivo.add(diasBaixa);\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n arquivo.addLine();\n\n pagador.endereco.logradouro = `${removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n // segmento Q\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep);\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(28, ' '));\n arquivo.addLine();\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n // segmento R\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.addLine();\n }\n\n quantidadeRegistro++;\n }\n\n // trailer do lote\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 2).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add('00');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000000000000000000000000000000000000000000000000000000000');\n arquivo.add(' '.padEnd(125, ' '));\n arquivo.addLine();\n\n // trailer do arquivo\n arquivo.add('001');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n arquivo.addLine();\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { IGerarRetornoBancoBrasil, IDocumentoRetornoBancoBrasil } from './types';\nimport { Banco } from '@/types/Boletos';\n\nexport function gerarRetorno({ dados }: IGerarRetornoBancoBrasil) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoBancoBrasil[] = [];\n\n for (let i = 0; i < arquivo.length; i++) {\n let linha = arquivo[i];\n\n const banco = linha.substring(0, 3);\n if (banco !== Banco.BANCO_BRASIL) {\n continue;\n }\n\n const ocorrencia = linha.substring(15, 17);\n if (ocorrencia !== '06' && ocorrencia !== '17') {\n continue;\n }\n\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const meu_numero = linha.substring(105, 130).trimEnd();\n let tipo_documento = 'INDEFINIDO';\n let id_documento = meu_numero;\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n const especie = tipo_documento.length ? tipo_documento : 'INDEFINIDO';\n linha = arquivo[++i];\n segmento = linha.substring(13, 14);\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const bancoBrasil = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarBoleto } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\n\nexport function gerar({ banco, dados }: IGerarBoleto) {\n if (banco === Banco.AILOS) {\n return ailos.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarDadosBoleto({ banco, dados});\n }\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFItau } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\nimport { copy } from '@/utils/copy';\n\nexport async function gerarPDF({ dados }: IGerarPDFItau) {\n try {\n const { dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucoes = [`APÓS O VENCIMENTO, COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA`, ...dadosPDF.boleto.instrucoes];\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucoes = [`ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`, ...dadosPDF.boleto.instrucoes];\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucoes = [`MULTA DE ${multaAtraso}%`, ...dadosPDF.boleto.instrucoes];\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucoes = [`PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`, ...dadosPDF.boleto.instrucoes];\n }\n\n const content = compileHbs(getPathTemplates('itau-boleto.hbs'), {\n ...dadosPDF,\n boleto: {\n ...dadosPDF.boleto,\n codigoBarraImage: codigoBarra.toString('base64'),\n nossoNumeroDigito: getDigito(`${dadosPDF.beneficiario.dadosBancario.agencia}${dadosPDF.beneficiario.dadosBancario.conta}${dadosPDF.beneficiario.dadosBancario.codigoCarteira}${dadosPDF.boleto.nossoNumero}`),\n }\n });\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n const pdfBase64 = await decompress(buffer);\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { gerarPDF } from \"./gerarPDF\";\n\nexport const itau = {\n gerarPDF,\n};\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarPDF } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\nimport { itau } from \"./banks/itau\";\n\nexport function pdf({ banco, dados }: IGerarPDF) {\n if (banco === Banco.AILOS) {\n return ailos.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.ITAU) {\n return itau.gerarPDF({ banco, dados });\n }\n}\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarRemessa } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\n\nexport function remessa({ banco, dados }: IGerarRemessa) {\n if (banco === Banco.AILOS) {\n return ailos.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarRemessa({ banco, dados });\n }\n}\n","import { Banco, IGerarRetorno } from \"./types/Boletos\";\nimport { ailos } from \"@/banks/ailos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { bancoBrasil } from \"@/banks/banco-brasil\";\nimport { sicoob } from \"@/banks/sicoob\";\n\nexport function retorno({ banco, dados }: IGerarRetorno) {\n if (banco === Banco.AILOS) {\n return ailos.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarRetorno({ banco, dados });\n }\n}\n","import { api } from \"../services/api\";\n\ninterface IConfig {\n apiClient?: {\n url?: string;\n authorization?: string;\n }\n}\n\nexport function defineConfig({ apiClient }: IConfig) {\n if (apiClient) {\n const { authorization, url } = apiClient;\n\n if (url) api.defaults.baseURL = url;\n if (authorization) api.defaults.headers.common.Authorization = authorization;\n }\n}\n","import { gerar } from './gerar';\nimport { pdf } from './pdf';\nimport { remessa } from './remessa';\nimport { retorno } from './retorno';\n\nexport { defineConfig } from './config';\nexport { Banco } from './types/Boletos';\n\nexport default {\n gerar,\n pdf,\n remessa,\n retorno,\n}\n"],"mappings":"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","names":["retorno","codigoBarra","formatter","codigoBarra","remessa","Banco","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","addDays","format","gerarRemessa","format","remessa","addDays","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getNossoNumero","getValor","getDigitoGeral","codigoBarra","getDigito","addDays","format","gerarRemessa","format","remessa","addDays","BwipJs","StringMask","gerarPDF","codigoBarra","BwipJs","StringMask","gerarRetorno","gerarDadosBoleto","gerarRemessa","gerarPDF","gerarRetorno","gerarDadosBoleto","getValor","getNossoNumero","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","format","remessa","getNossoNumero","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","BwipJs","gerarPDF","codigoBarra","BwipJs","getDigito","gerarPDF"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/pafLeft.ts","../src/utils/copy.ts","../src/utils/getFatorVencimento.ts","../src/banks/ailos/gerarDadosBoleto.ts","../src/banks/ailos/gerarPDF.ts","../src/utils/maskFormat.ts","../src/utils/compileHbs.ts","../src/utils/getPathTemplates.ts","../src/services/api.ts","../src/utils/zip.ts","../src/banks/ailos/gerarRemessa.ts","../src/lib/Arquivo.ts","../src/utils/removerCaracterEspecial.ts","../src/banks/ailos/gerarRetorno.ts","../src/banks/ailos/index.ts","../src/types/Boletos.ts","../src/banks/bradesco/gerarDadosBoleto.ts","../src/banks/bradesco/gerarPDF.ts","../src/banks/bradesco/gerarRemessa.ts","../src/banks/bradesco/gerarRetorno.ts","../src/banks/bradesco/index.ts","../src/banks/sicredi/gerarDadosBoleto.ts","../src/banks/sicredi/gerarPDF.ts","../src/banks/sicredi/gerarRemessa.ts","../src/banks/sicredi/gerarRetorno.ts","../src/banks/sicredi/index.ts","../src/banks/sicoob/gerarDadosBoleto.ts","../src/banks/sicoob/gerarRemessa.ts","../src/banks/sicoob/gerarPDF.ts","../src/banks/sicoob/gerarRetorno.ts","../src/banks/sicoob/index.ts","../src/banks/banco-brasil/gerarDadosBoleto.ts","../src/banks/banco-brasil/gerarPDF.ts","../src/banks/banco-brasil/gerarRemessa.ts","../src/banks/banco-brasil/gerarRetorno.ts","../src/banks/banco-brasil/index.ts","../src/gerar.ts","../src/banks/itau/gerarPDF.ts","../src/banks/itau/index.ts","../src/pdf.ts","../src/remessa.ts","../src/retorno.ts","../src/config/index.ts","../src/index.ts"],"sourcesContent":["export function padLeft(numero: number | string, tamanho: number) {\n numero = String(numero);\n if (numero.length < tamanho) {\n numero = `0${numero}`;\n return padLeft(numero, tamanho);\n }\n return numero;\n}\n","export function copy(\n texto: string | number,\n startPosition: number,\n endPosition?: number,\n) {\n let retorno = '';\n\n if (typeof texto === 'number') texto = String(texto);\n if (!endPosition) endPosition = texto.length;\n\n for (let i = 0; i < texto.length; i++) {\n const index = i + 1;\n\n if (index >= startPosition && index <= endPosition) {\n const letra = texto[i];\n retorno += letra;\n }\n }\n\n return retorno;\n}\n","import { differenceInDays } from \"date-fns\";\n\nexport function getFatorVencimento(vencimento: string | Date) {\n vencimento = new Date(vencimento);\n if (vencimento >= new Date(2025, 1, 22)) {\n return differenceInDays(new Date(vencimento), new Date(2022, 4, 29)).toString();\n } else {\n return differenceInDays(new Date(vencimento), new Date(1997, 9, 7)).toString();\n }\n}\n","import { IGerarBoletoAilos } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoAilos) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = padLeft(bancario.convenio, 6);\n const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9);\n const nossoNumero = padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento;\n\n const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2);\n const digitoGeral = getDigitoGeral(`0859${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n /* const digito4 = getDigito(campo4); Aviso: No solution está errado, mas da certo, esse digito 4 não usa*/\n\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 /*+ digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito === 0 || digito === 1 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFAilos } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFAilos) {\n try {\n const { generatePDF, dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cpfcnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancario.conta =\n dadosPDF.beneficiario.dadosBancario.conta.padStart(7, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cpfcnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14;\n const content = compileHbs(getPathTemplates('ailos-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import StringMask from 'string-mask';\n\nexport function retornaCpfCnpjFormatado(cpfCnpj: string) {\n if (cpfCnpj?.length <= 11) {\n const formatter = new StringMask('000.000.000-00');\n return formatter.apply(cpfCnpj);\n }\n\n const formatter = new StringMask('00.000.000/0000-00');\n return formatter.apply(cpfCnpj);\n}\n\nexport function retornaCEPFormatado(cep: string) {\n const formatter = new StringMask('00000-000');\n return formatter.apply(cep);\n}\n\n\nexport function numberToReal(numero: any) {\n numero = typeof numero === 'string' ? parseFloat(numero) : numero;\n numero = numero.toFixed(2).split('.');\n numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.');\n return numero.join(',');\n}\n\nexport function codigoBarra(codigo: string) {\n const formatter = new StringMask('00000.00000 00000.000000 00000.000000 0 000000000000000');\n return formatter.apply(codigo);\n}\n\nexport default {\n numberToReal,\n retornaCEPFormatado,\n retornaCpfCnpjFormatado,\n codigoBarra,\n};\n","import hbs from 'handlebars';\nimport fs from 'fs';\n\nexport function compileHbs(templatePath: string, data?: any) {\n const html = fs.readFileSync(templatePath, 'utf-8');\n const content = hbs.compile(html)(data);\n\n return content;\n}\n","import path from 'path';\n\nexport function getPathTemplates(template: string) {\n if (process.env.NODE_ENV === 'dev') {\n return path.resolve(process.cwd(), 'views', template);\n }\n\n return path.resolve(__dirname, template);\n}\n","import 'dotenv/config';\nimport axios from \"axios\";\n\nexport const api = axios.create({\n baseURL: process.env.API_URL || 'https://23136fv876.execute-api.sa-east-1.amazonaws.com/dev/create-report',\n});\n","import * as zlib from 'zlib';\n\nfunction compress(input: string): Promise<{ erro: boolean; dados: Buffer }> {\n return new Promise((resolve, reject) => {\n zlib.gzip(input, (error, result) => {\n if (error) {\n return reject(error);\n }\n resolve({\n erro: false,\n dados: result,\n });\n });\n });\n}\n\nfunction decompress(input: Buffer): Promise<string> {\n return new Promise((resolve, reject) => {\n zlib.gunzip(input, (error, result) => {\n if (error) {\n return reject(error);\n }\n resolve(result.toString());\n });\n });\n}\n\nexport { compress, decompress };\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaAilos } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaAilos) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const convenio = dadosBancario.convenio.padStart(7, '0');\n const numero =\n dadosBancario.conta.padStart(7, '0') + dadosBancario.contaDigito;\n\n const remessa = `REM${convenio}-${numero}-${data}.REM`;\n\n // Header do arquivo\n arquivo.add('085');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('AILOS'.padEnd(30, ' '));\n arquivo.add(' ');\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('087');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(29, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('045');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // Cálculos de juros\n const codigoJuro = dadosBancario.jurosMes > 0 ? '2' : '3';\n const juros =\n dadosBancario.jurosMes > 0\n ? dadosBancario.jurosMes.toFixed(2)\n : '000000000000000';\n\n // Cálculos de desconto\n const jurosVencimento = format(\n addDays(new Date(boleto.vencimento), 1),\n 'ddMMyyyy',\n );\n const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto =\n dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\n\n let diasProtesto = '00';\n let protesto = '3';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n diasProtesto = '00';\n break;\n case 'Protestar':\n protesto = '1';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n break;\n case 'Negativar':\n protesto = '2';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n break;\n default:\n protesto = '3';\n diasProtesto = '00';\n break;\n }\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padEnd(20, ' '));\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('2');\n arquivo.add('2');\n arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add(codigoJuro);\n arquivo.add(jurosVencimento);\n arquivo.add(juros.replace('.', '').padStart(15, '0'));\n arquivo.add(codigoDesconto);\n arquivo.add(vencimento);\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add('2');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${\n removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, '0'));\n arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, '0'));\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(8, ' '));\n\n arquivo.addLine();\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n // Registro Detalhe – Segmento R\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add('000000000');\n\n arquivo.addLine();\n }\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 3).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add(total.toFixed(2).replace('.', '').padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add(' '.padStart(8, ' '));\n arquivo.add(' '.padStart(117, ' '));\n\n arquivo.addLine();\n\n // Registro Trailer de Arquivo\n arquivo.add('085');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","export class Arquivo {\n arquivo = '';\n\n constructor() {\n this.arquivo = '';\n }\n\n add(texto: string) {\n this.arquivo += texto;\n }\n\n addLine() {\n this.arquivo += '\\n';\n }\n\n getArquivo() {\n return this.arquivo;\n }\n}\n","export function removerCaracterEspecial(texto: string) {\n if (!texto) return '';\n\n // Remove caracteres especiais, exceto | / , -\n let textoFormatado = texto.replace(/[`~!@#$°%^&*()_+=?;'\"<>{}[\\]\\\\]/gi, '');\n\n // Substitui caracteres acentuados por seus equivalentes sem acento\n textoFormatado = textoFormatado.replace(/[áàãâä]/g, 'a');\n textoFormatado = textoFormatado.replace(/[ÁÀÃÂÄ]/g, 'A');\n textoFormatado = textoFormatado.replace(/[éèêë]/g, 'e');\n textoFormatado = textoFormatado.replace(/[ÉÈÊË]/g, 'E');\n textoFormatado = textoFormatado.replace(/[íìîï]/g, 'i');\n textoFormatado = textoFormatado.replace(/[ÍÌÎÏ]/g, 'I');\n textoFormatado = textoFormatado.replace(/[óòõôö]/g, 'o');\n textoFormatado = textoFormatado.replace(/[ÓÒÔÕÖ]/g, 'O');\n textoFormatado = textoFormatado.replace(/[úùûü]/g, 'u');\n textoFormatado = textoFormatado.replace(/[ÚÙÛÜ]/g, 'U');\n textoFormatado = textoFormatado.replace(/ç/g, 'c');\n textoFormatado = textoFormatado.replace(/Ç/g, 'C');\n\n // Substitui quaisquer caracteres não alfanuméricos, exceto | / , -\n textoFormatado = textoFormatado.replace(/[^a-zA-Z0-9|/,-]/g, ' ');\n\n return textoFormatado;\n}","import { IGerarRetornoAilos, IDocumentoRetornoAilos } from './types';\n\nexport function gerarRetorno({ dados }: IGerarRetornoAilos){\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoAilos[] = [];\n\n let index = 0;\n\n for (const item of arquivo) {\n let linha = item;\n\n const banco = linha.substring(0, 3);\n const codigoRetorno = linha.substring(15, 17);\n\n if (\n (banco === '001' || banco === '085') &&\n (codigoRetorno === '06' || codigoRetorno === '17')\n ) {\n let segmento = linha.substring(13, 14);\n\n if (segmento === 'T') {\n const linhaDoc = linha.substring(105, 130).trimEnd();\n\n let tipoDocumento: string = 'INDEFINIDO';\n let idDocumento: string = linhaDoc;\n\n if (linhaDoc.includes('-')) {\n const [tipoDoc, idDoc] = linhaDoc.split('-');\n tipoDocumento = tipoDoc;\n idDocumento = idDoc;\n }\n\n const especie = tipoDocumento.length ? tipoDocumento : 'INDEFINIDO';\n\n linha = arquivo[index + 1];\n segmento = linha.substring(13, 14);\n\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento: idDocumento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const ailos = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { IGerarBoletoAilos, IGerarPDFAilos, IGerarRemessaAilos, IGerarRetornoAilos } from \"@/banks/ailos/types\";\nimport { IGerarBoletoBradesco, IGerarPDFBradesco, IGerarRemessaBradesco, IGerarRetornoBradesco } from \"@/banks/bradesco/types\";\nimport { IGerarBoletoSicredi, IGerarPDFSicredi, IGerarRemessaSicredi, IGerarRetornoSicredi } from \"@/banks/sicredi/types\";\nimport { IGerarBoletoSicoob, IGerarPDFSicoob, IGerarRemessaSicoob, IGerarRetornoSicoob } from \"@/banks/sicoob/types\";\nimport { IGerarBoletoBancoBrasil, IGerarPDFBancoBrasil, IGerarRemessaBancoBrasil, IGerarRetornoBancoBrasil } from \"@/banks/banco-brasil/types\";\nimport { IGerarPDFItau } from \"@/banks/itau/types\";\n\nexport type IGerarBoleto =\n IGerarBoletoAilos |\n IGerarBoletoBradesco |\n IGerarBoletoSicredi |\n IGerarBoletoSicoob |\n IGerarBoletoBancoBrasil;\n\nexport type IGerarPDF =\n IGerarPDFAilos |\n IGerarPDFBradesco |\n IGerarPDFSicredi |\n IGerarPDFSicoob |\n IGerarPDFBancoBrasil |\n IGerarPDFItau;\n\nexport type IGerarRemessa =\n IGerarRemessaAilos |\n IGerarRemessaBradesco |\n IGerarRemessaSicredi |\n IGerarRemessaSicoob |\n IGerarRemessaBancoBrasil;\n\nexport type IGerarRetorno =\n IGerarRetornoAilos |\n IGerarRetornoBradesco |\n IGerarRetornoSicredi |\n IGerarRetornoSicoob |\n IGerarRetornoBancoBrasil;\n\nexport enum Banco {\n AILOS = '085',\n BRADESCO = '005',\n SICREDI = '748',\n SICOOB = '756',\n BANCO_BRASIL = '001',\n ITAU = '341',\n}\n","import { IGerarBoletoBradesco } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoBradesco) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = padLeft(bancario.convenio, 6);\n const numeroDocumento = padLeft(`${parcela.id_boleto}`, 9);\n const nossoNumero =\n padLeft(bancario.numero + bancario.numero_dv, 8) + numeroDocumento;\n\n const campoLivre = convenio + nossoNumero + padLeft(bancario.carteira, 2);\n const digitoGeral = getDigitoGeral(`0859${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0859${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n const digito4 = getDigito(campo4);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + digito4 + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito === 0 || digito === 1 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFBradesco } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFBradesco) {\n try {\n const { dadosPDF, generatePDF } = dados;\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancarios.agencia =\n dadosPDF.beneficiario.dadosBancarios.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancarios.conta =\n dadosPDF.beneficiario.dadosBancarios.conta.padStart(7, '0');\n\n dadosPDF.boleto.codigoBarra = maskFormat.codigoBarra(dadosPDF.boleto.codigoBarra);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n\n const content = compileHbs(getPathTemplates('bradesco-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n return {\n erro: true,\n dados: null,\n };\n }\n}\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaBradesco } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\n\nexport async function gerarRemessa({ dados }: IGerarRemessaBradesco) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const convenio = dadosBancario.convenio.padStart(7, '0');\n const numero =\n dadosBancario.conta.padStart(7, '0') + dadosBancario.contaDigito;\n\n const remessa = `REM${convenio}-${numero}-${data}.REM`;\n\n // Header do arquivo\n arquivo.add('085');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agencia);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, ' '));\n arquivo.add('AILOS'.padEnd(30, ' '));\n arquivo.add(' ');\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('087');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(29, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('045');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(beneficiario.nome.substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 1;\n let quantidadeRegistro = 1;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // Cálculos de juros\n const codigoJuro = dadosBancario.jurosMes > 0 ? '2' : '3';\n const juros =\n dadosBancario.jurosMes > 0\n ? dadosBancario.jurosMes.toFixed(2)\n : '000000000000000';\n\n // Cálculos de desconto\n const jurosVencimento = format(\n addDays(new Date(boleto.vencimento), 1),\n 'ddMMyyyy',\n );\n const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto =\n dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\n\n const protesto = dadosBancario.diasProtesto > 0 ? '1' : '3';\n const diasProtesto =\n protesto === '1' ? dadosBancario.diasProtesto.toString() : '00';\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padEnd(20, ' '));\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('1');\n arquivo.add('2');\n arquivo.add('2');\n arquivo.add(`${boleto.numeroDocumento}/${boleto.parcela}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add('02'); // Mandar fixo ou criar parâmetro na forma de pagamento\n arquivo.add('A');\n arquivo.add(data);\n arquivo.add(codigoJuro);\n arquivo.add(jurosVencimento);\n arquivo.add(juros.replace('.', '').padStart(15, '0'));\n arquivo.add(codigoDesconto);\n arquivo.add(vencimento);\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto.padStart(1, '0'));\n arquivo.add('2');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n sequencia++;\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${pagador.endereco.logradouro\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(pagador.nome.substring(0, 40).padEnd(40, ' '));\n arquivo.add(pagador.endereco.logradouro.substring(0, 40).padEnd(40, ' '));\n arquivo.add(pagador.endereco.bairro.substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.substring(0, 5).padStart(5, '0'));\n arquivo.add(pagador.endereco.cep.substring(5, 7).padStart(3, '0'));\n arquivo.add(pagador.endereco.municipio.substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.uf.padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(' '.padEnd(8, ' '));\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n arquivo.addLine();\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n sequencia++;\n\n // Registro Detalhe – Segmento R\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add(sequencia.toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add('000000000');\n }\n\n arquivo.addLine();\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('085');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 3).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add(total.toFixed(2).replace('.', '').padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add('0'.padStart(6, '0'));\n arquivo.add('0'.padStart(17, '0'));\n arquivo.add(' '.padStart(8, ' '));\n arquivo.add(' '.padStart(117, ' '));\n\n arquivo.addLine();\n\n // Registro Trailer de Arquivo\n arquivo.add('085');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { IGerarRetornoBradesco, IDocumentoRetornoBradesco } from './types';\n\nexport function gerarRetorno({ dados }: IGerarRetornoBradesco){\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoBradesco[] = [];\n\n let index = 0;\n\n for (const item of arquivo) {\n let linha = item;\n\n const banco = linha.substring(0, 3);\n const codigoRetorno = linha.substring(15, 17);\n\n if (\n (banco === '001' || banco === '085') &&\n (codigoRetorno === '06' || codigoRetorno === '17')\n ) {\n let segmento = linha.substring(13, 14);\n\n if (segmento === 'T') {\n let tipoDocumento: string = '';\n let idDocumento: string = '';\n\n const linhaDoc = linha.substring(105, 130).trimEnd();\n\n if (linhaDoc.includes('-')) {\n [tipoDocumento, idDocumento] = linha.split('-');\n } else {\n idDocumento = linhaDoc;\n }\n\n const especie = tipoDocumento.length ? tipoDocumento : 'INDEFINIDO';\n\n linha = arquivo[index + 1];\n segmento = linha.substring(13, 14);\n\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento: IDocumentoRetornoBradesco = {\n id_documento: idDocumento,\n especie,\n valor: valorTotal,\n valor_desconto: 0,\n valor_juros: 0,\n valor_multa: 0,\n valor_total: 0,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const bradesco = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { getFatorVencimento } from '@/utils/getFatorVencimento';\nimport { IGerarBoletoSicredi } from './types';\nimport { copy } from '@/utils/copy';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoSicredi) {\n try {\n const { bancario, parcela } = dados;\n\n parcela.valor = Number(parcela.valor);\n\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const nossoNumero = getNossoNumero(\n parcela.numeroUnico,\n bancario.agencia,\n bancario.posto,\n bancario.codigoCedente\n );\n\n let campoLivre = bancario.tipoCobranca + bancario.tipoCarteira + nossoNumero + bancario.agencia.padStart(4, '0')\n + bancario.posto.padStart(2, '0') + bancario.codigoCedente.padStart(5, '0') + 10;\n\n const digitoCampoLivre = getDigitoCampoLivre(campoLivre);\n campoLivre = campoLivre + digitoCampoLivre;\n const digitoGeral = getDigitoGeral(`7489${fatorVencimento}${valor}${campoLivre}`);\n\n const codigoBarra = `7489${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n // const digito4 = getDigito(campo4);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + /*digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getNossoNumero(id: string, agencia: string, posto: string, codigoCedente: string) {\n let i = 19;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n const texto = agencia.padStart(4, '0') + posto.padStart(2, '0') + codigoCedente.padStart(5, '0') + id.padStart(8, '0');\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (restoDivisao === 0 || restoDivisao === 1) digito = 0;\n\n return id.padStart(8, '0') + digito.toString();\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return valorFormatado.padStart(10, '0');\n}\n\nfunction getDigitoCampoLivre(texto: string) {\n let i = 24;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n let valor = Number(copy(texto, i, i));\n soma += valor * j;\n i--;\n }\n\n const restoDivisao = soma % 11;\n\n if (restoDivisao > 1) digito = 11 - restoDivisao;\n\n return String(digito);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j++;\n\n if (j === 10) j = 2;\n\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n\n i--;\n }\n\n const restoDivisao = soma % 11;\n digito = 11 - restoDivisao;\n\n if (digito <= 1 || digito >= 10) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFSicredi } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFSicredi) {\n try {\n const { generatePDF, dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n const content = compileHbs(getPathTemplates('sicredi-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import { IGerarRemessaSicredi } from \"@/banks/sicredi/types\";\nimport { Arquivo } from \"@/lib/Arquivo\";\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\nimport { format } from \"date-fns\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaSicredi) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const data = new Date();\n\n let protestar = '00';\n let negativar = '0000';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protestar = '00';\n negativar = '0000';\n break;\n case 'Protestar':\n protestar = '06';\n negativar = '0000';\n break;\n case 'Negativar':\n protestar = '00';\n negativar = '06' + String(dadosBancario.diasProtesto).padStart(2, '0');\n break;\n default:\n protestar = '00';\n negativar = '0000';\n break;\n }\n\n // Header do arquivo\n arquivo.add('01REMESSA');\n arquivo.add('01');\n arquivo.add('COBRANCA'.padEnd(15, ' '));\n arquivo.add(dadosBancario.codigo_cedente);\n arquivo.add(beneficiario.cnpj);\n arquivo.add(' '.padEnd(31, ' '));\n arquivo.add('748');\n arquivo.add('SICREDI'.padEnd(15, ' '));\n arquivo.add(format(data, 'yyyyMMdd'));\n arquivo.add(' '.padEnd(8, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(7, '0'));\n arquivo.add(' '.padEnd(273, ' '));\n arquivo.add('2.00');\n arquivo.add('000001');\n\n arquivo.addLine();\n let sequencia = 2;\n let total = 0;\n\n // Registros arquivo\n for (const boleto of boletos) {\n const { pagador } = boleto;\n total += Number(boleto.valor);\n\n let tipoInscricao = pagador.pessoa === 'F' ? '1' : '2';\n\n // cálculos desconto\n let desconto = '0000000000000';\n let dataDesconto = '000000';\n\n if (dadosBancario.descontoPagamento) {\n desconto = dadosBancario.descontoPagamento.toFixed(2).replace('.', '').padStart(13, '0');\n dataDesconto = format(new Date(boleto.vencimento), 'ddMMyy');\n }\n\n // cálculos juros\n let valorJurosDias = Number(boleto.valor) * Number(dadosBancario.jurosMes) / 100 / 30;\n let multaAtraso = String(dadosBancario.multaAtraso * 100);\n\n arquivo.add('1');\n arquivo.add('AAA');\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.add('AAA');\n arquivo.add(' '.padEnd(28, ' '));\n arquivo.add(boleto.nossoNumero.padEnd(9, ' '));\n arquivo.add(' '.padEnd(6, ' '));\n arquivo.add(format(new Date(boleto.emissao), 'yyyyMMdd'));\n arquivo.add(' ');\n arquivo.add('N');\n arquivo.add(' ');\n arquivo.add('B');\n arquivo.add('0000');\n arquivo.add(' '.padEnd(4, ' '));\n arquivo.add('0'.padEnd(10, '0'));\n arquivo.add(multaAtraso.padStart(4, '0'));\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.add('01');\n arquivo.add(boleto.identificacaoTitulo.padEnd(10, ' ')); // identificacao titulo, usar depois (retorno)\n arquivo.add(format(new Date(boleto.vencimento), 'ddMMyy'));\n arquivo.add(Number(boleto.valor).toFixed(2).replace('.', '').padStart(13, '0'));\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('A'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(format(new Date(boleto.emissao), 'ddMMyy'));\n arquivo.add(protestar);\n arquivo.add(String(dadosBancario.diasProtesto).padStart(2, '0'));\n arquivo.add(Number(valorJurosDias).toFixed(2).replace('.', '').padStart(13, '0'));\n arquivo.add(dataDesconto);\n arquivo.add(desconto);\n arquivo.add(negativar);\n arquivo.add('0'.padEnd(22, '0'));\n arquivo.add(tipoInscricao);\n arquivo.add('0');\n arquivo.add(pagador.cpfCnpj.padStart(14, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add('0'.padEnd(11, '0'));\n arquivo.add(' ');\n arquivo.add(pagador.endereco.cep.padEnd(8, ' '));\n arquivo.add('00000');\n arquivo.add(' '.padEnd(55, ' '));\n arquivo.add(String(sequencia).padStart(6, '0'));\n\n arquivo.addLine();\n sequencia++;\n }\n\n arquivo.add('91748');\n arquivo.add(dadosBancario.codigo_cedente);\n arquivo.add(' '.padEnd(384, ' '));\n arquivo.add(String(sequencia).padStart(6, '0'));\n arquivo.addLine();\n\n return {\n download: `${dadosBancario.codigo_cedente}${retornaMes(data)}${format(data, 'dd')}.crm`,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMes(data: Date) {\n const mes = data.getMonth() + 1;\n\n switch (mes) {\n case 10:\n return 'O';\n case 11:\n return 'N';\n case 12:\n return 'D';\n default:\n return mes.toString();\n }\n}\n","import { IGerarRetornoSicredi, IDocumentoRetornoSicredi } from './types';\n\nenum Registro {\n HEADER = '0',\n DETALHE = '1',\n TRAILER = '9',\n}\n\nexport function gerarRetorno({ dados }: IGerarRetornoSicredi) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoSicredi[] = [];\n\n for (const linha of arquivo) {\n const id_registro = linha.substring(0, 1);\n\n if (id_registro !== Registro.DETALHE) {\n continue;\n }\n\n const ocorrencia = linha.substring(108, 110);\n\n if (ocorrencia !== '06' && ocorrencia !== '15' && ocorrencia !== '17') {\n continue;\n }\n\n const meu_numero = linha.substring(116, 126).trim();\n let tipo_documento: string = '';\n let id_documento: string = '';\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n let especie = 'INDEFINIDO';\n if (tipo_documento.length) {\n especie =\n tipo_documento === 'N' ? 'NFE' :\n tipo_documento === 'F' ? 'FAT' :\n tipo_documento === 'L' ? 'FIN' :\n 'INDEFINIDO';\n }\n\n const valor_titulo = Number(linha.substring(152, 165)) / 100;\n const abatimento = Number(linha.substring(227, 240)) / 100;\n let valor_desconto = Number(linha.substring(240, 253)) / 100;\n const valor_pago = Number(linha.substring(253, 266)) / 100;\n let valor_juros = Number(linha.substring(266, 279)) / 100;\n const valor_multa = Number(linha.substring(279, 292)) / 100;\n\n if (valor_titulo > valor_pago && valor_desconto === 0) {\n valor_desconto = valor_titulo - valor_pago;\n }\n\n if (valor_titulo < valor_pago && valor_juros === 0) {\n valor_juros = valor_pago - valor_titulo;\n }\n\n const descontos = abatimento + valor_desconto;\n const valor_total = valor_titulo + valor_multa + valor_juros - descontos;\n\n documentos.push({\n id_documento,\n especie,\n valor: valor_pago,\n valor_multa,\n valor_juros,\n valor_desconto,\n valor_total,\n });\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const sicredi = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n}\n","import { IGerarBoletoSicoob } from './types';\nimport { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoSicoob) {\n try {\n const { bancario, parcela } = dados;\n\n if (!bancario.modalidade) {\n bancario.modalidade = '01';\n }\n\n bancario.modalidade = padLeft(bancario.modalidade, 2);\n const codigo_cliente = `${bancario.codigo_cliente}${bancario.codigo_cliente_dv}`;\n\n const nossoNumero = getNossoNumero(bancario.agencia, codigo_cliente, String(parcela.id_boleto));\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(Number(parcela.valor));\n const campoLivre = '1' + bancario.agencia + bancario.modalidade +\n padLeft(codigo_cliente, 7) + nossoNumero + padLeft(parcela.parcela, 3);\n\n const digitoGeral = getDigitoGeral(`7569${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `7569${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getNossoNumero(\n agencia: string,\n codigo_cliente: string,\n id_boleto: string,\n) {\n // formatar numeros\n codigo_cliente = padLeft(codigo_cliente, 10);\n id_boleto = padLeft(id_boleto, 7);\n\n // concatenar\n const aux = `${agencia}${codigo_cliente}${id_boleto}`;\n\n let i = 22, m = 3, soma = 0;\n while (true) {\n i--;\n soma += m * Number(copy(aux, i, i));\n if (i === 1) break;\n else if (m === 3) m = 7;\n else if (m === 7) m = 9;\n else if (m === 9) m = 1;\n else if (m === 1) m = 3;\n }\n\n // calcula o digito\n let dig = soma % 11;\n dig = (dig === 1 || dig === 0) ? 0 : 11 - dig;\n return `${id_boleto}${dig}`;\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n\n while (i >= 1) {\n j++;\n if (j === 10) j = 2;\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n i--;\n }\n\n const resto = soma % 11;\n let digito = 11 - resto;\n if (digito === 0 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { addDays, format } from 'date-fns';\nimport { IGerarRemessaSicoob } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\n\nexport function gerarRemessa({ dados }: IGerarRemessaSicoob) {\n try {\n const { dadosBancario, beneficiario, boletos } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n\n const remessa = `REM${dadosBancario.numeroRemessa.padStart(6, '0')}.REM`;\n\n // Header do arquivo\n arquivo.add('756');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj);\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add('0');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('SICOOB'.padEnd(30, ' '));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('081');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(69, ' '));\n\n arquivo.addLine();\n\n // Header do lote\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ');\n arquivo.add('040');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(80, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n // Registro Detalhe – Segmento P\n for (const boleto of boletos) {\n const { pagador } = boleto;\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n const valor_juros_dia = Number(boleto.valor) * dadosBancario.jurosMes / 100 / 30;\n let protesto = '3';\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n break;\n case 'Protestar':\n protesto = '1';\n break;\n case 'Negativar':\n protesto = '8';\n break;\n }\n const diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n total += Number(boleto.valor);\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(dadosBancario.agencia.padStart(5, '0'));\n arquivo.add(dadosBancario.agenciaDigito);\n arquivo.add(dadosBancario.conta.padStart(12, '0'));\n arquivo.add(dadosBancario.contaDigito);\n arquivo.add(' ');\n arquivo.add(boleto.nossoNumero.padStart(10, '0'));\n arquivo.add(boleto.parcela.toString().padStart(2, '0'));\n arquivo.add(dadosBancario.modalidade.padStart(2, '0'));\n arquivo.add('6');\n arquivo.add(' '.padEnd(5, ' '));\n arquivo.add(dadosBancario.carteira);\n arquivo.add('0 22');\n arquivo.add(`${boleto.numeroDocumento}/${Number(boleto.parcela)}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add('1');\n arquivo.add(format(addDays(new Date(boleto.vencimento), 1), 'ddMMyyyy'));\n arquivo.add(valor_juros_dia.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // Identificação de título, usar depois\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add('0');\n arquivo.add(' ');\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento Q\n let tipoInscricao = '1';\n\n if (pagador.pessoa === 'F') {\n tipoInscricao = '1';\n } else {\n tipoInscricao = '2';\n }\n\n pagador.endereco.logradouro = `${\n removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep.padEnd(8, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(28, ' '));\n\n arquivo.addLine();\n\n // Registro Detalhe – Segmento R\n\n let multa = '0';\n let data_multa = '00000000';\n let valor_multa = '000000000000000';\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n multa = '2';\n data_multa = format(addDays(new Date(boleto.vencimento), 1), 'ddMMyyyy');\n valor_multa = dadosBancario.multaAtraso.toFixed(2).replace('.', '').padStart(15, '0');\n }\n\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add('');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add(multa);\n arquivo.add(data_multa);\n arquivo.add(valor_multa);\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n\n arquivo.addLine();\n quantidadeRegistro++;\n }\n\n // Registro trailer do lote\n arquivo.add('756');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 2).toString().padStart(6, '0'));\n arquivo.add(quantidadeRegistro.toString().padStart(6, '0'));\n arquivo.add('00');\n arquivo.add(total.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('000000000000000000000000000000000000000000000000000000000000000000000');\n arquivo.add(' '.padEnd(125, ' '));\n\n arquivo.addLine();\n\n arquivo.add('756');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFSicoob } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport StringMask from 'string-mask';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFSicoob) {\n try {\n const { dadosPDF, generatePDF } = dados;\n\n if (!dadosPDF.pagador.cpfcnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia = formatAgenciaCodigoCedente(\n dadosPDF.beneficiario.dadosBancario.agencia,\n dadosPDF.beneficiario.dadosBancario.codigo_cliente,\n );\n\n dadosPDF.beneficiario.dadosBancario.carteira = dadosPDF.beneficiario.dadosBancario.carteira.padStart(2, '0');\n\n dadosPDF.boleto.nossoNumero = formatNossoNumero(\n dadosPDF.boleto.parcela,\n dadosPDF.boleto.nossoNumero,\n );\n\n dadosPDF.pagador.cpfcnpj =\n dadosPDF.pagador.cpfcnpj.length === 11 ?\n `CPF: ${maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj)}` :\n `CNPJ: ${maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj)}`;\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarra = maskFormat.codigoBarra(dadosPDF.boleto.codigoBarra);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14;\n const content = compileHbs(getPathTemplates('sicoob-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (generatePDF) {\n pdfBase64 = await generatePDF(content, config);\n } else {\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n }\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n\nfunction formatAgenciaCodigoCedente(agencia: string, conta: string) {\n agencia = agencia.slice(0, -1).padStart(4, '0');\n conta = conta.padStart(7, '0');\n\n const agenciaFmt = new StringMask('0000.000000-0');\n return agenciaFmt.apply(agencia + conta);\n}\n\nfunction formatNossoNumero(parcela: number | string, nossoNumero: string) {\n parcela = String(parcela).padStart(2, '0');\n nossoNumero = nossoNumero.padStart(8, '0');\n return `${parcela}/${nossoNumero.slice(0, 7)}-${nossoNumero.slice(7, 8)}`;\n}\n","import { IGerarRetornoSicoob, IDocumentoRetornoSicoob } from './types';\nimport { Banco } from '@/types/Boletos';\n\nexport function gerarRetorno({ dados }: IGerarRetornoSicoob) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoSicoob[] = [];\n\n for (let i = 0; i < arquivo.length; i++) {\n let linha = arquivo[i];\n\n const banco = linha.substring(0, 3);\n if (banco !== Banco.SICOOB) {\n continue;\n }\n\n const ocorrencia = linha.substring(15, 17);\n if (ocorrencia !== '06' && ocorrencia !== '17') {\n continue;\n }\n\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const meu_numero = linha.substring(105, 130).trimEnd();\n let tipo_documento = 'INDEFINIDO';\n let id_documento = meu_numero;\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n const especie = tipo_documento.length ? tipo_documento : 'INDEFINIDO';\n linha = arquivo[++i];\n segmento = linha.substring(13, 14);\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const sicoob = {\n gerarDadosBoleto,\n gerarRemessa,\n gerarPDF,\n gerarRetorno,\n};\n","import { padLeft } from '@/utils/pafLeft';\nimport { copy } from '@/utils/copy';\nimport { getFatorVencimento } from '@/utils/getFatorVencimento';\nimport { IGerarBoletoBancoBrasil } from './types';\n\nexport function gerarDadosBoleto({ dados }: IGerarBoletoBancoBrasil) {\n try {\n const {\n bancario,\n parcela,\n } = dados;\n\n parcela.valor = Number(parcela.valor);\n const fatorVencimento = getFatorVencimento(parcela.vencimento);\n const valor = getValor(parcela.valor);\n const convenio = bancario.convenio;\n\n let nossoNumero = '';\n let numeroDocumento = '';\n let campoLivre = '';\n if (convenio.length === 6) {\n switch (parcela.tipoDocumento) {\n case 'NFE':\n numeroDocumento = padLeft(`${parcela.id_boleto}2`, 5);\n break;\n case 'FAT':\n numeroDocumento = padLeft(`${parcela.id_boleto}4`, 5);\n break;\n case 'FIN':\n numeroDocumento = padLeft(`${parcela.id_boleto}5`, 5);\n break;\n }\n nossoNumero = getNossoNumero(`${convenio}${numeroDocumento}`);\n campoLivre =\n copy(nossoNumero, 1, 11) +\n padLeft(bancario.agencia, 4) +\n padLeft(`${bancario.numero}${bancario.numero_dv}`, 8) +\n padLeft(bancario.carteira, 2);\n } else if (convenio.length === 7) {\n switch (parcela.tipoDocumento) {\n case 'NFE':\n numeroDocumento = padLeft(`${parcela.id_boleto}2`, 10);\n break;\n case 'FAT':\n numeroDocumento = padLeft(`${parcela.id_boleto}4`, 10);\n break;\n case 'FIN':\n numeroDocumento = padLeft(`${parcela.id_boleto}5`, 10);\n break;\n }\n nossoNumero = `${convenio}${numeroDocumento}`;\n campoLivre = `000000${nossoNumero}${padLeft(bancario.carteira, 2)}`;\n }\n\n const digitoGeral = getDigitoGeral(`0019${fatorVencimento}${valor}${campoLivre}`);\n const codigoBarra = `0019${digitoGeral}${fatorVencimento}${valor}${campoLivre}`;\n\n const campo1 = copy(codigoBarra, 1, 3) + copy(codigoBarra, 4, 4) + copy(codigoBarra, 20, 24);\n const campo2 = copy(codigoBarra, 25, 34);\n const campo3 = copy(codigoBarra, 35, 44);\n const campo4 = copy(codigoBarra, 5, 5);\n const campo5 = copy(codigoBarra, 6, 9) + copy(codigoBarra, 10, 19);\n\n const digito1 = getDigito(campo1);\n const digito2 = getDigito(campo2);\n const digito3 = getDigito(campo3);\n /* const digito4 = getDigito(campo4); Aviso: No solution está errado, mas da certo, esse digito 4 não usa*/\n\n const linhaDigitavel = campo1 + digito1 + campo2 + digito2 + campo3 + digito3 + campo4 /*+ digito4*/ + campo5;\n\n const dadosBoleto = {\n linhaDigitavel,\n fatorVencimento,\n valor,\n convenio,\n nossoNumero,\n campoLivre,\n digitoGeral,\n codigoBarra,\n numeroDocumento\n };\n\n return dadosBoleto;\n } catch (error) {\n console.log('Falha ao gerar dados do boleto', error);\n return null;\n }\n}\n\nfunction getValor(valor: number) {\n const valorFormatado = valor.toFixed(2).replace(/\\D/g, '');\n return padLeft(valorFormatado, 10);\n}\n\nexport function getNossoNumero(auxiliar: string) {\n let i = 11, j = 10, soma = 0;\n\n while (i >= 1) {\n j--;\n if (j === 1) j = 9;\n const numero = Number(copy(auxiliar, i, i));\n soma += j * numero;\n i--;\n }\n\n const resto = soma % 11;\n const digito = resto < 10 ? String(resto) : 'X';\n const nosso_numero = auxiliar + digito;\n\n return nosso_numero;\n}\n\nfunction getDigitoGeral(texto: string) {\n let i = 43;\n let j = 1;\n let soma = 0;\n\n while (i >= 1) {\n j++;\n if (j === 10) j = 2;\n const valor = Number(copy(texto, i, i));\n soma += j * valor;\n i--;\n }\n\n const resto = soma % 11;\n let digito = 11 - resto;\n if (digito === 0 || digito > 9) digito = 1;\n\n return String(digito);\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFBancoBrasil } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\n\nexport async function gerarPDF({ dados }: IGerarPDFBancoBrasil) {\n try {\n const { dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cpfcnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n dadosPDF.beneficiario.dadosBancario.conta =\n dadosPDF.beneficiario.dadosBancario.conta.padStart(7, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.boleto.codigoBarraImage = codigoBarra.toString('base64');\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cpfcnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj);\n\n dadosPDF.boleto.valorAcrescimo = maskFormat.numberToReal(\n dadosPDF.boleto.valorAcrescimo,\n );\n dadosPDF.boleto.valorCobrado = maskFormat.numberToReal(\n dadosPDF.boleto.valorCobrado,\n );\n dadosPDF.boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDescontoAbatimento,\n );\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n dadosPDF.boleto.valorMulta = maskFormat.numberToReal(dadosPDF.boleto.valorMulta);\n dadosPDF.boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n dadosPDF.boleto.valorOutrasDeducoes,\n );\n\n if (dadosPDF.boleto.quantidade) {\n dadosPDF.boleto.quantidade = maskFormat.numberToReal(dadosPDF.boleto.quantidade);\n }\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucao1 = `COBRAR JUROS DE R$${jurosDia} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.boleto.valor = maskFormat.numberToReal(dadosPDF.boleto.valor);\n dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14;\n const content = compileHbs(getPathTemplates('banco-brasil-boleto.hbs'), dadosPDF);\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n let pdfBase64: string | null = null;\n\n if (!api.defaults.baseURL) {\n throw new Error('BaseURL api not found');\n }\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n pdfBase64 = await decompress(buffer);\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n if (error instanceof Error) {\n return {\n erro: true,\n dados: error.message,\n }\n }\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n","import { format } from 'date-fns';\nimport { IGerarRemessaBancoBrasil } from './types';\nimport { Arquivo } from '@/lib/Arquivo';\nimport { removerCaracterEspecial } from \"@/utils/removerCaracterEspecial\";\nimport { getNossoNumero } from './gerarDadosBoleto';\n\nexport function gerarRemessa({ dados }: IGerarRemessaBancoBrasil) {\n try {\n const {\n dadosBancario,\n beneficiario,\n boletos,\n } = dados.remessa;\n\n const arquivo = new Arquivo();\n const dataAtual = new Date();\n const data = format(dataAtual, 'ddMMyyyy');\n const hora = format(dataAtual, 'HHmmss');\n const remessa = `REM${dadosBancario.numeroRemessa.padStart(5, '0')}.CNAB`;\n\n // header do arquivo\n arquivo.add('001');\n arquivo.add('0000');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(14, '0'));\n arquivo.add(dadosBancario.convenio.padStart(9, '0'));\n arquivo.add('0014');\n arquivo.add(dadosBancario.carteira.padStart(2, '0'));\n arquivo.add(dadosBancario.variacao_carteira.padStart(3, '0'));\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add('BANCO DO BRASIL S.A.'.padEnd(30, ' '));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add('1');\n arquivo.add(data);\n arquivo.add(hora);\n arquivo.add(dadosBancario.numeroRemessa.padStart(6, '0'));\n arquivo.add('030');\n arquivo.add('00000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(11, ' '));\n arquivo.add('CSP');\n arquivo.add('000');\n arquivo.add(' '.padEnd(12, ' '));\n arquivo.addLine();\n\n // header do lote\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('1');\n arquivo.add('R');\n arquivo.add('01');\n arquivo.add(' ')\n arquivo.add('020');\n arquivo.add(' ');\n arquivo.add('2');\n arquivo.add(beneficiario.cnpj.padStart(15, '0'));\n arquivo.add(dadosBancario.convenio.padStart(9, '0'));\n arquivo.add('0014');\n arquivo.add(dadosBancario.carteira.padStart(2, '0'));\n arquivo.add(dadosBancario.variacao_carteira.padStart(3, '0'));\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(removerCaracterEspecial(beneficiario.nome).substring(0, 30).padEnd(30, ' '));\n arquivo.add(' '.padEnd(80, ' '));\n arquivo.add(dadosBancario.numeroRemessa.padStart(8, '0'));\n arquivo.add(data);\n arquivo.add('00000000');\n arquivo.add(' '.padEnd(33, ' '));\n arquivo.addLine();\n\n let sequencia = 0;\n let quantidadeRegistro = 0;\n let total = 0;\n\n for (const boleto of boletos) {\n const convenio = dadosBancario.convenio;\n let nosso_numero: string = '';\n\n if (convenio.length === 6) {\n switch (boleto.tipoDocumento) {\n case 'NFE': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}2`);\n break;\n }\n case 'FAT': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}4`);\n break;\n }\n case 'FIN': {\n nosso_numero = getNossoNumero(`${convenio}${boleto.id_boleto}5`);\n break;\n }\n }\n } else if (convenio.length === 7) {\n switch (boleto.tipoDocumento) {\n case 'NFE': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '2').padStart(10, '0')}`;\n break;\n }\n case 'FAT': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '4').padStart(10, '0')}`;\n break;\n }\n case 'FIN': {\n nosso_numero = `${convenio}${(boleto.id_boleto.toString() + '5').padStart(10, '0')}`;\n break;\n }\n }\n }\n\n const valorJurosDia = dadosBancario.jurosMes > 0\n ? Number(boleto.valor) * dadosBancario.jurosMes / 100 / 30\n : 0;\n\n const { pagador } = boleto;\n const tipoInscricao = pagador.pessoa === 'F' ? '1' : '2';\n\n const vencimento = format(new Date(boleto.vencimento), 'ddMMyyyy');\n total += Number(boleto.valor);\n\n // PROTESTO/NEGATIVAÇÃO\n let protesto = '3';\n let diasProtesto = '00';\n let baixarDevolver = '1';\n let diasBaixa = '000';\n\n switch (dadosBancario.tipo_protesto) {\n case 'Nenhum':\n protesto = '3';\n diasProtesto = '00';\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n case 'Protestar':\n protesto = '1';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n baixarDevolver = '2';\n diasBaixa = '060';\n break;\n case 'Negativar':\n protesto = '8';\n diasProtesto = dadosBancario.diasProtesto.toString().padStart(2, '0');\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n default:\n protesto = '3';\n diasProtesto = '00';\n baixarDevolver = '1';\n diasBaixa = '000';\n break;\n }\n\n // segmento P\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('P');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add(`${dadosBancario.agencia}${dadosBancario.agenciaDigito}`.padStart(5, '0'));\n arquivo.add('00000');\n arquivo.add(`${dadosBancario.conta}${dadosBancario.contaDigito}`.padStart(8, '0'));\n arquivo.add(' ');\n arquivo.add(nosso_numero.padEnd(20, ' '));\n arquivo.add('7'); // codigo carteira\n arquivo.add('1122');\n arquivo.add(`${boleto.numeroDocumento.padStart(6, '0')}-${boleto.parcela.toString().padStart(2, '0')}`.padEnd(15, ' '));\n arquivo.add(vencimento);\n arquivo.add(\n Number(boleto.valor).toFixed(2).replace('.', '').padStart(15, '0'),\n );\n arquivo.add('00000 ');\n arquivo.add('02'); // especie\n arquivo.add(boleto.aceite); // aceite\n arquivo.add(data);\n arquivo.add('1');\n arquivo.add('00000000');\n arquivo.add(valorJurosDia.toFixed(2).replace('.', '').padStart(15, '0'));\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000');\n arquivo.add(boleto.identificacaoTitulo.padEnd(25, ' ')); // identificacao titulo, usar depois (retorno)\n arquivo.add(protesto);\n arquivo.add(diasProtesto);\n arquivo.add(baixarDevolver);\n arquivo.add(diasBaixa);\n arquivo.add('09');\n arquivo.add('0000000000');\n arquivo.add(' ');\n arquivo.addLine();\n\n pagador.endereco.logradouro = `${removerCaracterEspecial(pagador.endereco.logradouro)\n .substring(0, 32)\n .padEnd(32, ' ')}${pagador.endereco.numero.padEnd(8, ' ')}`;\n\n // segmento Q\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('Q');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add(tipoInscricao);\n arquivo.add(pagador.cpfCnpj.padStart(15, '0'));\n arquivo.add(removerCaracterEspecial(pagador.nome).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.logradouro).substring(0, 40).padEnd(40, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.bairro).substring(0, 15).padEnd(15, ' '));\n arquivo.add(pagador.endereco.cep);\n arquivo.add(removerCaracterEspecial(pagador.endereco.municipio).substring(0, 15).padEnd(15, ' '));\n arquivo.add(removerCaracterEspecial(pagador.endereco.uf).padEnd(2, ' '));\n arquivo.add('0');\n arquivo.add('000000000000000');\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add('000');\n arquivo.add(' '.padEnd(28, ' '));\n arquivo.addLine();\n\n dadosBancario.multaAtraso = Number(dadosBancario.multaAtraso || 0);\n if (dadosBancario.multaAtraso > 0) {\n const multa = dadosBancario.multaAtraso.toFixed(2);\n\n // segmento R\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('3');\n arquivo.add((++sequencia).toString().padStart(5, '0'));\n arquivo.add('R');\n arquivo.add(' ');\n arquivo.add('01');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('0');\n arquivo.add('00000000');\n arquivo.add('000000000000000');\n arquivo.add('2');\n arquivo.add(vencimento);\n arquivo.add(multa.replace('.', '').padStart(15, '0'));\n arquivo.add(' '.padEnd(10, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(40, ' '));\n arquivo.add(' '.padEnd(20, ' '));\n arquivo.add('00000000');\n arquivo.add('000');\n arquivo.add('00000');\n arquivo.add(' ');\n arquivo.add('000000000000');\n arquivo.add(' ');\n arquivo.add('0');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.addLine();\n }\n\n quantidadeRegistro++;\n }\n\n // trailer do lote\n arquivo.add('001');\n arquivo.add('0001');\n arquivo.add('5');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add((sequencia + 2).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add('00');\n arquivo.add('000000000000000');\n arquivo.add('000000000000000000000000000000000000000000000000000000000000000000000');\n arquivo.add(' '.padEnd(125, ' '));\n arquivo.addLine();\n\n // trailer do arquivo\n arquivo.add('001');\n arquivo.add('9999');\n arquivo.add('9');\n arquivo.add(' '.padEnd(9, ' '));\n arquivo.add('000001');\n arquivo.add((sequencia + 4).toString().padStart(6, '0'));\n arquivo.add('000000');\n arquivo.add(' '.padEnd(205, ' '));\n arquivo.addLine();\n\n return {\n download: remessa,\n arquivo: arquivo.getArquivo(),\n };\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { IGerarRetornoBancoBrasil, IDocumentoRetornoBancoBrasil } from './types';\nimport { Banco } from '@/types/Boletos';\n\nexport function gerarRetorno({ dados }: IGerarRetornoBancoBrasil) {\n try {\n const { arquivo } = dados;\n const documentos: IDocumentoRetornoBancoBrasil[] = [];\n\n for (let i = 0; i < arquivo.length; i++) {\n let linha = arquivo[i];\n\n const banco = linha.substring(0, 3);\n if (banco !== Banco.BANCO_BRASIL) {\n continue;\n }\n\n const ocorrencia = linha.substring(15, 17);\n if (ocorrencia !== '06' && ocorrencia !== '17') {\n continue;\n }\n\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const meu_numero = linha.substring(105, 130).trimEnd();\n let tipo_documento = 'INDEFINIDO';\n let id_documento = meu_numero;\n\n if (meu_numero.includes('-')) {\n const [tipo, id] = meu_numero.split('-');\n tipo_documento = tipo;\n id_documento = id;\n }\n\n const especie = tipo_documento.length ? tipo_documento : 'INDEFINIDO';\n linha = arquivo[++i];\n segmento = linha.substring(13, 14);\n if (segmento === 'U') {\n const valorAbatimentoString = linha.substring(47, 62);\n const valorAbatimento = Number(valorAbatimentoString) / 100;\n\n const valorDescontoString = linha.substring(32, 47);\n const valorDesconto = Number(valorDescontoString) / 100;\n\n const valorPagoString = linha.substring(77, 92);\n const valorPago = Number(valorPagoString) / 100;\n\n const valorJurosString = linha.substring(17, 32);\n const valorJuros = Number(valorJurosString) / 100;\n\n const valorMulta = 0;\n const descontos = valorAbatimento + valorDesconto;\n const valorTotal = valorPago - valorJuros + descontos;\n\n const documento = {\n id_documento,\n especie,\n valor: valorPago,\n valor_multa: valorMulta,\n valor_juros: valorJuros,\n valor_desconto: valorDesconto,\n valor_total: valorTotal,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n return documentos;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { gerarDadosBoleto } from './gerarDadosBoleto';\nimport { gerarPDF } from './gerarPDF';\nimport { gerarRemessa } from './gerarRemessa';\nimport { gerarRetorno } from './gerarRetorno';\n\nexport const bancoBrasil = {\n gerarDadosBoleto,\n gerarPDF,\n gerarRemessa,\n gerarRetorno,\n};\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarBoleto } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\n\nexport function gerar({ banco, dados }: IGerarBoleto) {\n if (banco === Banco.AILOS) {\n return ailos.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarDadosBoleto({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarDadosBoleto({ banco, dados});\n }\n}\n","import { PDFOptions } from 'puppeteer-core';\nimport BwipJs from 'bwip-js';\nimport { IGerarPDFItau } from './types';\nimport maskFormat from '@/utils/maskFormat';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\nimport { copy } from '@/utils/copy';\n\nexport async function gerarPDF({ dados }: IGerarPDFItau) {\n try {\n const { dadosPDF } = dados;\n\n if (!dadosPDF.pagador.cnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: dadosPDF.boleto.codigoBarra,\n height: 20,\n });\n\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n\n dadosPDF.boleto.linhaDigitavel = maskFormat.codigoBarra(dadosPDF.boleto.linhaDigitavel);\n dadosPDF.beneficiario.cnpj = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpj,\n );\n dadosPDF.beneficiario.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.beneficiario.endereco.cep,\n );\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpj);\n\n const valorDocumento = Number(dadosPDF.boleto.valorDocumento);\n dadosPDF.boleto.valorDocumento = maskFormat.numberToReal(\n dadosPDF.boleto.valorDocumento,\n );\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n\n if (jurosDia > 0) {\n dadosPDF.boleto.instrucoes = [`APÓS O VENCIMENTO, COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA`, ...dadosPDF.boleto.instrucoes];\n }\n\n const descontoVencimento = dadosPDF.beneficiario.dadosBancario.desconto || 0;\n if (descontoVencimento > 0) {\n dadosPDF.boleto.instrucoes = [`ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`, ...dadosPDF.boleto.instrucoes];\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n dadosPDF.boleto.instrucoes = [`MULTA DE ${multaAtraso}%`, ...dadosPDF.boleto.instrucoes];\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n dadosPDF.boleto.instrucoes = [`PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`, ...dadosPDF.boleto.instrucoes];\n }\n\n const content = compileHbs(getPathTemplates('itau-boleto.hbs'), {\n ...dadosPDF,\n boleto: {\n ...dadosPDF.boleto,\n codigoBarraImage: codigoBarra.toString('base64'),\n nossoNumeroDigito: getDigito(`${dadosPDF.beneficiario.dadosBancario.agencia}${dadosPDF.beneficiario.dadosBancario.conta}${dadosPDF.beneficiario.dadosBancario.codigoCarteira}${dadosPDF.boleto.nossoNumero}`),\n }\n });\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n };\n\n const response = await api.post('/', { content, config });\n const buffer = Buffer.from(response.data.pdf);\n const pdfBase64 = await decompress(buffer);\n\n return {\n erro: false,\n dados: pdfBase64,\n };\n } catch (error) {\n console.log(error);\n return {\n erro: true,\n dados: 'Falha ao gerar impressão do boleto',\n };\n }\n}\n\nfunction getDigito(texto: string) {\n let i = texto.length;\n let j = 1;\n let total = 0;\n let soma = 0;\n let digito = 0;\n\n while (i >= 1) {\n j = j === 1 ? 2 : 1;\n\n let valor = Number(copy(texto, i, i));\n total = valor * j;\n\n if (total >= 10) {\n valor = Number(copy(total, 1, 1)) + Number(copy(total, 2, 2));\n } else {\n valor = total;\n }\n\n soma += valor;\n i--;\n }\n\n const uni = Number(copy(soma, String(soma).length, String(soma).length));\n digito = 10 - uni;\n if (digito === 10) digito = 0;\n return String(digito);\n}\n","import { gerarPDF } from \"./gerarPDF\";\n\nexport const itau = {\n gerarPDF,\n};\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarPDF } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\nimport { itau } from \"./banks/itau\";\n\nexport function pdf({ banco, dados }: IGerarPDF) {\n if (banco === Banco.AILOS) {\n return ailos.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarPDF({ banco, dados });\n }\n\n if (banco === Banco.ITAU) {\n return itau.gerarPDF({ banco, dados });\n }\n}\n","import { ailos } from \"@/banks/ailos\";\nimport { Banco, IGerarRemessa } from \"./types/Boletos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { sicoob } from \"@/banks/sicoob\";\nimport { bancoBrasil } from \"./banks/banco-brasil\";\n\nexport function remessa({ banco, dados }: IGerarRemessa) {\n if (banco === Banco.AILOS) {\n return ailos.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarRemessa({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarRemessa({ banco, dados });\n }\n}\n","import { Banco, IGerarRetorno } from \"./types/Boletos\";\nimport { ailos } from \"@/banks/ailos\";\nimport { bradesco } from \"@/banks/bradesco\";\nimport { sicredi } from \"@/banks/sicredi\";\nimport { bancoBrasil } from \"@/banks/banco-brasil\";\nimport { sicoob } from \"@/banks/sicoob\";\n\nexport function retorno({ banco, dados }: IGerarRetorno) {\n if (banco === Banco.AILOS) {\n return ailos.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.BRADESCO) {\n return bradesco.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.SICREDI) {\n return sicredi.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.BANCO_BRASIL) {\n return bancoBrasil.gerarRetorno({ banco, dados });\n }\n\n if (banco === Banco.SICOOB) {\n return sicoob.gerarRetorno({ banco, dados });\n }\n}\n","import { api } from \"../services/api\";\n\ninterface IConfig {\n apiClient?: {\n url?: string;\n authorization?: string;\n }\n}\n\nexport function defineConfig({ apiClient }: IConfig) {\n if (apiClient) {\n const { authorization, url } = apiClient;\n\n if (url) api.defaults.baseURL = url;\n if (authorization) api.defaults.headers.common.Authorization = authorization;\n }\n}\n","import { gerar } from './gerar';\nimport { pdf } from './pdf';\nimport { remessa } from './remessa';\nimport { retorno } from './retorno';\n\nexport { defineConfig } from './config';\nexport { Banco } from './types/Boletos';\n\nexport default {\n gerar,\n pdf,\n remessa,\n retorno,\n}\n"],"mappings":"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","names":["retorno","codigoBarra","formatter","codigoBarra","remessa","Banco","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","addDays","format","gerarRemessa","format","remessa","addDays","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getNossoNumero","getValor","getDigitoGeral","codigoBarra","getDigito","addDays","format","gerarRemessa","format","remessa","addDays","BwipJs","StringMask","gerarPDF","codigoBarra","BwipJs","StringMask","gerarRetorno","gerarDadosBoleto","gerarRemessa","gerarPDF","gerarRetorno","gerarDadosBoleto","getValor","getNossoNumero","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","format","remessa","getNossoNumero","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","BwipJs","gerarPDF","codigoBarra","BwipJs","getDigito","gerarPDF"]}
|