@plasoft/boletos 1.0.66 → 1.0.67

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.
@@ -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/utils/agruparRetorno.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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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\n const desconto = boleto.desconto > 0\n ? boleto.desconto.toFixed(2)\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 { parse } from 'date-fns';\nimport { IGerarRetornoAilos, IDocumentoRetornoAilos } from './types';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\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 let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(157, 165);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 data: dataCredito,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoAilos>(documentos);\n return documentoAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n","import { format } from \"date-fns\";\n\nexport function agruparRetorno<T extends { data: Date | string }>(documentos: T[]) {\n return documentos.reduce((acc: Record<string, T[]>, documento) => {\n const dataKey = format(new Date(documento.data), 'yyyy-MM-dd');\n if (!acc[dataKey]) {\n acc[dataKey] = [];\n }\n acc[dataKey].push(documento);\n return acc;\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 { agruparRetorno } from '@/utils/agruparRetorno';\nimport { 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 data: new Date(),\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoBradesco>(documentos);\n return documentoAgrupado;\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.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\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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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('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 (boleto.desconto) {\n desconto = boleto.desconto.toFixed(2).replace('.', '').padStart(13, '0');\n dataDesconto = format(new Date(boleto.vencimento), 'ddMMyy');\n }\n\n if (!boleto.desconto && 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 { agruparRetorno } from '@/utils/agruparRetorno';\nimport { IGerarRetornoSicredi, IDocumentoRetornoSicredi } from './types';\nimport { parse } from 'date-fns';\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 let dataCredito: Date;\n // Data de crédito no formato AAAAMMDD\n const dataCreditoString = linha.substring(328, 336);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'yyyyMMdd', new Date());\n } else {\n // Data de ocorrência no formato DDMMAA\n const dataOcorrenciaString = linha.substring(110, 116);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyy', new Date());\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 data: dataCredito\n });\n }\n\n const documentosAgrupado = agruparRetorno<IDocumentoRetornoSicredi>(documentos);\n return documentosAgrupado;\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 { parse } from 'date-fns';\nimport { IGerarRetornoSicoob, IDocumentoRetornoSicoob } from './types';\nimport { Banco } from '@/types/Boletos';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\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 // Data de crédito no formato DDMMYYYY\n let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(137, 145);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 data: dataCredito,\n };\n\n documentos.push(documento);\n }\n }\n }\n \n const documentoAgrupado = agruparRetorno<IDocumentoRetornoSicoob>(documentos);\n return documentoAgrupado;\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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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 const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto = boleto.desconto > 0\n ? boleto.desconto.toFixed(2)\n : dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\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(codigoDesconto);\n arquivo.add(codigoDesconto == '2' ? vencimento : '00000000');\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\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 { parse } from 'date-fns';\nimport { IGerarRetornoBancoBrasil, IDocumentoRetornoBancoBrasil } from './types';\nimport { Banco } from '@/types/Boletos';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\n\n// C044 CODIGO MOVIMENTO RETORNO\n// C047 TEM A LISTA DE RETORNOS DO BANCO DO BRASIL\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' || ocorrencia === '03') {\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const motivo = linha.substring(213, 223).trim();\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 let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(137, 145);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 let rejeitado = false;\n let motivoRejeicao = '';\n\n if (ocorrencia === '03') {\n rejeitado = true;\n motivoRejeicao = retornaMotivoRejeicao(motivo);\n }\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 data: dataCredito,\n rejeitado,\n motivo: motivoRejeicao\n };\n\n documentos.push(documento);\n }\n }\n }\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoBancoBrasil>(documentos);\n console.log(documentoAgrupado);\n return documentoAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMotivoRejeicao(codigo: string): string {\n switch (codigo) {\n case '01':\n return 'Código do Banco Inválido';\n case '02':\n return 'Código do Registro Detalhe Inválido';\n case '03':\n return 'Código do Segmento Inválido';\n case '04':\n return 'Código de Movimento Não Permitido para Carteira';\n case '05':\n return 'Código de Movimento Inválido';\n case '06':\n return 'Tipo/Número de Inscrição do Beneficiário Inválidos';\n case '07':\n return 'Agência/Conta/DV Inválido';\n case '08':\n return 'Nosso Número Inválido';\n case '09':\n return 'Nosso Número Duplicado';\n case '10':\n return 'Carteira Inválida';\n case '11':\n return 'Forma de Cadastramento do Título Inválido';\n case '12':\n return 'Tipo de Documento Inválido';\n case '13':\n return 'Identificação da Emissão do Boleto de Pagamento Inválida';\n case '14':\n return 'Identificação da Distribuição do Boleto de Pagamento Inválida';\n case '15':\n return 'Características da Cobrança Incompatíveis';\n case '16':\n return 'Data de Vencimento Inválida';\n case '17':\n return 'Data de Vencimento Anterior a Data de Emissão';\n case '18':\n return 'Vencimento Fora do Prazo de Operação';\n case '19':\n return 'Título a Cargo de Bancos Correspondentes com Vencimento Inferior a XX Dias';\n case '20':\n return 'Valor do Título Inválido';\n case '21':\n return 'Espécie do Título Inválida';\n case '22':\n return 'Espécie do Título Não Permitida para a Carteira';\n case '23':\n return 'Aceite Inválido';\n case '24':\n return 'Data da Emissão Inválida';\n case '25':\n return 'Data da Emissão Posterior a Data de Entrada';\n case '26':\n return 'Código de Juros de Mora Inválido';\n case '27':\n return 'Valor/Taxa de Juros de Mora Inválido';\n case '28':\n return 'Código do Desconto Inválido';\n case '29':\n return 'Valor do Desconto Maior ou Igual ao Valor do Título';\n case '30':\n return 'Desconto a Conceder Não Confere';\n case '31':\n return 'Concessão de Desconto - Já Existe Desconto Anterior';\n case '32':\n return 'Valor do IOF Inválido';\n case '33':\n return 'Valor do Abatimento Inválido';\n case '34':\n return 'Valor do Abatimento Maior ou Igual ao Valor do Título';\n case '35':\n return 'Valor a Conceder Não Confere';\n case '36':\n return 'Concessão de Abatimento - Já Existe Abatimento Anterior';\n case '37':\n return 'Código para Protesto Inválido';\n case '38':\n return 'Prazo para Protesto Inválido';\n case '39':\n return 'Pedido de Protesto Não Permitido para o Título';\n case '40':\n return 'Título com Ordem de Protesto Emitida';\n case '41':\n return 'Pedido de Cancelamento/Sustação para Títulos sem Instrução de Protesto';\n case '42':\n return 'Código para Baixa/Devolução Inválido';\n case '43':\n return 'Prazo para Baixa/Devolução Inválido';\n case '44':\n return 'Código da Moeda Inválido';\n case '45':\n return 'Nome do Pagador Não Informado';\n case '46':\n return 'Tipo/Número de Inscrição do Pagador Inválidos';\n case '47':\n return 'Endereço do Pagador Não Informado';\n case '48':\n return 'CEP Inválido';\n case '49':\n return 'CEP Sem Praça de Cobrança (Não Localizado)';\n case '50':\n return 'CEP Referente a um Banco Correspondente';\n case '51':\n return 'CEP incompatível com a Unidade da Federação';\n case '52':\n return 'Unidade da Federação Inválida';\n case '53':\n return 'Tipo/Número de Inscrição do Sacador/Avalista Inválidos';\n case '54':\n return 'Sacador/Avalista Não Informado';\n case '55':\n return 'Nosso número no Banco Correspondente Não Informado';\n case '56':\n return 'Código do Banco Correspondente Não Informado';\n case '57':\n return 'Código da Multa Inválido';\n case '58':\n return 'Data da Multa Inválida';\n case '59':\n return 'Valor/Percentual da Multa Inválido';\n case '60':\n return 'Movimento para Título Não Cadastrado';\n case '61':\n return 'Alteração da Agência Cobradora/DV Inválida';\n case '62':\n return 'Tipo de Impressão Inválido';\n case '63':\n return 'Entrada para Título já Cadastrado';\n case '64':\n return 'Número da Linha Inválido';\n case '65':\n return 'Código do Banco para Débito Inválido';\n case '66':\n return 'Agência/Conta/DV para Débito Inválido';\n case '67':\n return 'Dados para Débito incompatível com a Identificação da Emissão do Boleto de Pagamento';\n case '68':\n return 'Débito Automático Agendado';\n case '69':\n return 'Débito Não Agendado - Erro nos Dados da Remessa';\n case '70':\n return 'Débito Não Agendado - Pagador Não Consta do Cadastro de Autorizante';\n case '71':\n return 'Débito Não Agendado - Beneficiário Não Autorizado pelo Pagador';\n case '72':\n return 'Débito Não Agendado - Beneficiário Não Participa da Modalidade Débito Automático';\n case '73':\n return 'Débito Não Agendado - Código de Moeda Diferente de Real (R$)';\n case '74':\n return 'Débito Não Agendado - Data Vencimento Inválida';\n case '75':\n return 'Débito Não Agendado, Conforme seu Pedido, Título Não Registrado';\n case '76':\n return 'Débito Não Agendado, Tipo/Num. Inscrição do Debitado, Inválido';\n case '77':\n return 'Transferência para Desconto Não Permitida para a Carteira do Título';\n case '78':\n return 'Data Inferior ou Igual ao Vencimento para Débito Automático';\n case '79':\n return 'Data Juros de Mora Inválido';\n case '80':\n return 'Data do Desconto Inválida';\n case '81':\n return 'Tentativas de Débito Esgotadas - Baixado';\n case '82':\n return 'Tentativas de Débito Esgotadas - Pendente';\n case '83':\n return 'Limite Excedido';\n case '84':\n return 'Número Autorização Inexistente';\n case '85':\n return 'Título com Pagamento Vinculado';\n case '86':\n return 'Seu Número Inválido';\n case '87':\n return 'e-mail/SMS enviado';\n case '88':\n return 'e-mail Lido';\n case '89':\n return 'e-mail/SMS devolvido - endereço de e-mail ou número do celular incorreto';\n case '90':\n return 'e-mail devolvido - caixa postal cheia';\n case '91':\n return 'e-mail/número do celular do Pagador não informado';\n case '92':\n return 'Pagador optante por Boleto de Pagamento Eletrônico - e-mail não enviado';\n case '93':\n return 'Código para emissão de Boleto de Pagamento não permite envio de e-mail';\n case '94':\n return 'Código da Carteira inválido para envio e-mail.';\n case '95':\n return 'Contrato não permite o envio de e-mail';\n case '96':\n return 'Número de contrato inválido';\n case '97':\n return 'Rejeição da alteração do prazo limite de recebimento (a data deve ser informada no campo 28.3.p)';\n case '98':\n return 'Rejeição de dispensa de prazo limite de recebimento';\n case '99':\n return 'Rejeição da alteração do número do título dado pelo Beneficiário';\n case 'A1':\n return 'Rejeição da alteração do número controle do participante';\n case 'A2':\n return 'Rejeição da alteração dos dados do Pagador';\n case 'A3':\n return 'Rejeição da alteração dos dados do Sacador/avalista';\n case 'A4':\n return 'Pagador DDA';\n case 'A5':\n return 'Registro Rejeitado – Título já Liquidado';\n case 'A6':\n return 'Código do Convenente Inválido ou Encerrado';\n case 'A7':\n return 'Título já se encontra na situação Pretendida';\n case 'A8':\n return 'Valor do Abatimento inválido para cancelamento';\n case 'A9':\n return 'Não autoriza pagamento parcial';\n case 'B1':\n return 'Autoriza recebimento parcial';\n case 'B2':\n return 'Valor Nominal do Título Conflitante';\n case 'B3':\n return 'Tipo de Pagamento Inválido';\n case 'B4':\n return 'Valor Máximo/Percentual Inválido';\n case 'B5':\n return 'Valor Mínimo/Percentual Inválido';\n default:\n return 'Código de rejeição desconhecido';\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.cnpjCpf) {\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.cnpjCpf = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpjCpf,\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.cnpjCpf = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpjCpf);\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\n// TYPES RETORNO BOLETOS\nexport { IDocumentoRetornoBancoBrasil } from './banks/banco-brasil/types';\nexport { IDocumentoRetornoSicoob } from './banks/sicoob/types';\nexport { IDocumentoRetornoAilos } from './banks/ailos/types';\nexport { IDocumentoRetornoSicredi } from './banks/sicredi/types';\n\nexport default {\n gerar,\n pdf,\n remessa,\n retorno,\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,QAAQ,QAAyB,SAAiB;AAChE,WAAS,OAAO,MAAM;AACtB,MAAI,OAAO,SAAS,SAAS;AAC3B,aAAS,IAAI,MAAM;AACnB,WAAO,QAAQ,QAAQ,OAAO;AAAA,EAChC;AACA,SAAO;AACT;;;ACPO,SAAS,KACd,OACA,eACA,aACA;AACA,MAAIA,WAAU;AAEd,MAAI,OAAO,UAAU;AAAU,YAAQ,OAAO,KAAK;AACnD,MAAI,CAAC;AAAa,kBAAc,MAAM;AAEtC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,QAAQ,IAAI;AAElB,QAAI,SAAS,iBAAiB,SAAS,aAAa;AAClD,YAAM,QAAQ,MAAM,CAAC;AACrB,MAAAA,YAAW;AAAA,IACb;AAAA,EACF;AAEA,SAAOA;AACT;;;ACpBA,SAAS,wBAAwB;AAE1B,SAAS,mBAAmB,YAA2B;AAC5D,eAAa,IAAI,KAAK,UAAU;AAChC,MAAI,cAAc,IAAI,KAAK,MAAM,GAAG,EAAE,GAAG;AACvC,WAAO,iBAAiB,IAAI,KAAK,UAAU,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,SAAS;AAAA,EAChF,OAAO;AACL,WAAO,iBAAiB,IAAI,KAAK,UAAU,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS;AAAA,EAC/E;AACF;;;ACJO,SAAS,iBAAiB,EAAE,MAAM,GAAsB;AAC7D,MAAI;AACF,UAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,YAAQ,QAAQ,OAAO,QAAQ,KAAK;AAEpC,UAAM,kBAAkB,mBAAmB,QAAQ,UAAU;AAC7D,UAAM,QAAQ,SAAS,QAAQ,KAAK;AACpC,UAAM,WAAW,QAAQ,SAAS,UAAU,CAAC;AAC7C,UAAM,kBAAkB,QAAQ,GAAG,QAAQ,SAAS,IAAI,CAAC;AACzD,UAAM,cAAc,QAAQ,SAAS,SAAS,SAAS,WAAW,CAAC,IAAI;AAEvE,UAAM,aAAa,WAAW,cAAc,QAAQ,SAAS,UAAU,CAAC;AACxE,UAAM,cAAc,eAAe,OAAO,eAAe,GAAG,KAAK,GAAG,UAAU,EAAE;AAChF,UAAMC,eAAc,OAAO,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,UAAU;AAE7E,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAC3F,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC;AACrC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAEjE,UAAM,UAAU,UAAU,MAAM;AAChC,UAAM,UAAU,UAAU,MAAM;AAChC,UAAM,UAAU,UAAU,MAAM;AAGhC,UAAM,iBAAiB,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU,SAAuB;AAEvG,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,kCAAkC,KAAK;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,OAAe;AAC/B,QAAM,iBAAiB,MAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE;AACzD,SAAO,QAAQ,gBAAgB,EAAE;AACnC;AAEA,SAAS,eAAe,OAAe;AACrC,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb;AAEA,QAAI,MAAM;AAAI,UAAI;AAElB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AAEZ;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAC5B,WAAS,KAAK;AAEd,MAAI,WAAW,KAAK,WAAW,KAAK,SAAS;AAAG,aAAS;AAEzD,SAAO,OAAO,MAAM;AACtB;AAEA,SAAS,UAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;AC7GA,OAAO,YAAY;;;ACDnB,OAAO,gBAAgB;AAEhB,SAAS,wBAAwB,SAAiB;AACvD,OAAI,mCAAS,WAAU,IAAI;AACzB,UAAMC,aAAY,IAAI,WAAW,gBAAgB;AACjD,WAAOA,WAAU,MAAM,OAAO;AAAA,EAChC;AAEA,QAAM,YAAY,IAAI,WAAW,oBAAoB;AACrD,SAAO,UAAU,MAAM,OAAO;AAChC;AAEO,SAAS,oBAAoB,KAAa;AAC/C,QAAM,YAAY,IAAI,WAAW,WAAW;AAC5C,SAAO,UAAU,MAAM,GAAG;AAC5B;AAGO,SAAS,aAAa,QAAa;AACxC,WAAS,OAAO,WAAW,WAAW,WAAW,MAAM,IAAI;AAC3D,WAAS,OAAO,QAAQ,CAAC,EAAE,MAAM,GAAG;AACpC,SAAO,CAAC,IAAI,OAAO,CAAC,EAAE,MAAM,eAAe,EAAE,KAAK,GAAG;AACrD,SAAO,OAAO,KAAK,GAAG;AACxB;AAEO,SAAS,YAAY,QAAgB;AAC1C,QAAM,YAAY,IAAI,WAAW,yDAAyD;AAC1F,SAAO,UAAU,MAAM,MAAM;AAC/B;AAEA,IAAO,qBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnCA,OAAO,SAAS;AAChB,OAAO,QAAQ;AAER,SAAS,WAAW,cAAsB,MAAY;AAC3D,QAAM,OAAO,GAAG,aAAa,cAAc,OAAO;AAClD,QAAM,UAAU,IAAI,QAAQ,IAAI,EAAE,IAAI;AAEtC,SAAO;AACT;;;ACRA,OAAO,UAAU;AAEV,SAAS,iBAAiB,UAAkB;AACjD,MAAI,QAAQ,IAAI,aAAa,OAAO;AAClC,WAAO,KAAK,QAAQ,QAAQ,IAAI,GAAG,SAAS,QAAQ;AAAA,EACtD;AAEA,SAAO,KAAK,QAAQ,WAAW,QAAQ;AACzC;;;ACRA,OAAO;AACP,OAAO,WAAW;AAEX,IAAM,MAAM,MAAM,OAAO;AAAA,EAC9B,SAAS,QAAQ,IAAI,WAAW;AAClC,CAAC;;;ACLD,YAAY,UAAU;AAgBtB,SAAS,WAAW,OAAgC;AAClD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,IAAK,YAAO,OAAO,CAAC,OAAO,WAAW;AACpC,UAAI,OAAO;AACT,eAAO,OAAO,KAAK;AAAA,MACrB;AACA,cAAQ,OAAO,SAAS,CAAC;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AACH;;;ALhBA,SAAsB,SAAS,IAA2B;AAAA,6CAA3B,EAAE,MAAM,GAAmB;AACxD,QAAI;AACF,YAAM,EAAE,aAAa,SAAS,IAAI;AAElC,UAAI,CAAC,SAAS,QAAQ,SAAS;AAC7B,cAAM,IAAI,MAAM,0CAAqC;AAAA,MACvD;AAEA,YAAMC,eAAc,MAAM,OAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,cAAc,UAClC,SAAS,aAAa,cAAc,QAAQ,SAAS,GAAG,GAAG;AAC7D,eAAS,aAAa,cAAc,QAClC,SAAS,aAAa,cAAc,MAAM,SAAS,GAAG,GAAG;AAE3D,eAAS,OAAO,iBAAiB,mBAAW,YAAY,SAAS,OAAO,cAAc;AACtF,eAAS,OAAO,mBAAmBA,aAAY,SAAS,QAAQ;AAChE,eAAS,aAAa,OAAO,mBAAW;AAAA,QACtC,SAAS,aAAa;AAAA,MACxB;AACA,eAAS,aAAa,SAAS,MAAM,mBAAW;AAAA,QAC9C,SAAS,aAAa,SAAS;AAAA,MACjC;AACA,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AACA,eAAS,QAAQ,UAAU,mBAAW,wBAAwB,SAAS,QAAQ,OAAO;AAEtF,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,eAAe,mBAAW;AAAA,QACxC,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,0BAA0B,mBAAW;AAAA,QACnD,SAAS,OAAO;AAAA,MAClB;AACA,YAAM,iBAAiB,OAAO,SAAS,OAAO,cAAc;AAC5D,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAC/E,eAAS,OAAO,sBAAsB,mBAAW;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAEA,UAAI,SAAS,OAAO,YAAY;AAC9B,iBAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAAA,MACjF;AAEA,YAAM,WAAW,SAAS,aAAa,cAAc;AACrD,YAAM,WAAY,WAAW,MAAM,KAAM;AACzC,UAAI,WAAW,GAAG;AAChB,iBAAS,OAAO,aAAa,qBAAqB,mBAAW,aAAa,QAAQ,CAAC;AAAA,MACrF;AAEA,YAAM,qBAAqB,SAAS,OAAO,WAAW,IAClD,SAAS,OAAO,WAChB,SAAS,aAAa,cAAc,WAAW,IAC7C,SAAS,aAAa,cAAc,WACpC;AACN,UAAI,qBAAqB,GAAG;AAC1B,iBAAS,OAAO,aAAa,6CAA0C,kBAAkB;AAAA,MAC3F;AAEA,YAAM,cAAc,SAAS,aAAa,cAAc,SAAS;AACjE,UAAI,cAAc,GAAG;AACnB,iBAAS,OAAO,aAAa,YAAY,WAAW;AAAA,MACtD;AAEA,YAAM,eAAe,SAAS,aAAa,cAAc,YAAY;AACrE,UAAI,eAAe,GAAG;AACpB,iBAAS,OAAO,aAAa,qBAAkB,YAAY;AAAA,MAC7D;AAEA,eAAS,OAAO,QAAQ,mBAAW,aAAa,SAAS,OAAO,KAAK;AACrE,eAAS,QAAQ,SAAS,SAAS,QAAQ,QAAQ,SAAS;AAC5D,YAAM,UAAU,WAAW,iBAAiB,kBAAkB,GAAG,QAAQ;AAEzE,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,UAAI,YAA2B;AAE/B,UAAI,aAAa;AACf,oBAAY,MAAM,YAAY,SAAS,MAAM;AAAA,MAC/C,OAAO;AACL,YAAI,CAAC,IAAI,SAAS,SAAS;AACzB,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AAEA,cAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,cAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,oBAAY,MAAM,WAAW,MAAM;AAAA,MACrC;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,UAAI,iBAAiB,OAAO;AAC1B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;;;AMlIA,SAAS,SAAS,cAAc;;;ACAzB,IAAM,UAAN,MAAc;AAAA,EAGnB,cAAc;AAFd,mBAAU;AAGR,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,IAAI,OAAe;AACjB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,aAAa;AACX,WAAO,KAAK;AAAA,EACd;AACF;;;AClBO,SAAS,wBAAwB,OAAe;AACrD,MAAI,CAAC;AAAO,WAAO;AAGnB,MAAI,iBAAiB,MAAM,QAAQ,qCAAqC,EAAE;AAG1E,mBAAiB,eAAe,QAAQ,YAAY,GAAG;AACvD,mBAAiB,eAAe,QAAQ,YAAY,GAAG;AACvD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,YAAY,GAAG;AACvD,mBAAiB,eAAe,QAAQ,YAAY,GAAG;AACvD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,WAAW,GAAG;AACtD,mBAAiB,eAAe,QAAQ,MAAM,GAAG;AACjD,mBAAiB,eAAe,QAAQ,MAAM,GAAG;AAGjD,mBAAiB,eAAe,QAAQ,qBAAqB,GAAG;AAEhE,SAAO;AACT;;;AFnBO,SAAS,aAAa,EAAE,MAAM,GAAuB;AAC1D,MAAI;AACF,UAAM,EAAE,eAAe,cAAc,QAAQ,IAAI,MAAM;AAEvD,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,YAAY,oBAAI,KAAK;AAC3B,UAAM,OAAO,OAAO,WAAW,UAAU;AACzC,UAAM,OAAO,OAAO,WAAW,QAAQ;AAEvC,UAAM,WAAW,cAAc,SAAS,SAAS,GAAG,GAAG;AACvD,UAAM,SACJ,cAAc,MAAM,SAAS,GAAG,GAAG,IAAI,cAAc;AAEvD,UAAMC,WAAU,MAAM,QAAQ,IAAI,MAAM,IAAI,IAAI;AAGhD,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,WAAW;AACvB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,IAAI;AAC7B,YAAQ,IAAI,cAAc,SAAS,OAAO,IAAI,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,aAAa;AACvC,YAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,YAAQ,IAAI,cAAc,WAAW;AACrC,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,QAAQ,OAAO,IAAI,GAAG,CAAC;AACnC,YAAQ,IAAI,YAAY;AACxB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,YAAQ,QAAQ;AAGhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC;AAC/C,YAAQ,IAAI,cAAc,SAAS,OAAO,IAAI,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,aAAa;AACvC,YAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,YAAQ,IAAI,cAAc,WAAW;AACrC,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,YAAQ,QAAQ;AAEhB,QAAI,YAAY;AAChB,QAAI,qBAAqB;AACzB,QAAI,QAAQ;AAGZ,eAAW,UAAU,SAAS;AAC5B,YAAM,EAAE,QAAQ,IAAI;AACpB,YAAM,aAAa,OAAO,IAAI,KAAK,OAAO,UAAU,GAAG,UAAU;AACjE,eAAS,OAAO,OAAO,KAAK;AAG5B,YAAM,aAAa,cAAc,WAAW,IAAI,MAAM;AACtD,YAAM,QACJ,cAAc,WAAW,IACrB,cAAc,SAAS,QAAQ,CAAC,IAChC;AAGN,YAAM,kBAAkB;AAAA,QACtB,QAAQ,IAAI,KAAK,OAAO,UAAU,GAAG,CAAC;AAAA,QACtC;AAAA,MACF;AACA,YAAM,iBAAiB,cAAc,oBAAoB,IAAI,MAAM;AAEnE,YAAM,WAAW,OAAO,WAAW,IAC/B,OAAO,SAAS,QAAQ,CAAC,IACzB,cAAc,oBAAoB,IAChC,cAAc,kBAAkB,QAAQ,CAAC,IACzC;AAEN,UAAI,eAAe;AACnB,UAAI,WAAW;AAEf,cAAQ,cAAc,eAAe;AAAA,QACnC,KAAK;AACH,qBAAW;AACX,yBAAe;AACf;AAAA,QACF,KAAK;AACH,qBAAW;AACX,yBAAe,cAAc,aAAa,SAAS,EAAE,SAAS,GAAG,GAAG;AACpE;AAAA,QACF,KAAK;AACH,qBAAW;AACX,yBAAe,cAAc,aAAa,SAAS,EAAE,SAAS,GAAG,GAAG;AACpE;AAAA,QACF;AACE,qBAAW;AACX,yBAAe;AACf;AAAA,MACJ;AAEA,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,aAAa;AACvC,cAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,cAAQ,IAAI,cAAc,WAAW;AACrC,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,OAAO,YAAY,OAAO,IAAI,GAAG,CAAC;AAC9C,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG,OAAO,eAAe,IAAI,OAAO,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC;AACzE,cAAQ,IAAI,UAAU;AACtB,cAAQ;AAAA,QACN,OAAO,OAAO,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,MACnE;AACA,cAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,aAAa;AACvC,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,OAAO,MAAM;AACzB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,eAAe;AAC3B,cAAQ,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACpD,cAAQ,IAAI,cAAc;AAC1B,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,SAAS,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACvD,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,OAAO,oBAAoB,OAAO,IAAI,GAAG,CAAC;AACtD,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AAEf,cAAQ,QAAQ;AAGhB,UAAI,gBAAgB;AAEpB,UAAI,QAAQ,WAAW,KAAK;AAC1B,wBAAgB;AAAA,MAClB,OAAO;AACL,wBAAgB;AAAA,MAClB;AAEA,cAAQ,SAAS,aAAa,GAC5B,wBAAwB,QAAQ,SAAS,UAAU,EAClD,UAAU,GAAG,EAAE,EACf,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,SAAS,OAAO,OAAO,GAAG,GAAG,CAAC;AAE3D,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,aAAa;AACzB,cAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;AAC7C,cAAQ,IAAI,wBAAwB,QAAQ,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAClF,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACjG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAC7F,cAAQ,IAAI,QAAQ,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,cAAQ,IAAI,QAAQ,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAChG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC;AACvE,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAE9B,cAAQ,QAAQ;AAEhB,oBAAc,cAAc,OAAO,cAAc,eAAe,CAAC;AACjE,UAAI,cAAc,cAAc,GAAG;AACjC,cAAM,QAAQ,cAAc,YAAY,QAAQ,CAAC;AAGjD,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,MAAM;AAClB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACpD,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,OAAO;AACnB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,cAAc;AAC1B,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,WAAW;AAEvB,gBAAQ,QAAQ;AAAA,MAClB;AACA;AAAA,IACF;AAGA,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,mBAAmB,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC1D,YAAQ,IAAI,MAAM,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAC/D,YAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,YAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,YAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,YAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,YAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,YAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,YAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,YAAQ,IAAI,IAAI,SAAS,KAAK,GAAG,CAAC;AAElC,YAAQ,QAAQ;AAGhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,QAAQ;AACpB,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,QAAQ;AACpB,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAEhC,WAAO;AAAA,MACL,UAAUA;AAAA,MACV,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;AGlSA,SAAS,aAAa;;;ACAtB,SAAS,UAAAC,eAAc;AAEhB,SAAS,eAAkD,YAAiB;AACjF,SAAO,WAAW,OAAO,CAAC,KAA0B,cAAc;AAChE,UAAM,UAAUA,QAAO,IAAI,KAAK,UAAU,IAAI,GAAG,YAAY;AAC7D,QAAI,CAAC,IAAI,OAAO,GAAG;AACjB,UAAI,OAAO,IAAI,CAAC;AAAA,IAClB;AACA,QAAI,OAAO,EAAE,KAAK,SAAS;AAC3B,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ADPO,SAAS,aAAa,EAAE,MAAM,GAAsB;AACzD,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,aAAuC,CAAC;AAE9C,QAAI,QAAQ;AAEZ,eAAW,QAAQ,SAAS;AAC1B,UAAI,QAAQ;AAEZ,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC;AAClC,YAAM,gBAAgB,MAAM,UAAU,IAAI,EAAE;AAE5C,WACG,UAAU,SAAS,UAAU,WAC7B,kBAAkB,QAAQ,kBAAkB,OAC7C;AACA,YAAI,WAAW,MAAM,UAAU,IAAI,EAAE;AAErC,YAAI,aAAa,KAAK;AACpB,gBAAM,WAAW,MAAM,UAAU,KAAK,GAAG,EAAE,QAAQ;AAEnD,cAAI,gBAAwB;AAC5B,cAAI,cAAsB;AAE1B,cAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,kBAAM,CAAC,SAAS,KAAK,IAAI,SAAS,MAAM,GAAG;AAC3C,4BAAgB;AAChB,0BAAc;AAAA,UAChB;AAEA,gBAAM,UAAU,cAAc,SAAS,gBAAgB;AAEvD,kBAAQ,QAAQ,QAAQ,CAAC;AACzB,qBAAW,MAAM,UAAU,IAAI,EAAE;AAEjC,cAAI,aAAa,KAAK;AACpB,gBAAI;AACJ,kBAAM,oBAAoB,MAAM,UAAU,KAAK,GAAG;AAClD,gBAAI,qBAAqB,sBAAsB,YAAY;AACzD,4BAAc,MAAM,mBAAmB,YAAY,oBAAI,KAAK,CAAC;AAAA,YAC/D,OAAO;AACL,oBAAM,uBAAuB,MAAM,UAAU,KAAK,GAAG;AACrD,4BAAc,MAAM,sBAAsB,YAAY,oBAAI,KAAK,CAAC;AAAA,YAClE;AAEA,kBAAM,wBAAwB,MAAM,UAAU,IAAI,EAAE;AACpD,kBAAM,kBAAkB,OAAO,qBAAqB,IAAI;AAExD,kBAAM,sBAAsB,MAAM,UAAU,IAAI,EAAE;AAClD,kBAAM,gBAAgB,OAAO,mBAAmB,IAAI;AAEpD,kBAAM,kBAAkB,MAAM,UAAU,IAAI,EAAE;AAC9C,kBAAM,YAAY,OAAO,eAAe,IAAI;AAE5C,kBAAM,mBAAmB,MAAM,UAAU,IAAI,EAAE;AAC/C,kBAAM,aAAa,OAAO,gBAAgB,IAAI;AAE9C,kBAAM,aAAa;AACnB,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,aAAa,YAAY,aAAa;AAE5C,kBAAM,YAAY;AAAA,cAChB,cAAc;AAAA,cACd;AAAA,cACA,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,gBAAgB;AAAA,cAChB,aAAa;AAAA,cACb,MAAM;AAAA,YACR;AAEA,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAEA,UAAM,oBAAoB,eAAuC,UAAU;AAC3E,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;AEtFO,IAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC0BO,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,OAAA,WAAQ;AACR,EAAAA,OAAA,cAAW;AACX,EAAAA,OAAA,aAAU;AACV,EAAAA,OAAA,YAAS;AACT,EAAAA,OAAA,kBAAe;AACf,EAAAA,OAAA,UAAO;AANG,SAAAA;AAAA,GAAA;;;AC/BL,SAASC,kBAAiB,EAAE,MAAM,GAAyB;AAChE,MAAI;AACF,UAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,YAAQ,QAAQ,OAAO,QAAQ,KAAK;AAEpC,UAAM,kBAAkB,mBAAmB,QAAQ,UAAU;AAC7D,UAAM,QAAQC,UAAS,QAAQ,KAAK;AACpC,UAAM,WAAW,QAAQ,SAAS,UAAU,CAAC;AAC7C,UAAM,kBAAkB,QAAQ,GAAG,QAAQ,SAAS,IAAI,CAAC;AACzD,UAAM,cACJ,QAAQ,SAAS,SAAS,SAAS,WAAW,CAAC,IAAI;AAErD,UAAM,aAAa,WAAW,cAAc,QAAQ,SAAS,UAAU,CAAC;AACxE,UAAM,cAAcC,gBAAe,OAAO,eAAe,GAAG,KAAK,GAAG,UAAU,EAAE;AAChF,UAAMC,eAAc,OAAO,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,UAAU;AAE7E,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAC3F,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC;AACrC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAEjE,UAAM,UAAUC,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,iBAAiB,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU;AAEnG,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAD;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,kCAAkC,KAAK;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAASF,UAAS,OAAe;AAC/B,QAAM,iBAAiB,MAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE;AACzD,SAAO,QAAQ,gBAAgB,EAAE;AACnC;AAEA,SAASC,gBAAe,OAAe;AACrC,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb;AAEA,QAAI,MAAM;AAAI,UAAI;AAElB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AAEZ;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAC5B,WAAS,KAAK;AAEd,MAAI,WAAW,KAAK,WAAW,KAAK,SAAS;AAAG,aAAS;AAEzD,SAAO,OAAO,MAAM;AACtB;AAEA,SAASE,WAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;AC7GA,OAAOC,aAAY;AAQnB,SAAsBC,UAAS,IAA8B;AAAA,6CAA9B,EAAE,MAAM,GAAsB;AAC3D,QAAI;AACF,YAAM,EAAE,UAAU,YAAY,IAAI;AAElC,YAAMC,eAAc,MAAMC,QAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,eAAe,UACnC,SAAS,aAAa,eAAe,QAAQ,SAAS,GAAG,GAAG;AAC9D,eAAS,aAAa,eAAe,QACnC,SAAS,aAAa,eAAe,MAAM,SAAS,GAAG,GAAG;AAE5D,eAAS,OAAO,cAAc,mBAAW,YAAY,SAAS,OAAO,WAAW;AAChF,eAAS,OAAO,mBAAmBD,aAAY,SAAS,QAAQ;AAChE,eAAS,aAAa,OAAO,mBAAW;AAAA,QACtC,SAAS,aAAa;AAAA,MACxB;AACA,eAAS,aAAa,SAAS,MAAM,mBAAW;AAAA,QAC9C,SAAS,aAAa,SAAS;AAAA,MACjC;AACA,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AAEA,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,eAAe,mBAAW;AAAA,QACxC,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,0BAA0B,mBAAW;AAAA,QACnD,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAC/E,eAAS,OAAO,sBAAsB,mBAAW;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAEA,UAAI,SAAS,OAAO,YAAY;AAC9B,iBAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAAA,MACjF;AAEA,eAAS,OAAO,QAAQ,mBAAW,aAAa,SAAS,OAAO,KAAK;AAErE,YAAM,UAAU,WAAW,iBAAiB,qBAAqB,GAAG,QAAQ;AAE5E,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,UAAI,YAA2B;AAE/B,UAAI,aAAa;AACf,oBAAY,MAAM,YAAY,SAAS,MAAM;AAAA,MAC/C,OAAO;AACL,YAAI,CAAC,IAAI,SAAS,SAAS;AACzB,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AAEA,cAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,cAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,oBAAY,MAAM,WAAW,MAAM;AAAA,MACrC;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;;;AC5FA,SAAS,WAAAE,UAAS,UAAAC,eAAc;AAIhC,SAAsBC,cAAa,IAAkC;AAAA,6CAAlC,EAAE,MAAM,GAA0B;AACnE,QAAI;AACF,YAAM,EAAE,eAAe,cAAc,QAAQ,IAAI,MAAM;AAEvD,YAAM,UAAU,IAAI,QAAQ;AAC5B,YAAM,YAAY,oBAAI,KAAK;AAC3B,YAAM,OAAOC,QAAO,WAAW,UAAU;AACzC,YAAM,OAAOA,QAAO,WAAW,QAAQ;AAEvC,YAAM,WAAW,cAAc,SAAS,SAAS,GAAG,GAAG;AACvD,YAAM,SACJ,cAAc,MAAM,SAAS,GAAG,GAAG,IAAI,cAAc;AAEvD,YAAMC,WAAU,MAAM,QAAQ,IAAI,MAAM,IAAI,IAAI;AAGhD,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,WAAW;AACvB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,aAAa,IAAI;AAC7B,cAAQ,IAAI,cAAc,SAAS,OAAO,IAAI,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,OAAO;AACjC,cAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,cAAQ,IAAI,cAAc,WAAW;AACrC,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,aAAa,KAAK,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAC9D,cAAQ,IAAI,QAAQ,OAAO,IAAI,GAAG,CAAC;AACnC,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,cAAQ,QAAQ;AAGhB,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC;AAC/C,cAAQ,IAAI,cAAc,SAAS,OAAO,IAAI,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,aAAa;AACvC,cAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,cAAQ,IAAI,cAAc,WAAW;AACrC,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,aAAa,KAAK,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAC9D,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,cAAQ,QAAQ;AAEhB,UAAI,YAAY;AAChB,UAAI,qBAAqB;AACzB,UAAI,QAAQ;AAGZ,iBAAW,UAAU,SAAS;AAC5B,cAAM,EAAE,QAAQ,IAAI;AACpB,cAAM,aAAaD,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,UAAU;AACjE,iBAAS,OAAO,OAAO,KAAK;AAG5B,cAAM,aAAa,cAAc,WAAW,IAAI,MAAM;AACtD,cAAM,QACJ,cAAc,WAAW,IACrB,cAAc,SAAS,QAAQ,CAAC,IAChC;AAGN,cAAM,kBAAkBA;AAAA,UACtBE,SAAQ,IAAI,KAAK,OAAO,UAAU,GAAG,CAAC;AAAA,UACtC;AAAA,QACF;AACA,cAAM,iBAAiB,cAAc,oBAAoB,IAAI,MAAM;AACnE,cAAM,WACJ,cAAc,oBAAoB,IAC9B,cAAc,kBAAkB,QAAQ,CAAC,IACzC;AAEN,cAAM,WAAW,cAAc,eAAe,IAAI,MAAM;AACxD,cAAM,eACJ,aAAa,MAAM,cAAc,aAAa,SAAS,IAAI;AAE7D,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,MAAM;AAClB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACjD,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,gBAAQ,IAAI,cAAc,aAAa;AACvC,gBAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,gBAAQ,IAAI,cAAc,WAAW;AACrC,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,OAAO,YAAY,OAAO,IAAI,GAAG,CAAC;AAC9C,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG,OAAO,eAAe,IAAI,OAAO,OAAO,GAAG,OAAO,IAAI,GAAG,CAAC;AACzE,gBAAQ,IAAI,UAAU;AACtB,gBAAQ;AAAA,UACN,OAAO,OAAO,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,QACnE;AACA,gBAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,gBAAQ,IAAI,cAAc,aAAa;AACvC,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,eAAe;AAC3B,gBAAQ,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACpD,gBAAQ,IAAI,cAAc;AAC1B,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,SAAS,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACvD,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,OAAO,oBAAoB,OAAO,IAAI,GAAG,CAAC;AACtD,gBAAQ,IAAI,QAAQ;AACpB,gBAAQ,IAAI,aAAa,SAAS,GAAG,GAAG,CAAC;AACzC,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,YAAY;AACxB,gBAAQ,IAAI,GAAG;AAEf;AAEA,gBAAQ,QAAQ;AAGhB,YAAI,gBAAgB;AAEpB,YAAI,QAAQ,WAAW,KAAK;AAC1B,0BAAgB;AAAA,QAClB,OAAO;AACL,0BAAgB;AAAA,QAClB;AAEA,gBAAQ,SAAS,aAAa,GAAG,QAAQ,SAAS,WAC/C,UAAU,GAAG,EAAE,EACf,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,SAAS,OAAO,OAAO,GAAG,GAAG,CAAC;AAE3D,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,MAAM;AAClB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACjD,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,aAAa;AACzB,gBAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;AAC7C,gBAAQ,IAAI,QAAQ,KAAK,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACzD,gBAAQ,IAAI,QAAQ,SAAS,WAAW,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACxE,gBAAQ,IAAI,QAAQ,SAAS,OAAO,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACpE,gBAAQ,IAAI,QAAQ,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,gBAAQ,IAAI,QAAQ,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACjE,gBAAQ,IAAI,QAAQ,SAAS,UAAU,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvE,gBAAQ,IAAI,QAAQ,SAAS,GAAG,OAAO,GAAG,GAAG,CAAC;AAC9C,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAE9B,sBAAc,cAAc,OAAO,cAAc,eAAe,CAAC;AACjE,YAAI,cAAc,cAAc,GAAG;AACjC,kBAAQ,QAAQ;AAChB,gBAAM,QAAQ,cAAc,YAAY,QAAQ,CAAC;AAEjD;AAGA,kBAAQ,IAAI,KAAK;AACjB,kBAAQ,IAAI,MAAM;AAClB,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,UAAU,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACjD,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,IAAI;AAChB,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,UAAU;AACtB,kBAAQ,IAAI,iBAAiB;AAC7B,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,UAAU;AACtB,kBAAQ,IAAI,iBAAiB;AAC7B,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,UAAU;AACtB,kBAAQ,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACpD,kBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,kBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,kBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,kBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,kBAAQ,IAAI,UAAU;AACtB,kBAAQ,IAAI,KAAK;AACjB,kBAAQ,IAAI,OAAO;AACnB,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,cAAc;AAC1B,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,GAAG;AACf,kBAAQ,IAAI,WAAW;AAAA,QACzB;AAEA,gBAAQ,QAAQ;AAChB;AAAA,MACF;AAGA,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,cAAQ,IAAI,mBAAmB,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC1D,cAAQ,IAAI,MAAM,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAC/D,cAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,cAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,cAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,cAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,cAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,cAAQ,IAAI,IAAI,SAAS,IAAI,GAAG,CAAC;AACjC,cAAQ,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AAChC,cAAQ,IAAI,IAAI,SAAS,KAAK,GAAG,CAAC;AAElC,cAAQ,QAAQ;AAGhB,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,IAAI,QAAQ;AACpB,cAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAEhC,aAAO;AAAA,QACL,UAAUD;AAAA,QACV,SAAS,QAAQ,WAAW;AAAA,MAC9B;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,aAAO;AAAA,IACT;AAAA,EACF;AAAA;;;AC5QO,SAASE,cAAa,EAAE,MAAM,GAAyB;AAC5D,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,aAA0C,CAAC;AAEjD,QAAI,QAAQ;AAEZ,eAAW,QAAQ,SAAS;AAC1B,UAAI,QAAQ;AAEZ,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC;AAClC,YAAM,gBAAgB,MAAM,UAAU,IAAI,EAAE;AAE5C,WACG,UAAU,SAAS,UAAU,WAC7B,kBAAkB,QAAQ,kBAAkB,OAC7C;AACA,YAAI,WAAW,MAAM,UAAU,IAAI,EAAE;AAErC,YAAI,aAAa,KAAK;AACpB,cAAI,gBAAwB;AAC5B,cAAI,cAAsB;AAE1B,gBAAM,WAAW,MAAM,UAAU,KAAK,GAAG,EAAE,QAAQ;AAEnD,cAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,aAAC,eAAe,WAAW,IAAI,MAAM,MAAM,GAAG;AAAA,UAChD,OAAO;AACL,0BAAc;AAAA,UAChB;AAEA,gBAAM,UAAU,cAAc,SAAS,gBAAgB;AAEvD,kBAAQ,QAAQ,QAAQ,CAAC;AACzB,qBAAW,MAAM,UAAU,IAAI,EAAE;AAEjC,cAAI,aAAa,KAAK;AACpB,kBAAM,wBAAwB,MAAM,UAAU,IAAI,EAAE;AACpD,kBAAM,kBAAkB,OAAO,qBAAqB,IAAI;AAExD,kBAAM,sBAAsB,MAAM,UAAU,IAAI,EAAE;AAClD,kBAAM,gBAAgB,OAAO,mBAAmB,IAAI;AAEpD,kBAAM,kBAAkB,MAAM,UAAU,IAAI,EAAE;AAC9C,kBAAM,YAAY,OAAO,eAAe,IAAI;AAE5C,kBAAM,mBAAmB,MAAM,UAAU,IAAI,EAAE;AAC/C,kBAAM,aAAa,OAAO,gBAAgB,IAAI;AAE9C,kBAAM,aAAa;AACnB,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,aAAa,YAAY,aAAa;AAE5C,kBAAM,YAAuC;AAAA,cAC3C,cAAc;AAAA,cACd;AAAA,cACA,OAAO;AAAA,cACP,gBAAgB;AAAA,cAChB,aAAa;AAAA,cACb,aAAa;AAAA,cACb,aAAa;AAAA,cACb,MAAM,oBAAI,KAAK;AAAA,YACjB;AAEA,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAEA,UAAM,oBAAoB,eAA0C,UAAU;AAC9E,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;AC5EO,IAAM,WAAW;AAAA,EACtB,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AACF;;;ACNO,SAASC,kBAAiB,EAAE,MAAM,GAAwB;AAC/D,MAAI;AACF,UAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,YAAQ,QAAQ,OAAO,QAAQ,KAAK;AAEpC,UAAM,kBAAkB,mBAAmB,QAAQ,UAAU;AAC7D,UAAM,QAAQC,UAAS,QAAQ,KAAK;AACpC,UAAM,cAAc;AAAA,MAClB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAEA,QAAI,aAAa,SAAS,eAAe,SAAS,eAAe,cAAc,SAAS,QAAQ,SAAS,GAAG,GAAG,IAC3G,SAAS,MAAM,SAAS,GAAG,GAAG,IAAI,SAAS,cAAc,SAAS,GAAG,GAAG,IAAI;AAEhF,UAAM,mBAAmB,oBAAoB,UAAU;AACvD,iBAAa,aAAa;AAC1B,UAAM,cAAcC,gBAAe,OAAO,eAAe,GAAG,KAAK,GAAG,UAAU,EAAE;AAEhF,UAAMC,eAAc,OAAO,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,UAAU;AAE7E,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAC3F,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC;AACrC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAEjE,UAAM,UAAUC,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAEhC,UAAM,iBAAiB,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU;AAAA,IAAqB,CAAE;AAEvG,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,kCAAkC,KAAK;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,IAAY,SAAiB,OAAe,eAAuB;AACzF,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,QAAM,QAAQ,QAAQ,SAAS,GAAG,GAAG,IAAI,MAAM,SAAS,GAAG,GAAG,IAAI,cAAc,SAAS,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG;AAErH,SAAO,KAAK,GAAG;AACb;AAEA,QAAI,MAAM;AAAI,UAAI;AAElB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AAEZ;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAC5B,WAAS,KAAK;AAEd,MAAI,iBAAiB,KAAK,iBAAiB;AAAG,aAAS;AAEvD,SAAO,GAAG,SAAS,GAAG,GAAG,IAAI,OAAO,SAAS;AAC/C;AAEA,SAASF,UAAS,OAAe;AAC/B,QAAM,iBAAiB,MAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE;AACzD,SAAO,eAAe,SAAS,IAAI,GAAG;AACxC;AAEA,SAAS,oBAAoB,OAAe;AAC1C,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb;AAEA,QAAI,MAAM;AAAI,UAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAChB;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAE5B,MAAI,eAAe;AAAG,aAAS,KAAK;AAEpC,SAAO,OAAO,MAAM;AACtB;AAEA,SAASC,gBAAe,OAAe;AACrC,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb;AAEA,QAAI,MAAM;AAAI,UAAI;AAElB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AAEZ;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAC5B,WAAS,KAAK;AAEd,MAAI,UAAU,KAAK,UAAU;AAAI,aAAS;AAE1C,SAAO,OAAO,MAAM;AACtB;AAEA,SAASE,WAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;ACnKA,OAAOC,aAAY;AAQnB,SAAsBC,UAAS,IAA6B;AAAA,6CAA7B,EAAE,MAAM,GAAqB;AAC1D,QAAI;AACF,YAAM,EAAE,aAAa,SAAS,IAAI;AAElC,UAAI,CAAC,SAAS,QAAQ,SAAS;AAC7B,cAAM,IAAI,MAAM,0CAAqC;AAAA,MACvD;AAEA,YAAMC,eAAc,MAAMC,QAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,cAAc,UAClC,SAAS,aAAa,cAAc,QAAQ,SAAS,GAAG,GAAG;AAE7D,eAAS,OAAO,iBAAiB,mBAAW,YAAY,SAAS,OAAO,cAAc;AACtF,eAAS,OAAO,mBAAmBD,aAAY,SAAS,QAAQ;AAChE,eAAS,aAAa,OAAQ,mBAAW;AAAA,QACvC,SAAS,aAAa;AAAA,MACxB;AACA,eAAS,aAAa,SAAS,MAAM,mBAAW;AAAA,QAC9C,SAAS,aAAa,SAAS;AAAA,MACjC;AACA,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AACA,eAAS,QAAQ,UAAU,mBAAW,wBAAwB,SAAS,QAAQ,OAAO;AAEtF,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,eAAe,mBAAW;AAAA,QACxC,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,0BAA0B,mBAAW;AAAA,QACnD,SAAS,OAAO;AAAA,MAClB;AACA,YAAM,iBAAiB,OAAO,SAAS,OAAO,cAAc;AAC5D,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAC/E,eAAS,OAAO,sBAAsB,mBAAW;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAEA,UAAI,SAAS,OAAO,YAAY;AAC9B,iBAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAAA,MACjF;AAEA,YAAM,WAAW,SAAS,aAAa,cAAc;AACrD,YAAM,WAAY,WAAW,MAAM,KAAM;AACzC,UAAI,WAAW,GAAG;AAChB,iBAAS,OAAO,aAAa,qBAAqB,mBAAW,aAAa,QAAQ,CAAC;AAAA,MACrF;AAEA,YAAM,qBAAqB,SAAS,OAAO,WAAW,IAClD,SAAS,OAAO,WAChB,SAAS,aAAa,cAAc,WAAW,IAC7C,SAAS,aAAa,cAAc,WACpC;AACN,UAAI,qBAAqB,GAAG;AAC1B,iBAAS,OAAO,aAAa,6CAA0C,kBAAkB;AAAA,MAC3F;AAEA,YAAM,cAAc,SAAS,aAAa,cAAc,SAAS;AACjE,UAAI,cAAc,GAAG;AACnB,iBAAS,OAAO,aAAa,YAAY,WAAW;AAAA,MACtD;AAEA,YAAM,eAAe,SAAS,aAAa,cAAc,YAAY;AACrE,UAAI,eAAe,GAAG;AACpB,iBAAS,OAAO,aAAa,qBAAkB,YAAY;AAAA,MAC7D;AAEA,eAAS,OAAO,QAAQ,mBAAW,aAAa,SAAS,OAAO,KAAK;AACrE,eAAS,QAAQ,SAAS,SAAS,QAAQ,QAAQ,SAAS;AAC5D,YAAM,UAAU,WAAW,iBAAiB,oBAAoB,GAAG,QAAQ;AAE3E,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,UAAI,YAA2B;AAE/B,UAAI,aAAa;AACf,oBAAY,MAAM,YAAY,SAAS,MAAM;AAAA,MAC/C,OAAO;AACL,YAAI,CAAC,IAAI,SAAS,SAAS;AACzB,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AAEA,cAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,cAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,oBAAY,MAAM,WAAW,MAAM;AAAA,MACrC;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,UAAI,iBAAiB,OAAO;AAC1B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;;;AC7HA,SAAS,UAAAE,eAAc;AAEhB,SAASC,cAAa,EAAE,MAAM,GAAyB;AAC5D,MAAI;AACF,UAAM,EAAE,eAAe,cAAc,QAAQ,IAAI,MAAM;AAEvD,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,OAAO,oBAAI,KAAK;AAEtB,QAAI,YAAY;AAChB,QAAI,YAAY;AAEhB,YAAQ,cAAc,eAAe;AAAA,MACnC,KAAK;AACH,oBAAY;AACZ,oBAAY;AACZ;AAAA,MACF,KAAK;AACH,oBAAY;AACZ,oBAAY;AACZ;AAAA,MACF,KAAK;AACH,oBAAY;AACZ,oBAAY,OAAO,OAAO,cAAc,YAAY,EAAE,SAAS,GAAG,GAAG;AACrE;AAAA,MACF;AACE,oBAAY;AACZ,oBAAY;AACZ;AAAA,IACJ;AAGA,YAAQ,IAAI,WAAW;AACvB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,WAAW,OAAO,IAAI,GAAG,CAAC;AACtC,YAAQ,IAAI,cAAc,cAAc;AACxC,YAAQ,IAAI,aAAa,IAAI;AAC7B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,UAAU,OAAO,IAAI,GAAG,CAAC;AACrC,YAAQ,IAAID,QAAO,MAAM,UAAU,CAAC;AACpC,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAChC,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,QAAQ;AAEpB,YAAQ,QAAQ;AAChB,QAAI,YAAY;AAChB,QAAI,QAAQ;AAGZ,eAAW,UAAU,SAAS;AAC5B,YAAM,EAAE,QAAQ,IAAI;AACpB,eAAS,OAAO,OAAO,KAAK;AAE5B,UAAI,gBAAgB,QAAQ,WAAW,MAAM,MAAM;AAGnD,UAAI,WAAW;AACf,UAAI,eAAe;AAEnB,UAAI,OAAO,UAAU;AACnB,mBAAW,OAAO,SAAS,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AACvE,uBAAeA,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,QAAQ;AAAA,MAC7D;AAEA,UAAI,CAAC,OAAO,YAAY,cAAc,mBAAmB;AACvD,mBAAW,cAAc,kBAAkB,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AACvF,uBAAeA,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,QAAQ;AAAA,MAC7D;AAGA,UAAI,iBAAiB,OAAO,OAAO,KAAK,IAAI,OAAO,cAAc,QAAQ,IAAI,MAAM;AACnF,UAAI,cAAc,OAAO,cAAc,cAAc,GAAG;AAExD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,OAAO,YAAY,OAAO,GAAG,GAAG,CAAC;AAC7C,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,IAAIA,QAAO,IAAI,KAAK,OAAO,OAAO,GAAG,UAAU,CAAC;AACxD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,YAAY,SAAS,GAAG,GAAG,CAAC;AACxC,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,OAAO,oBAAoB,OAAO,IAAI,GAAG,CAAC;AACtD,cAAQ,IAAIA,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,QAAQ,CAAC;AACzD,cAAQ,IAAI,OAAO,OAAO,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAC9E,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,OAAO,MAAM;AACzB,cAAQ,IAAIA,QAAO,IAAI,KAAK,OAAO,OAAO,GAAG,QAAQ,CAAC;AACtD,cAAQ,IAAI,SAAS;AACrB,cAAQ,IAAI,OAAO,cAAc,YAAY,EAAE,SAAS,GAAG,GAAG,CAAC;AAC/D,cAAQ,IAAI,OAAO,cAAc,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAChF,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,SAAS;AACrB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,aAAa;AACzB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;AAC7C,cAAQ,IAAI,wBAAwB,QAAQ,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAClF,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACjG,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,QAAQ,SAAS,IAAI,OAAO,GAAG,GAAG,CAAC;AAC/C,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,OAAO,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAE9C,cAAQ,QAAQ;AAChB;AAAA,IACF;AAEA,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,cAAc,cAAc;AACxC,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAChC,YAAQ,IAAI,OAAO,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC9C,YAAQ,QAAQ;AAEhB,WAAO;AAAA,MACL,UAAU,GAAG,cAAc,cAAc,GAAG,WAAW,IAAI,CAAC,GAAGA,QAAO,MAAM,IAAI,CAAC;AAAA,MACjF,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,MAAY;AAC9B,QAAM,MAAM,KAAK,SAAS,IAAI;AAE9B,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,IAAI,SAAS;AAAA,EACxB;AACF;;;AC1JA,SAAS,SAAAE,cAAa;AAQf,SAASC,cAAa,EAAE,MAAM,GAAyB;AAC5D,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,aAAyC,CAAC;AAEhD,eAAW,SAAS,SAAS;AAC3B,YAAM,cAAc,MAAM,UAAU,GAAG,CAAC;AAExC,UAAI,gBAAgB,mBAAkB;AACpC;AAAA,MACF;AAEA,YAAM,aAAa,MAAM,UAAU,KAAK,GAAG;AAE3C,UAAI,eAAe,QAAQ,eAAe,QAAQ,eAAe,MAAM;AACrE;AAAA,MACF;AAEA,YAAM,aAAa,MAAM,UAAU,KAAK,GAAG,EAAE,KAAK;AAClD,UAAI,iBAAyB;AAC7B,UAAI,eAAuB;AAE3B,UAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,cAAM,CAAC,MAAM,EAAE,IAAI,WAAW,MAAM,GAAG;AACvC,yBAAiB;AACjB,uBAAe;AAAA,MACjB;AAEA,UAAI,UAAU;AACd,UAAI,eAAe,QAAQ;AACzB,kBACE,mBAAmB,MAAM,QACzB,mBAAmB,MAAM,QACzB,mBAAmB,MAAM,QACzB;AAAA,MACJ;AAEA,UAAI;AAEJ,YAAM,oBAAoB,MAAM,UAAU,KAAK,GAAG;AAClD,UAAI,qBAAqB,sBAAsB,YAAY;AACzD,sBAAcC,OAAM,mBAAmB,YAAY,oBAAI,KAAK,CAAC;AAAA,MAC/D,OAAO;AAEL,cAAM,uBAAuB,MAAM,UAAU,KAAK,GAAG;AACrD,sBAAcA,OAAM,sBAAsB,UAAU,oBAAI,KAAK,CAAC;AAAA,MAChE;AAEA,YAAM,eAAe,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AACzD,YAAM,aAAa,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AACvD,UAAI,iBAAiB,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AACzD,YAAM,aAAa,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AACvD,UAAI,cAAc,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AACtD,YAAM,cAAc,OAAO,MAAM,UAAU,KAAK,GAAG,CAAC,IAAI;AAExD,UAAI,eAAe,cAAc,mBAAmB,GAAG;AACrD,yBAAiB,eAAe;AAAA,MAClC;AAEA,UAAI,eAAe,cAAc,gBAAgB,GAAG;AAClD,sBAAc,aAAa;AAAA,MAC7B;AAEA,YAAM,YAAY,aAAa;AAC/B,YAAM,cAAc,eAAe,cAAc,cAAc;AAE/D,iBAAW,KAAK;AAAA,QACd;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,UAAM,qBAAqB,eAAyC,UAAU;AAC9E,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;ACzFO,IAAM,UAAU;AAAA,EACrB,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AACF;;;ACLO,SAASC,kBAAiB,EAAE,MAAM,GAAuB;AAC9D,MAAI;AACF,UAAM,EAAE,UAAU,QAAQ,IAAI;AAE9B,QAAI,CAAC,SAAS,YAAY;AACxB,eAAS,aAAa;AAAA,IACxB;AAEA,aAAS,aAAa,QAAQ,SAAS,YAAY,CAAC;AACpD,UAAM,iBAAiB,GAAG,SAAS,cAAc,GAAG,SAAS,iBAAiB;AAE9E,UAAM,cAAcC,gBAAe,SAAS,SAAS,gBAAgB,OAAO,QAAQ,SAAS,CAAC;AAC9F,UAAM,kBAAkB,mBAAmB,QAAQ,UAAU;AAC7D,UAAM,QAAQC,UAAS,OAAO,QAAQ,KAAK,CAAC;AAC5C,UAAM,aAAa,MAAM,SAAS,UAAU,SAAS,aACnD,QAAQ,gBAAgB,CAAC,IAAI,cAAc,QAAQ,QAAQ,SAAS,CAAC;AAEvE,UAAM,cAAcC,gBAAe,OAAO,eAAe,GAAG,KAAK,GAAG,UAAU,EAAE;AAChF,UAAMC,eAAc,OAAO,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,UAAU;AAE7E,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAC3F,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC;AACrC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAEjE,UAAM,UAAUC,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,iBAAiB,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU,SAAS;AAEzF,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,kCAAkC,KAAK;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAASH,gBACP,SACA,gBACA,WACA;AAEA,mBAAiB,QAAQ,gBAAgB,EAAE;AAC3C,cAAY,QAAQ,WAAW,CAAC;AAGhC,QAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS;AAEnD,MAAI,IAAI,IAAI,IAAI,GAAG,OAAO;AAC1B,SAAO,MAAM;AACX;AACA,YAAQ,IAAI,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC;AAClC,QAAI,MAAM;AAAG;AAAA,aACJ,MAAM;AAAG,UAAI;AAAA,aACb,MAAM;AAAG,UAAI;AAAA,aACb,MAAM;AAAG,UAAI;AAAA,aACb,MAAM;AAAG,UAAI;AAAA,EACxB;AAGA,MAAI,MAAM,OAAO;AACjB,QAAO,QAAQ,KAAK,QAAQ,IAAK,IAAI,KAAK;AAC1C,SAAO,GAAG,SAAS,GAAG,GAAG;AAC3B;AAEA,SAASC,UAAS,OAAe;AAC/B,QAAM,iBAAiB,MAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE;AACzD,SAAO,QAAQ,gBAAgB,EAAE;AACnC;AAEA,SAASC,gBAAe,OAAe;AACrC,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AAEX,SAAO,KAAK,GAAG;AACb;AACA,QAAI,MAAM;AAAI,UAAI;AAClB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AACZ;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,SAAS,KAAK;AAClB,MAAI,WAAW,KAAK,SAAS;AAAG,aAAS;AAEzC,SAAO,OAAO,MAAM;AACtB;AAEA,SAASE,WAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;ACtIA,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAKzB,SAASC,cAAa,EAAE,MAAM,GAAwB;AAC3D,MAAI;AACF,UAAM,EAAE,eAAe,cAAc,QAAQ,IAAI,MAAM;AAEvD,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,YAAY,oBAAI,KAAK;AAC3B,UAAM,OAAOC,QAAO,WAAW,UAAU;AACzC,UAAM,OAAOA,QAAO,WAAW,QAAQ;AAEvC,UAAMC,WAAU,MAAM,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AAGlE,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,IAAI;AAC7B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,aAAa;AACvC,YAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,YAAQ,IAAI,cAAc,WAAW;AACrC,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,SAAS,OAAO,IAAI,GAAG,CAAC;AACpC,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,YAAQ,QAAQ;AAGhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC;AAC/C,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,YAAQ,IAAI,cAAc,aAAa;AACvC,YAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,YAAQ,IAAI,cAAc,WAAW;AACrC,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,YAAQ,QAAQ;AAEhB,QAAI,YAAY;AAChB,QAAI,qBAAqB;AACzB,QAAI,QAAQ;AAGZ,eAAW,UAAU,SAAS;AAC5B,YAAM,EAAE,QAAQ,IAAI;AACpB,YAAM,aAAaD,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,UAAU;AACjE,YAAM,kBAAkB,OAAO,OAAO,KAAK,IAAI,cAAc,WAAW,MAAM;AAC9E,UAAI,WAAW;AACf,cAAQ,cAAc,eAAe;AAAA,QACnC,KAAK;AACH,qBAAW;AACX;AAAA,QACF,KAAK;AACH,qBAAW;AACX;AAAA,QACF,KAAK;AACH,qBAAW;AACX;AAAA,MACJ;AACA,YAAM,eAAe,cAAc,aAAa,SAAS,EAAE,SAAS,GAAG,GAAG;AAC1E,eAAS,OAAO,OAAO,KAAK;AAE5B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,cAAc,QAAQ,SAAS,GAAG,GAAG,CAAC;AAClD,cAAQ,IAAI,cAAc,aAAa;AACvC,cAAQ,IAAI,cAAc,MAAM,SAAS,IAAI,GAAG,CAAC;AACjD,cAAQ,IAAI,cAAc,WAAW;AACrC,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,OAAO,YAAY,SAAS,IAAI,GAAG,CAAC;AAChD,cAAQ,IAAI,OAAO,QAAQ,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACtD,cAAQ,IAAI,cAAc,WAAW,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,cAAQ,IAAI,cAAc,QAAQ;AAClC,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG,OAAO,eAAe,IAAI,OAAO,OAAO,OAAO,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC;AACjF,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,OAAO,OAAO,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAC9E,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,OAAO,MAAM;AACzB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAIA,QAAOE,SAAQ,IAAI,KAAK,OAAO,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC;AACvE,cAAQ,IAAI,gBAAgB,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACzE,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,OAAO,oBAAoB,OAAO,IAAI,GAAG,CAAC;AACtD,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AAEf,cAAQ,QAAQ;AAGhB,UAAI,gBAAgB;AAEpB,UAAI,QAAQ,WAAW,KAAK;AAC1B,wBAAgB;AAAA,MAClB,OAAO;AACL,wBAAgB;AAAA,MAClB;AAEA,cAAQ,SAAS,aAAa,GAC5B,wBAAwB,QAAQ,SAAS,UAAU,EAClD,UAAU,GAAG,EAAE,EACf,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,SAAS,OAAO,OAAO,GAAG,GAAG,CAAC;AAE3D,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,aAAa;AACzB,cAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;AAC7C,cAAQ,IAAI,wBAAwB,QAAQ,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAClF,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACjG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAC7F,cAAQ,IAAI,QAAQ,SAAS,IAAI,OAAO,GAAG,GAAG,CAAC;AAC/C,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAChG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC;AACvE,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAE/B,cAAQ,QAAQ;AAIhB,UAAI,QAAQ;AACZ,UAAI,aAAa;AACjB,UAAI,cAAc;AAElB,oBAAc,cAAc,OAAO,cAAc,eAAe,CAAC;AACjE,UAAI,cAAc,cAAc,GAAG;AACjC,gBAAQ;AACR,qBAAaF,QAAOE,SAAQ,IAAI,KAAK,OAAO,UAAU,GAAG,CAAC,GAAG,UAAU;AACvE,sBAAc,cAAc,YAAY,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,MACtF;AAEA,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,EAAE;AACd,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,WAAW;AACvB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,cAAc;AAC1B,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAE9B,cAAQ,QAAQ;AAChB;AAAA,IACF;AAGA,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,mBAAmB,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAC1D,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,MAAM,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AAC/D,YAAQ,IAAI,uEAAuE;AACnF,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAEhC,YAAQ,QAAQ;AAEhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,QAAQ;AACpB,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,QAAQ;AACpB,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAEhC,WAAO;AAAA,MACL,UAAUD;AAAA,MACV,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;AC5PA,OAAOE,aAAY;AAMnB,OAAOC,iBAAgB;AAGvB,SAAsBC,UAAS,IAA4B;AAAA,6CAA5B,EAAE,MAAM,GAAoB;AACzD,QAAI;AACF,YAAM,EAAE,UAAU,YAAY,IAAI;AAElC,UAAI,CAAC,SAAS,QAAQ,SAAS;AAC7B,cAAM,IAAI,MAAM,0CAAqC;AAAA,MACvD;AAEA,YAAMC,eAAc,MAAMC,QAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,cAAc,UAAU;AAAA,QAC5C,SAAS,aAAa,cAAc;AAAA,QACpC,SAAS,aAAa,cAAc;AAAA,MACtC;AAEA,eAAS,aAAa,cAAc,WAAW,SAAS,aAAa,cAAc,SAAS,SAAS,GAAG,GAAG;AAE3G,eAAS,OAAO,cAAc;AAAA,QAC5B,SAAS,OAAO;AAAA,QAChB,SAAS,OAAO;AAAA,MAClB;AAEA,eAAS,QAAQ,UACf,SAAS,QAAQ,QAAQ,WAAW,KACpC,QAAQ,mBAAW,wBAAwB,SAAS,QAAQ,OAAO,CAAC,KACpE,SAAS,mBAAW,wBAAwB,SAAS,QAAQ,OAAO,CAAC;AAEvE,eAAS,OAAO,iBAAiB,mBAAW,YAAY,SAAS,OAAO,cAAc;AACtF,eAAS,OAAO,cAAc,mBAAW,YAAY,SAAS,OAAO,WAAW;AAChF,eAAS,OAAO,mBAAmBD,aAAY,SAAS,QAAQ;AAEhE,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AAEA,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AAEA,eAAS,OAAO,eAAe,mBAAW;AAAA,QACxC,SAAS,OAAO;AAAA,MAClB;AAEA,eAAS,OAAO,0BAA0B,mBAAW;AAAA,QACnD,SAAS,OAAO;AAAA,MAClB;AAEA,YAAM,iBAAiB,OAAO,SAAS,OAAO,cAAc;AAC5D,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AAEA,eAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAE/E,eAAS,OAAO,sBAAsB,mBAAW;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAEA,UAAI,SAAS,OAAO,YAAY;AAC9B,iBAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAAA,MACjF;AAEA,YAAM,WAAW,SAAS,aAAa,cAAc;AACrD,YAAM,WAAY,WAAW,MAAM,KAAM;AACzC,UAAI,WAAW,GAAG;AAChB,iBAAS,OAAO,aAAa,qBAAqB,mBAAW,aAAa,QAAQ,CAAC;AAAA,MACrF;AAEA,YAAM,qBAAqB,SAAS,aAAa,cAAc,YAAY;AAC3E,UAAI,qBAAqB,GAAG;AAC1B,iBAAS,OAAO,aAAa,6CAA0C,kBAAkB;AAAA,MAC3F;AAEA,YAAM,cAAc,SAAS,aAAa,cAAc,SAAS;AACjE,UAAI,cAAc,GAAG;AACnB,iBAAS,OAAO,aAAa,YAAY,WAAW;AAAA,MACtD;AAEA,YAAM,eAAe,SAAS,aAAa,cAAc,YAAY;AACrE,UAAI,eAAe,GAAG;AACpB,iBAAS,OAAO,aAAa,qBAAkB,YAAY;AAAA,MAC7D;AAEA,eAAS,OAAO,QAAQ,mBAAW,aAAa,SAAS,OAAO,KAAK;AACrE,eAAS,QAAQ,SAAS,SAAS,QAAQ,QAAQ,SAAS;AAC5D,YAAM,UAAU,WAAW,iBAAiB,mBAAmB,GAAG,QAAQ;AAE1E,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,UAAI,YAA2B;AAE/B,UAAI,aAAa;AACf,oBAAY,MAAM,YAAY,SAAS,MAAM;AAAA,MAC/C,OAAO;AACL,YAAI,CAAC,IAAI,SAAS,SAAS;AACzB,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACzC;AAEA,cAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,cAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,oBAAY,MAAM,WAAW,MAAM;AAAA,MACrC;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,UAAI,iBAAiB,OAAO;AAC1B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;AAEA,SAAS,2BAA2B,SAAiB,OAAe;AAClE,YAAU,QAAQ,MAAM,GAAG,EAAE,EAAE,SAAS,GAAG,GAAG;AAC9C,UAAQ,MAAM,SAAS,GAAG,GAAG;AAE7B,QAAM,aAAa,IAAIE,YAAW,eAAe;AACjD,SAAO,WAAW,MAAM,UAAU,KAAK;AACzC;AAEA,SAAS,kBAAkB,SAA0B,aAAqB;AACxE,YAAU,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG;AACzC,gBAAc,YAAY,SAAS,GAAG,GAAG;AACzC,SAAO,GAAG,OAAO,IAAI,YAAY,MAAM,GAAG,CAAC,CAAC,IAAI,YAAY,MAAM,GAAG,CAAC,CAAC;AACzE;;;ACzJA,SAAS,SAAAC,cAAa;AAKf,SAASC,cAAa,EAAE,MAAM,GAAwB;AAC3D,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,aAAwC,CAAC;AAE/C,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAI,QAAQ,QAAQ,CAAC;AAErB,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC;AAClC,UAAI,8BAAwB;AAC1B;AAAA,MACF;AAEA,YAAM,aAAa,MAAM,UAAU,IAAI,EAAE;AACzC,UAAI,eAAe,QAAQ,eAAe,MAAM;AAC9C;AAAA,MACF;AAEA,UAAI,WAAW,MAAM,UAAU,IAAI,EAAE;AACrC,UAAI,aAAa,KAAK;AACpB,cAAM,aAAa,MAAM,UAAU,KAAK,GAAG,EAAE,QAAQ;AACrD,YAAI,iBAAiB;AACrB,YAAI,eAAe;AAEnB,YAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,gBAAM,CAAC,MAAM,EAAE,IAAI,WAAW,MAAM,GAAG;AACvC,2BAAiB;AACjB,yBAAe;AAAA,QACjB;AAEA,cAAM,UAAU,eAAe,SAAS,iBAAiB;AACzD,gBAAQ,QAAQ,EAAE,CAAC;AACnB,mBAAW,MAAM,UAAU,IAAI,EAAE;AACjC,YAAI,aAAa,KAAK;AAEpB,cAAI;AACJ,gBAAM,oBAAoB,MAAM,UAAU,KAAK,GAAG;AAClD,cAAI,qBAAqB,sBAAsB,YAAY;AACzD,0BAAcC,OAAM,mBAAmB,YAAY,oBAAI,KAAK,CAAC;AAAA,UAC/D,OAAO;AACL,kBAAM,uBAAuB,MAAM,UAAU,KAAK,GAAG;AACrD,0BAAcA,OAAM,sBAAsB,YAAY,oBAAI,KAAK,CAAC;AAAA,UAClE;AAEA,gBAAM,wBAAwB,MAAM,UAAU,IAAI,EAAE;AACpD,gBAAM,kBAAkB,OAAO,qBAAqB,IAAI;AAExD,gBAAM,sBAAsB,MAAM,UAAU,IAAI,EAAE;AAClD,gBAAM,gBAAgB,OAAO,mBAAmB,IAAI;AAEpD,gBAAM,kBAAkB,MAAM,UAAU,IAAI,EAAE;AAC9C,gBAAM,YAAY,OAAO,eAAe,IAAI;AAE5C,gBAAM,mBAAmB,MAAM,UAAU,IAAI,EAAE;AAC/C,gBAAM,aAAa,OAAO,gBAAgB,IAAI;AAE9C,gBAAM,aAAa;AACnB,gBAAM,YAAY,kBAAkB;AACpC,gBAAM,aAAa,YAAY,aAAa;AAE5C,gBAAM,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP,aAAa;AAAA,YACb,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAEA,qBAAW,KAAK,SAAS;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,eAAwC,UAAU;AAC5E,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;AClFO,IAAM,SAAS;AAAA,EACpB,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AACF;;;ACLO,SAASC,kBAAiB,EAAE,MAAM,GAA4B;AACnE,MAAI;AACF,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,YAAQ,QAAQ,OAAO,QAAQ,KAAK;AACpC,UAAM,kBAAkB,mBAAmB,QAAQ,UAAU;AAC7D,UAAM,QAAQC,UAAS,QAAQ,KAAK;AACpC,UAAM,WAAW,SAAS;AAE1B,QAAI,cAAc;AAClB,QAAI,kBAAkB;AACtB,QAAI,aAAa;AACjB,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,QAAQ,eAAe;AAAA,QAC7B,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,CAAC;AACpD;AAAA,QACF,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,CAAC;AACpD;AAAA,QACF,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,CAAC;AACtD;AAAA,MACF;AACA,oBAAcC,gBAAe,GAAG,QAAQ,GAAG,eAAe,EAAE;AAC5D,mBACE,KAAK,aAAa,GAAG,EAAE,IACvB,QAAQ,SAAS,SAAS,CAAC,IAC3B,QAAQ,GAAG,SAAS,MAAM,GAAG,SAAS,SAAS,IAAI,CAAC,IACpD,QAAQ,SAAS,UAAU,CAAC;AAAA,IAChC,WAAW,SAAS,WAAW,GAAG;AAChC,cAAQ,QAAQ,eAAe;AAAA,QAC7B,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,EAAE;AACrD;AAAA,QACF,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,EAAE;AACrD;AAAA,QACF,KAAK;AACH,4BAAkB,QAAQ,GAAG,QAAQ,SAAS,KAAK,EAAE;AACvD;AAAA,MACF;AACA,oBAAc,GAAG,QAAQ,GAAG,eAAe;AAC3C,mBAAa,SAAS,WAAW,GAAG,QAAQ,SAAS,UAAU,CAAC,CAAC;AAAA,IACnE;AAEA,UAAM,cAAcC,gBAAe,OAAO,eAAe,GAAG,KAAK,GAAG,UAAU,EAAE;AAChF,UAAMC,eAAc,OAAO,WAAW,GAAG,eAAe,GAAG,KAAK,GAAG,UAAU;AAE7E,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAC3F,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,IAAI,EAAE;AACvC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC;AACrC,UAAM,SAAS,KAAKA,cAAa,GAAG,CAAC,IAAI,KAAKA,cAAa,IAAI,EAAE;AAEjE,UAAM,UAAUC,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAChC,UAAM,UAAUA,WAAU,MAAM;AAGhC,UAAM,iBAAiB,SAAS,UAAU,SAAS,UAAU,SAAS,UAAU,SAAuB;AAEvG,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAD;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,kCAAkC,KAAK;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAASH,UAAS,OAAe;AAC/B,QAAM,iBAAiB,MAAM,QAAQ,CAAC,EAAE,QAAQ,OAAO,EAAE;AACzD,SAAO,QAAQ,gBAAgB,EAAE;AACnC;AAEO,SAASC,gBAAe,UAAkB;AAC/C,MAAI,IAAI,IAAI,IAAI,IAAI,OAAO;AAE3B,SAAO,KAAK,GAAG;AACb;AACA,QAAI,MAAM;AAAG,UAAI;AACjB,UAAM,SAAS,OAAO,KAAK,UAAU,GAAG,CAAC,CAAC;AAC1C,YAAQ,IAAI;AACZ;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,QAAM,SAAS,QAAQ,KAAK,OAAO,KAAK,IAAI;AAC5C,QAAM,eAAe,WAAW;AAEhC,SAAO;AACT;AAEA,SAASC,gBAAe,OAAe;AACrC,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AAEX,SAAO,KAAK,GAAG;AACb;AACA,QAAI,MAAM;AAAI,UAAI;AAClB,UAAM,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACtC,YAAQ,IAAI;AACZ;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,SAAS,KAAK;AAClB,MAAI,WAAW,KAAK,SAAS;AAAG,aAAS;AAEzC,SAAO,OAAO,MAAM;AACtB;AAEA,SAASE,WAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;AC9JA,OAAOC,aAAY;AAQnB,SAAsBC,UAAS,IAAiC;AAAA,6CAAjC,EAAE,MAAM,GAAyB;AAC9D,QAAI;AACF,YAAM,EAAE,SAAS,IAAI;AAErB,UAAI,CAAC,SAAS,QAAQ,SAAS;AAC7B,cAAM,IAAI,MAAM,0CAAqC;AAAA,MACvD;AAEA,YAAMC,eAAc,MAAMC,QAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,cAAc,UAClC,SAAS,aAAa,cAAc,QAAQ,SAAS,GAAG,GAAG;AAC7D,eAAS,aAAa,cAAc,QAClC,SAAS,aAAa,cAAc,MAAM,SAAS,GAAG,GAAG;AAE3D,eAAS,OAAO,iBAAiB,mBAAW,YAAY,SAAS,OAAO,cAAc;AACtF,eAAS,OAAO,mBAAmBD,aAAY,SAAS,QAAQ;AAChE,eAAS,aAAa,OAAO,mBAAW;AAAA,QACtC,SAAS,aAAa;AAAA,MACxB;AACA,eAAS,aAAa,SAAS,MAAM,mBAAW;AAAA,QAC9C,SAAS,aAAa,SAAS;AAAA,MACjC;AACA,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AACA,eAAS,QAAQ,UAAU,mBAAW,wBAAwB,SAAS,QAAQ,OAAO;AAEtF,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,eAAe,mBAAW;AAAA,QACxC,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,0BAA0B,mBAAW;AAAA,QACnD,SAAS,OAAO;AAAA,MAClB;AACA,YAAM,iBAAiB,OAAO,SAAS,OAAO,cAAc;AAC5D,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AACA,eAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAC/E,eAAS,OAAO,sBAAsB,mBAAW;AAAA,QAC/C,SAAS,OAAO;AAAA,MAClB;AAEA,UAAI,SAAS,OAAO,YAAY;AAC9B,iBAAS,OAAO,aAAa,mBAAW,aAAa,SAAS,OAAO,UAAU;AAAA,MACjF;AAEA,YAAM,WAAW,SAAS,aAAa,cAAc;AACrD,YAAM,WAAY,WAAW,MAAM,KAAM;AACzC,UAAI,WAAW,GAAG;AAChB,iBAAS,OAAO,aAAa,qBAAqB,QAAQ;AAAA,MAC5D;AAEA,YAAM,qBAAqB,SAAS,OAAO,WAAW,IAClD,SAAS,OAAO,WAChB,SAAS,aAAa,cAAc,WAAW,IAC7C,SAAS,aAAa,cAAc,WACpC;AACN,UAAI,qBAAqB,GAAG;AAC1B,iBAAS,OAAO,aAAa,6CAA0C,kBAAkB;AAAA,MAC3F;AAEA,YAAM,cAAc,SAAS,aAAa,cAAc,SAAS;AACjE,UAAI,cAAc,GAAG;AACnB,iBAAS,OAAO,aAAa,YAAY,WAAW;AAAA,MACtD;AAEA,YAAM,eAAe,SAAS,aAAa,cAAc,YAAY;AACrE,UAAI,eAAe,GAAG;AACpB,iBAAS,OAAO,aAAa,qBAAkB,YAAY;AAAA,MAC7D;AAEA,eAAS,OAAO,QAAQ,mBAAW,aAAa,SAAS,OAAO,KAAK;AACrE,eAAS,QAAQ,SAAS,SAAS,QAAQ,QAAQ,SAAS;AAC5D,YAAM,UAAU,WAAW,iBAAiB,yBAAyB,GAAG,QAAQ;AAEhF,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,UAAI,YAA2B;AAE/B,UAAI,CAAC,IAAI,SAAS,SAAS;AACzB,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA,YAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,YAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,kBAAY,MAAM,WAAW,MAAM;AAEnC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,UAAI,iBAAiB,OAAO;AAC1B,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;;;AC9HA,SAAS,UAAAE,eAAc;AAMhB,SAASC,cAAa,EAAE,MAAM,GAA6B;AAChE,MAAI;AACF,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,MAAM;AAEV,UAAM,UAAU,IAAI,QAAQ;AAC5B,UAAM,YAAY,oBAAI,KAAK;AAC3B,UAAM,OAAOC,QAAO,WAAW,UAAU;AACzC,UAAM,OAAOA,QAAO,WAAW,QAAQ;AACvC,UAAMC,WAAU,MAAM,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AAGlE,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC;AAC/C,YAAQ,IAAI,cAAc,SAAS,SAAS,GAAG,GAAG,CAAC;AACnD,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,cAAc,SAAS,SAAS,GAAG,GAAG,CAAC;AACnD,YAAQ,IAAI,cAAc,kBAAkB,SAAS,GAAG,GAAG,CAAC;AAC5D,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG,cAAc,OAAO,GAAG,cAAc,aAAa,GAAG,SAAS,GAAG,GAAG,CAAC;AACrF,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,GAAG,cAAc,KAAK,GAAG,cAAc,WAAW,GAAG,SAAS,GAAG,GAAG,CAAC;AACjF,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,uBAAuB,OAAO,IAAI,GAAG,CAAC;AAClD,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,QAAQ;AAGhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC;AAC/C,YAAQ,IAAI,cAAc,SAAS,SAAS,GAAG,GAAG,CAAC;AACnD,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,cAAc,SAAS,SAAS,GAAG,GAAG,CAAC;AACnD,YAAQ,IAAI,cAAc,kBAAkB,SAAS,GAAG,GAAG,CAAC;AAC5D,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,GAAG,cAAc,OAAO,GAAG,cAAc,aAAa,GAAG,SAAS,GAAG,GAAG,CAAC;AACrF,YAAQ,IAAI,OAAO;AACnB,YAAQ,IAAI,GAAG,cAAc,KAAK,GAAG,cAAc,WAAW,GAAG,SAAS,GAAG,GAAG,CAAC;AACjF,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,wBAAwB,aAAa,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACvF,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,IAAI,cAAc,cAAc,SAAS,GAAG,GAAG,CAAC;AACxD,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,UAAU;AACtB,YAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,YAAQ,QAAQ;AAEhB,QAAI,YAAY;AAChB,QAAI,qBAAqB;AACzB,QAAI,QAAQ;AAEZ,eAAW,UAAU,SAAS;AAC5B,YAAM,WAAW,cAAc;AAC/B,UAAI,eAAuB;AAE3B,UAAI,SAAS,WAAW,GAAG;AACzB,gBAAQ,OAAO,eAAe;AAAA,UAC5B,KAAK,OAAO;AACV,2BAAeC,gBAAe,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG;AAC/D;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,2BAAeA,gBAAe,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG;AAC/D;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,2BAAeA,gBAAe,GAAG,QAAQ,GAAG,OAAO,SAAS,GAAG;AAC/D;AAAA,UACF;AAAA,QACF;AAAA,MACF,WAAW,SAAS,WAAW,GAAG;AAChC,gBAAQ,OAAO,eAAe;AAAA,UAC5B,KAAK,OAAO;AACV,2BAAe,GAAG,QAAQ,IAAI,OAAO,UAAU,SAAS,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC;AAClF;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,2BAAe,GAAG,QAAQ,IAAI,OAAO,UAAU,SAAS,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC;AAClF;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,2BAAe,GAAG,QAAQ,IAAI,OAAO,UAAU,SAAS,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC;AAClF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB,cAAc,WAAW,IAC3C,OAAO,OAAO,KAAK,IAAI,cAAc,WAAW,MAAM,KACtD;AAEJ,YAAM,EAAE,QAAQ,IAAI;AACpB,YAAM,gBAAgB,QAAQ,WAAW,MAAM,MAAM;AAErD,YAAM,aAAaF,QAAO,IAAI,KAAK,OAAO,UAAU,GAAG,UAAU;AACjE,eAAS,OAAO,OAAO,KAAK;AAE5B,YAAM,iBAAiB,cAAc,oBAAoB,IAAI,MAAM;AACnE,YAAM,WAAW,OAAO,WAAW,IAC/B,OAAO,SAAS,QAAQ,CAAC,IACzB,cAAc,oBAAoB,IAChC,cAAc,kBAAkB,QAAQ,CAAC,IACzC;AAGN,UAAI,WAAW;AACf,UAAI,eAAe;AACnB,UAAI,iBAAiB;AACrB,UAAI,YAAY;AAEhB,cAAQ,cAAc,eAAe;AAAA,QACnC,KAAK;AACH,qBAAW;AACX,yBAAe;AACf,2BAAiB;AACjB,sBAAY;AACZ;AAAA,QACF,KAAK;AACH,qBAAW;AACX,yBAAe,cAAc,aAAa,SAAS,EAAE,SAAS,GAAG,GAAG;AACpE,2BAAiB;AACjB,sBAAY;AACZ;AAAA,QACF,KAAK;AACH,qBAAW;AACX,yBAAe,cAAc,aAAa,SAAS,EAAE,SAAS,GAAG,GAAG;AACpE,2BAAiB;AACjB,sBAAY;AACZ;AAAA,QACF;AACE,qBAAW;AACX,yBAAe;AACf,2BAAiB;AACjB,sBAAY;AACZ;AAAA,MACJ;AAGA,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG,cAAc,OAAO,GAAG,cAAc,aAAa,GAAG,SAAS,GAAG,GAAG,CAAC;AACrF,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI,GAAG,cAAc,KAAK,GAAG,cAAc,WAAW,GAAG,SAAS,GAAG,GAAG,CAAC;AACjF,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,aAAa,OAAO,IAAI,GAAG,CAAC;AACxC,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG,OAAO,gBAAgB,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,QAAQ,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC;AACtH,cAAQ,IAAI,UAAU;AACtB,cAAQ;AAAA,QACN,OAAO,OAAO,KAAK,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG;AAAA,MACnE;AACA,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,OAAO,MAAM;AACzB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,UAAU;AACtB,cAAQ,IAAI,cAAc,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACvE,cAAQ,IAAI,cAAc;AAC1B,cAAQ,IAAI,kBAAkB,MAAM,aAAa,UAAU;AAC3D,cAAQ,IAAI,SAAS,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACvD,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,OAAO,oBAAoB,OAAO,IAAI,GAAG,CAAC;AACtD,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,cAAc;AAC1B,cAAQ,IAAI,SAAS;AACrB,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,YAAY;AACxB,cAAQ,IAAI,GAAG;AACf,cAAQ,QAAQ;AAEhB,cAAQ,SAAS,aAAa,GAAG,wBAAwB,QAAQ,SAAS,UAAU,EAC/E,UAAU,GAAG,EAAE,EACf,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,SAAS,OAAO,OAAO,GAAG,GAAG,CAAC;AAG7D,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,MAAM;AAClB,cAAQ,IAAI,GAAG;AACf,cAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,IAAI;AAChB,cAAQ,IAAI,aAAa;AACzB,cAAQ,IAAI,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;AAC7C,cAAQ,IAAI,wBAAwB,QAAQ,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAClF,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,UAAU,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AACjG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAC7F,cAAQ,IAAI,QAAQ,SAAS,GAAG;AAChC,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,OAAO,IAAI,GAAG,CAAC;AAChG,cAAQ,IAAI,wBAAwB,QAAQ,SAAS,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC;AACvE,cAAQ,IAAI,GAAG;AACf,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,cAAQ,QAAQ;AAEhB,oBAAc,cAAc,OAAO,cAAc,eAAe,CAAC;AACjE,UAAI,cAAc,cAAc,GAAG;AACjC,cAAM,QAAQ,cAAc,YAAY,QAAQ,CAAC;AAGjD,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,MAAM;AAClB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,KAAK,EAAE,WAAW,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACrD,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,iBAAiB;AAC7B,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,SAAS,IAAI,GAAG,CAAC;AACpD,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AAC/B,gBAAQ,IAAI,UAAU;AACtB,gBAAQ,IAAI,KAAK;AACjB,gBAAQ,IAAI,OAAO;AACnB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,cAAc;AAC1B,gBAAQ,IAAI,IAAI;AAChB,gBAAQ,IAAI,GAAG;AACf,gBAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,gBAAQ,QAAQ;AAAA,MAClB;AAEA;AAAA,IACF;AAGA,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,QAAQ;AACpB,YAAQ,IAAI,IAAI;AAChB,YAAQ,IAAI,iBAAiB;AAC7B,YAAQ,IAAI,uEAAuE;AACnF,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAChC,YAAQ,QAAQ;AAGhB,YAAQ,IAAI,KAAK;AACjB,YAAQ,IAAI,MAAM;AAClB,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;AAC9B,YAAQ,IAAI,QAAQ;AACpB,YAAQ,KAAK,YAAY,GAAG,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACvD,YAAQ,IAAI,QAAQ;AACpB,YAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAChC,YAAQ,QAAQ;AAEhB,WAAO;AAAA,MACL,UAAUC;AAAA,MACV,SAAS,QAAQ,WAAW;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;;;ACzTA,SAAS,SAAAE,cAAa;AAQf,SAASC,cAAa,EAAE,MAAM,GAA6B;AAChE,MAAI;AACF,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,aAA6C,CAAC;AAEpD,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAI,QAAQ,QAAQ,CAAC;AAErB,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC;AAClC,UAAI,oCAA8B;AAChC;AAAA,MACF;AAEA,YAAM,aAAa,MAAM,UAAU,IAAI,EAAE;AACzC,UAAI,eAAe,QAAQ,eAAe,QAAQ,eAAe,MAAM;AACrE,YAAI,WAAW,MAAM,UAAU,IAAI,EAAE;AACrC,YAAI,aAAa,KAAK;AACpB,gBAAM,SAAS,MAAM,UAAU,KAAK,GAAG,EAAE,KAAK;AAC9C,gBAAM,aAAa,MAAM,UAAU,KAAK,GAAG,EAAE,QAAQ;AACrD,cAAI,iBAAiB;AACrB,cAAI,eAAe;AAEnB,cAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,kBAAM,CAAC,MAAM,EAAE,IAAI,WAAW,MAAM,GAAG;AACvC,6BAAiB;AACjB,2BAAe;AAAA,UACjB;AAEA,gBAAM,UAAU,eAAe,SAAS,iBAAiB;AACzD,kBAAQ,QAAQ,EAAE,CAAC;AACnB,qBAAW,MAAM,UAAU,IAAI,EAAE;AACjC,cAAI,aAAa,KAAK;AACpB,gBAAI;AACJ,kBAAM,oBAAoB,MAAM,UAAU,KAAK,GAAG;AAClD,gBAAI,qBAAqB,sBAAsB,YAAY;AACzD,4BAAcC,OAAM,mBAAmB,YAAY,oBAAI,KAAK,CAAC;AAAA,YAC/D,OAAO;AACL,oBAAM,uBAAuB,MAAM,UAAU,KAAK,GAAG;AACrD,4BAAcA,OAAM,sBAAsB,YAAY,oBAAI,KAAK,CAAC;AAAA,YAClE;AAEA,kBAAM,wBAAwB,MAAM,UAAU,IAAI,EAAE;AACpD,kBAAM,kBAAkB,OAAO,qBAAqB,IAAI;AAExD,kBAAM,sBAAsB,MAAM,UAAU,IAAI,EAAE;AAClD,kBAAM,gBAAgB,OAAO,mBAAmB,IAAI;AAEpD,kBAAM,kBAAkB,MAAM,UAAU,IAAI,EAAE;AAC9C,kBAAM,YAAY,OAAO,eAAe,IAAI;AAE5C,kBAAM,mBAAmB,MAAM,UAAU,IAAI,EAAE;AAC/C,kBAAM,aAAa,OAAO,gBAAgB,IAAI;AAE9C,kBAAM,aAAa;AACnB,kBAAM,YAAY,kBAAkB;AACpC,kBAAM,aAAa,YAAY,aAAa;AAE5C,gBAAI,YAAY;AAChB,gBAAI,iBAAiB;AAErB,gBAAI,eAAe,MAAM;AACvB,0BAAY;AACZ,+BAAiB,sBAAsB,MAAM;AAAA,YAC/C;AAEA,kBAAM,YAAY;AAAA,cAChB;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP,aAAa;AAAA,cACb,aAAa;AAAA,cACb,gBAAgB;AAAA,cAChB,aAAa;AAAA,cACb,MAAM;AAAA,cACN;AAAA,cACA,QAAQ;AAAA,YACV;AAEA,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,eAA6C,UAAU;AACjF,YAAQ,IAAI,iBAAiB;AAC7B,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,IAAI,KAAK;AACjB,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBAAsB,QAAwB;AACrD,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAA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","names":["retorno","codigoBarra","formatter","codigoBarra","remessa","format","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","parse","gerarRetorno","parse","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getNossoNumero","getValor","getDigitoGeral","codigoBarra","getDigito","addDays","format","gerarRemessa","format","remessa","addDays","BwipJs","StringMask","gerarPDF","codigoBarra","BwipJs","StringMask","parse","gerarRetorno","parse","gerarDadosBoleto","gerarRemessa","gerarPDF","gerarRetorno","gerarDadosBoleto","getValor","getNossoNumero","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","format","remessa","getNossoNumero","parse","gerarRetorno","parse","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","BwipJs","gerarPDF","codigoBarra","BwipJs","getDigito","gerarPDF"]}
1
+ {"version":3,"sources":["../src/utils/compileHbs.ts","../src/utils/getPathTemplates.ts","../src/services/api.ts","../src/utils/zip.ts","../src/banks/sicredi/gerarPDFCarne.ts","../src/utils/maskFormat.ts","../src/utils/getFatorVencimento.ts","../src/utils/copy.ts","../src/banks/sicredi/gerarDadosBoleto.ts","../src/banks/sicredi/gerarPDF.ts","../src/lib/Arquivo.ts","../src/utils/removerCaracterEspecial.ts","../src/banks/sicredi/gerarRemessa.ts","../src/utils/agruparRetorno.ts","../src/banks/sicredi/gerarRetorno.ts","../src/banks/sicredi/index.ts","../src/types/Boletos.ts","../src/carne.ts","../src/utils/pafLeft.ts","../src/banks/ailos/gerarDadosBoleto.ts","../src/banks/ailos/gerarPDF.ts","../src/banks/ailos/gerarRemessa.ts","../src/banks/ailos/gerarRetorno.ts","../src/banks/ailos/index.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/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":["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 { PDFOptions } from 'puppeteer-core';\nimport { IGerarCarnePDFSicredi } from './types';\nimport { compileHbs } from '@/utils/compileHbs';\nimport { getPathTemplates } from '@/utils/getPathTemplates';\nimport { api } from '@/services/api';\nimport { decompress } from '@/utils/zip';\nimport BwipJs from 'bwip-js';\nimport maskFormat from '@/utils/maskFormat';\nimport QRCode from 'qrcode';\n\nexport async function gerarPDFCarne({ dados }: IGerarCarnePDFSicredi) {\n try {\n const { generatePDF, dadosPDF } = dados;\n const carnes = [];\n\n if (!dadosPDF.pagador.cpfcnpj) {\n throw new Error('CPF/CNPJ do pagador não informado!');\n }\n\n for (const boleto of dados.dadosPDF.boleto) {\n const codigoBarra = await BwipJs.toBuffer({\n bcid: 'interleaved2of5',\n text: boleto.codigoBarra,\n height: 20,\n });\n\n const qrCode = await QRCode.toDataURL(boleto.pixCopiaCola, {\n errorCorrectionLevel: 'H',\n type: 'image/png',\n margin: 1,\n scale: 6,\n });\n\n boleto.qrCodeImage = qrCode;\n\n // FORMAT BENEFICIARIO/PAGADOR\n dadosPDF.beneficiario.dadosBancario.agencia =\n dadosPDF.beneficiario.dadosBancario.agencia.padStart(4, '0');\n\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\n dadosPDF.pagador.endereco.cep = maskFormat.retornaCEPFormatado(\n dadosPDF.pagador.endereco.cep,\n );\n dadosPDF.pagador.cpfcnpj = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cpfcnpj);\n\n // FORMAT BOLETO\n boleto.linhaDigitavel = maskFormat.codigoBarra(boleto.linhaDigitavel);\n boleto.codigoBarraImage = codigoBarra.toString('base64');\n\n boleto.valorAcrescimo = maskFormat.numberToReal(\n boleto.valorAcrescimo,\n );\n boleto.valorCobrado = maskFormat.numberToReal(\n boleto.valorCobrado,\n );\n boleto.valorDescontoAbatimento = maskFormat.numberToReal(\n boleto.valorDescontoAbatimento,\n );\n\n const valorDocumento = Number(boleto.valorDocumento);\n boleto.valorDocumento = maskFormat.numberToReal(\n boleto.valorDocumento,\n );\n boleto.valorMulta = maskFormat.numberToReal(boleto.valorMulta);\n boleto.valorOutrasDeducoes = maskFormat.numberToReal(\n boleto.valorOutrasDeducoes,\n );\n\n const jurosMes = dadosPDF.beneficiario.dadosBancario.juros;\n const jurosDia = (jurosMes / 100 / 30) * valorDocumento;\n if (jurosDia > 0) {\n boleto.instrucao1 = `COBRAR JUROS DE R$${maskFormat.numberToReal(jurosDia)} AO DIA, APÓS O VENCIMENTO`;\n }\n\n const descontoVencimento = boleto.desconto > 0\n ? boleto.desconto\n : dadosPDF.beneficiario.dadosBancario.desconto > 0\n ? dadosPDF.beneficiario.dadosBancario.desconto\n : 0;\n if (descontoVencimento > 0) {\n boleto.instrucao2 = `ATÉ O VENCIMENTO, CONCEDER DESCONTO DE ${descontoVencimento}%`;\n }\n\n const multaAtraso = dadosPDF.beneficiario.dadosBancario.multa || 0;\n if (multaAtraso > 0) {\n boleto.instrucao3 = `MULTA DE ${multaAtraso}%`;\n }\n\n const protestoDias = dadosPDF.beneficiario.dadosBancario.protesto || 0;\n if (protestoDias > 0) {\n boleto.instrucao4 = `PROTESTAR APÓS ${protestoDias} DIAS CORRIDOS DO VENCIMENTO`;\n }\n\n dadosPDF.pagador.isCnpj = dadosPDF.pagador.cpfcnpj.length > 14;\n\n carnes.push({ boleto, pagador: dadosPDF.pagador, beneficiario: dadosPDF.beneficiario });\n }\n\n\n const content = compileHbs(getPathTemplates('sicredi-carne.hbs'), { boletos: carnes });\n\n const config: PDFOptions = {\n displayHeaderFooter: false,\n path: './boleto.pdf',\n format: 'a4',\n printBackground: true,\n preferCSSPageSize: 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 { 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","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 { 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.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\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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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('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","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 { 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 (boleto.desconto) {\n desconto = boleto.desconto.toFixed(2).replace('.', '').padStart(13, '0');\n dataDesconto = format(new Date(boleto.vencimento), 'ddMMyy');\n }\n\n if (!boleto.desconto && 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 { format } from \"date-fns\";\n\nexport function agruparRetorno<T extends { data: Date | string }>(documentos: T[]) {\n return documentos.reduce((acc: Record<string, T[]>, documento) => {\n const dataKey = format(new Date(documento.data), 'yyyy-MM-dd');\n if (!acc[dataKey]) {\n acc[dataKey] = [];\n }\n acc[dataKey].push(documento);\n return acc;\n }, {});\n}","import { agruparRetorno } from '@/utils/agruparRetorno';\nimport { IGerarRetornoSicredi, IDocumentoRetornoSicredi } from './types';\nimport { parse } from 'date-fns';\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' && ocorrencia !== '03') {\n continue;\n }\n\n const motivo = linha.substring(213, 223).trim();\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 let dataCredito: Date;\n // Data de crédito no formato AAAAMMDD\n const dataCreditoString = linha.substring(328, 336);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'yyyyMMdd', new Date());\n } else {\n // Data de ocorrência no formato DDMMAA\n const dataOcorrenciaString = linha.substring(110, 116);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyy', new Date());\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 let rejeitado = false;\n let motivoRejeicao = '';\n\n if (ocorrencia === '03') {\n rejeitado = true;\n motivoRejeicao = retornaMotivoRejeicao(motivo);\n }\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 data: dataCredito,\n rejeitado,\n motivo: motivoRejeicao,\n });\n }\n\n const documentosAgrupado = agruparRetorno<IDocumentoRetornoSicredi>(documentos);\n return documentosAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMotivoRejeicao(codigo: string): string {\n switch (codigo) {\n case '01': return 'Código do banco inválido';\n case '02': return 'Código do registro detalhe inválido';\n case '03': return 'Código do segmento inválido';\n case '04': return 'Código de movimento não permitido para carteira';\n case '05': return 'Código de movimento inválido';\n case '06': return 'Tipo/número de inscrição do beneficiário inválidos';\n case '07': return 'Cooperativa crédito/agência/conta/DV inválido';\n case '08': return 'Nosso número inválido';\n case '09': return 'Nosso número duplicado';\n case '10': return 'Carteira inválida';\n case '11': return 'Forma de cadastramento do título inválido';\n case '12': return 'Tipo de documento inválido';\n case '13': return 'Identificação da emissão do boleto inválida';\n case '14': return 'Identificação da distribuição do boleto inválida';\n case '15': return 'Características da cobrança incompatíveis';\n case '16': return 'Data de vencimento inválida';\n case '17': return 'Data de vencimento anterior a data de emissão';\n case '18': return 'Vencimento fora do prazo de operação';\n case '20': return 'Valor do título inválido';\n case '21': return 'Espécie do título inválida';\n case '22': return 'Espécie do título não permitida para a carteira';\n case '23': return 'Aceite inválido';\n case '24': return 'Data da emissão inválida';\n case '25': return 'Data da emissão posterior a data de entrada';\n case '26': return 'Código de juros de mora inválido';\n case '27': return 'Valor/taxa de juros de mora inválido';\n case '28': return 'Código do desconto inválido';\n case '29': return 'Valor do desconto maior ou igual ao valor do título';\n case '30': return 'Desconto a conceder não confere';\n case '31': return 'Concessão de desconto - já existe desconto anterior';\n case '33': return 'Valor do abatimento inválido';\n case '34': return 'Valor do abatimento maior ou igual ao valor do título';\n case '35': return 'Valor a conceder não confere';\n case '36': return 'Concessão de abatimento - já existe abatimento anterior';\n case '37': return 'Código para protesto inválido';\n case '38': return 'Prazo para protesto inválido';\n case '39': return 'Pedido de protesto não permitido para o título';\n case '40': return 'Título com ordem de protesto emitida';\n case '41': return 'Pedido de cancelamento/sustação para títulos sem instrução de protesto/negativação';\n case '44': return 'Código da moeda inválido';\n case '45': return 'Nome do pagador não informado';\n case '46': return 'Tipo/número de inscrição do pagador inválidos';\n case '47': return 'Endereço do pagador não informado';\n case '48': return 'CEP inválido';\n case '53': return 'Tipo/número de inscrição do pagador/avalista inválido';\n case '54': return 'Pagador/avalista não informado';\n case '55': return 'Nosso número no banco correspondente não informado';\n case '56': return 'Código do banco correspondente não informado';\n case '57': return 'Código da multa inválido';\n case '58': return 'Data da multa inválida';\n case '59': return 'Valor/percentual da multa inválido';\n case '60': return 'Movimento para título não cadastrado';\n case '61': return 'Alteração da cooperativa crédito/agência cobradora/DV inválida';\n case '62': return 'Tipo de impressão inválido';\n case '63': return 'Entrada para título já cadastrado';\n case '64': return 'Número da linha inválido';\n case '79': return 'Data juros de mora inválida';\n case '80': return 'Data do desconto inválida';\n case '84': return 'Número autorização inexistente';\n case '85': return 'Título com pagamento vinculado';\n case '86': return 'Seu número inválido';\n case 'A4': return 'Pagador DDA';\n case 'CZ': return 'Instrução Inválida';\n case 'L6': return 'Tipo de comando de instrução inválida para beneficiário pessoa física.';\n default: return 'Motivo desconhecido';\n }\n}\n","import { gerarPDFCarne } from '@/banks/sicredi/gerarPDFCarne';\nimport { 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 gerarPDFCarne\n}\n","import { IGerarBoletoAilos, IGerarPDFAilos, IGerarRemessaAilos, IGerarRetornoAilos } from \"@/banks/ailos/types\";\nimport { IGerarBoletoBradesco, IGerarPDFBradesco, IGerarRemessaBradesco, IGerarRetornoBradesco } from \"@/banks/bradesco/types\";\nimport { IGerarBoletoSicredi, IGerarCarnePDFSicredi, 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 IGerarCarnePDF =\n IGerarCarnePDFSicredi;\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 { sicredi } from \"@/banks/sicredi\";\nimport { Banco, IGerarCarnePDF } from \"@/types/Boletos\";\n\nexport function carne({ banco, dados }: IGerarCarnePDF) {\n if (banco === Banco.SICREDI) {\n return sicredi.gerarPDFCarne({ banco, dados });\n }\n}\n","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","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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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 { 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\n const desconto = boleto.desconto > 0\n ? boleto.desconto.toFixed(2)\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","import { parse } from 'date-fns';\nimport { IGerarRetornoAilos, IDocumentoRetornoAilos } from './types';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\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 const codigoRetorno = linha.substring(15, 17);\n\n if (codigoRetorno === '06' || codigoRetorno === '17' || codigoRetorno === '03') {\n let segmento = linha.substring(13, 14);\n\n if (segmento === 'T') {\n const motivo = linha.substring(213, 223).trim();\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 let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(157, 165);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 let rejeitado = false;\n let motivoRejeicao = '';\n\n if (codigoRetorno === '03') {\n rejeitado = true;\n motivoRejeicao = retornaMotivoRejeicao(motivo);\n }\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 data: dataCredito,\n rejeitado,\n motivo: motivoRejeicao,\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoAilos>(documentos);\n return documentoAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMotivoRejeicao(codigo: string): string {\n switch (codigo) {\n case '01':\n return 'Código do Banco Inválido';\n case '02':\n return 'Código do Registro Detalhe Inválido';\n case '03':\n return 'Código do Segmento Inválido';\n case '04':\n return 'Código de Movimento Não Permitido para Carteira';\n case '05':\n return 'Código de Movimento Inválido';\n case '06':\n return 'Tipo/Número de Inscrição do Cedente Inválidos';\n case '07':\n return 'Agência/Conta/DV Inválido';\n case '08':\n return 'Nosso Número Inválido';\n case '09':\n return 'Nosso Número Duplicado';\n case '10':\n return 'Carteira Inválida';\n case '11':\n return 'Forma de Cadastramento do Título Inválido';\n case '12':\n return 'Tipo de Documento Inválido';\n case '13':\n return 'Identificação da Emissão do Boleto Inválida';\n case '14':\n return 'Identificação da Distribuição do Boleto Inválida';\n case '15':\n return 'Características da Cobrança Incompatíveis';\n case '16':\n return 'Data de Vencimento Inválida';\n case '17':\n return 'Data de Vencimento Anterior à Data de Emissão';\n case '18':\n return 'Vencimento Fora do Prazo de Operação';\n case '19':\n return 'Título a Cargo de Bancos Correspondentes com Vencimento Inferior a XX Dias';\n case '20':\n return 'Valor do Título Inválido';\n case '21':\n return 'Espécie do Título Inválida';\n case '22':\n return 'Espécie do Título Não Permitida para a Carteira';\n case '23':\n return 'Aceite Inválido';\n case '24':\n return 'Data da Emissão Inválida';\n case '25':\n return 'Data da Emissão Posterior a Data de Entrada';\n case '26':\n return 'Código de Juros de Mora Inválido';\n case '27':\n return 'Vlr/Taxa de Juros de Mora Inválido';\n case '28':\n return 'Código do Desconto Inválido';\n case '29':\n return 'Valor do Desconto Maior ou Igual ao Valor do Título';\n case '30':\n return 'Desconto a Conceder Não Confere';\n case '31':\n return 'Concessão de Desconto - Já Existe Desconto Anterior';\n case '33':\n return 'Valor do Abatimento Inválido';\n case '34':\n return 'Valor do Abatimento Maior ou Igual ao Valor do Título';\n case '35':\n return 'Valor a Conceder Não Confere';\n case '36':\n return 'Concessão de Abatimento - Já Existe Abatimento Anterior';\n case '37':\n return 'Código para Protesto Inválido';\n case '38':\n return 'Prazo para Protesto Inválido';\n case '39':\n return 'Pedido de Protesto Não Permitido para o Título';\n case '40':\n return 'Título com Ordem de Protesto Emitida';\n case '41':\n return 'Pedido de Cancelamento/Sustação para Títulos sem Instrução de Protesto';\n case '42':\n return 'Código para Baixa/Devolução Inválido';\n case '43':\n return 'Prazo para Baixa/Devolução Inválido';\n case '44':\n return 'Código da Moeda Inválido';\n case '45':\n return 'Nome do Sacado Não Informado';\n case '46':\n return 'Tipo/Número de Inscrição do Sacado Inválidos';\n case '47':\n return 'Endereço do Sacado Não Informado';\n case '48':\n return 'CEP Inválido';\n case '49':\n return 'CEP Sem Praça de Cobrança (Não Localizado)';\n case '50':\n return 'CEP Referente a um Banco Correspondente';\n case '51':\n return 'CEP incompatível com a Unidade da Federação';\n case '52':\n return 'Unidade da Federação Inválida';\n case '53':\n return 'Tipo/Número de Inscrição do Sacador/Avalista Inválidos';\n case '54':\n return 'Sacador/Avalista Não Informado';\n case '55':\n return 'Nosso número no Banco Correspondente Não Informado';\n case '56':\n return 'Código do Banco Correspondente Não Informado';\n case '57':\n return 'Código da Multa Inválido';\n case '58':\n return 'Data da Multa Inválida';\n case '59':\n return 'Valor/Percentual da Multa Inválido';\n case '60':\n return 'Movimento para Título Não Cadastrado';\n case '61':\n return 'Alteração da Agência Cobradora/DV Inválida';\n case '62':\n return 'Tipo de Impressão Inválido';\n case '63':\n return 'Entrada para Título já cadastrado';\n case '64':\n return 'Número da Linha Inválido';\n case '65':\n return 'Código do Banco para Débito Inválido';\n case '66':\n return 'Agência/Conta/DV para Débito Inválido';\n case '79':\n return 'Data Juros de Mora Inválido';\n case '80':\n return 'Data do Desconto Inválida';\n case '86':\n return 'Seu Número Inválido';\n case '89':\n return 'E-mail/SMS devolvido - endereço de e-mail ou número do celular incorreto';\n case '91':\n return 'E-mail/número do celular do sacado não informado';\n case '96':\n return 'Número do Convenio invalido';\n case '97':\n return 'Rejeição da alteração do prazo limite de recebimento';\n case '98':\n return 'Rejeição de dispensa de prazo limite de recebimento';\n case '99':\n return 'Rejeição da alteração do número do título dado pelo cedente';\n case 'A2':\n return 'Rejeição da alteração dos dados do sacado';\n case 'A3':\n return 'Rejeição da alteração dos dados do sacador/avalista';\n case 'A4':\n return 'Sacado DDA';\n case 'A4R1':\n return 'Sacado DDA / Registro online';\n default:\n return 'Motivo de rejeição desconhecido';\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 { 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 { agruparRetorno } from '@/utils/agruparRetorno';\nimport { 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 data: new Date(),\n };\n\n documentos.push(documento);\n }\n }\n }\n\n index++;\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoBradesco>(documentos);\n return documentoAgrupado;\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 { 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 { parse } from 'date-fns';\nimport { IGerarRetornoSicoob, IDocumentoRetornoSicoob } from './types';\nimport { Banco } from '@/types/Boletos';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\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' || ocorrencia === '03') {\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const motivo = linha.substring(213, 223).trim();\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 // Data de crédito no formato DDMMYYYY\n let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(137, 145);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 let rejeitado = false;\n let motivoRejeicao = '';\n\n if (ocorrencia === '03') {\n rejeitado = true;\n motivoRejeicao = retornaMotivoRejeicao(motivo);\n }\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 data: dataCredito,\n rejeitado,\n motivo: motivoRejeicao\n };\n\n documentos.push(documento);\n }\n }\n }\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoSicoob>(documentos);\n return documentoAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMotivoRejeicao(codigo: string): string {\n switch (codigo) {\n case '03':\n return 'Tarifa de Desistência';\n case '04':\n return 'Tarifa de Protesto';\n case '08':\n return 'Custas de Protesto';\n case '11':\n return 'Forma de Cadastramento do Título Inválido';\n case '21':\n return 'Tarifa de Gravação Eletrônica = CRA';\n case '28':\n return 'Código do Desconto Inválido';\n case '29':\n return 'Valor do Desconto Maior ou Igual ao Valor do Título';\n case '30':\n return 'Desconto a Conceder Não Confere';\n case '31':\n return 'Concessão de Desconto - Já Existe Desconto Anterior';\n case '39':\n return 'Pedido de Protesto/Negativação Não Permitido para o Título';\n case '40':\n return 'Título com Ordem de Protesto/Negativação Emitida';\n case '41':\n return 'Pedido de Cancelamento/Sustação para Títulos sem Instrução de Negativação/Protesto';\n case '58':\n return 'Data da Multa Inválida';\n case '79':\n return 'Data Juros de Mora Inválido';\n case '80':\n return 'Data do Desconto Inválida';\n default:\n return 'Motivo de rejeição não identificado';\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.boleto.desconto > 0 \n ? dadosPDF.boleto.desconto \n : dadosPDF.beneficiario.dadosBancario.desconto > 0 \n ? dadosPDF.beneficiario.dadosBancario.desconto \n : 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 const codigoDesconto = dadosBancario.descontoPagamento > 0 ? '2' : '0';\n const desconto = boleto.desconto > 0\n ? boleto.desconto.toFixed(2)\n : dadosBancario.descontoPagamento > 0\n ? dadosBancario.descontoPagamento.toFixed(2)\n : '000000000000000';\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(codigoDesconto);\n arquivo.add(codigoDesconto == '2' ? vencimento : '00000000');\n arquivo.add(desconto.replace('.', '').padStart(15, '0'));\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 { parse } from 'date-fns';\nimport { IGerarRetornoBancoBrasil, IDocumentoRetornoBancoBrasil } from './types';\nimport { Banco } from '@/types/Boletos';\nimport { agruparRetorno } from '@/utils/agruparRetorno';\n\n// C044 CODIGO MOVIMENTO RETORNO\n// C047 TEM A LISTA DE RETORNOS DO BANCO DO BRASIL\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' || ocorrencia === '03') {\n let segmento = linha.substring(13, 14);\n if (segmento === 'T') {\n const motivo = linha.substring(213, 223).trim();\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 let dataCredito: Date;\n const dataCreditoString = linha.substring(145, 153);\n if (dataCreditoString && dataCreditoString !== '00000000') {\n dataCredito = parse(dataCreditoString, 'ddMMyyyy', new Date());\n } else {\n const dataOcorrenciaString = linha.substring(137, 145);\n dataCredito = parse(dataOcorrenciaString, 'ddMMyyyy', new Date());\n }\n\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 let rejeitado = false;\n let motivoRejeicao = '';\n\n if (ocorrencia === '03') {\n rejeitado = true;\n motivoRejeicao = retornaMotivoRejeicao(motivo);\n }\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 data: dataCredito,\n rejeitado,\n motivo: motivoRejeicao\n };\n\n documentos.push(documento);\n }\n }\n }\n }\n\n const documentoAgrupado = agruparRetorno<IDocumentoRetornoBancoBrasil>(documentos);\n console.log(documentoAgrupado);\n return documentoAgrupado;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\nfunction retornaMotivoRejeicao(codigo: string): string {\n switch (codigo) {\n case '01':\n return 'Código do Banco Inválido';\n case '02':\n return 'Código do Registro Detalhe Inválido';\n case '03':\n return 'Código do Segmento Inválido';\n case '04':\n return 'Código de Movimento Não Permitido para Carteira';\n case '05':\n return 'Código de Movimento Inválido';\n case '06':\n return 'Tipo/Número de Inscrição do Beneficiário Inválidos';\n case '07':\n return 'Agência/Conta/DV Inválido';\n case '08':\n return 'Nosso Número Inválido';\n case '09':\n return 'Nosso Número Duplicado';\n case '10':\n return 'Carteira Inválida';\n case '11':\n return 'Forma de Cadastramento do Título Inválido';\n case '12':\n return 'Tipo de Documento Inválido';\n case '13':\n return 'Identificação da Emissão do Boleto de Pagamento Inválida';\n case '14':\n return 'Identificação da Distribuição do Boleto de Pagamento Inválida';\n case '15':\n return 'Características da Cobrança Incompatíveis';\n case '16':\n return 'Data de Vencimento Inválida';\n case '17':\n return 'Data de Vencimento Anterior a Data de Emissão';\n case '18':\n return 'Vencimento Fora do Prazo de Operação';\n case '19':\n return 'Título a Cargo de Bancos Correspondentes com Vencimento Inferior a XX Dias';\n case '20':\n return 'Valor do Título Inválido';\n case '21':\n return 'Espécie do Título Inválida';\n case '22':\n return 'Espécie do Título Não Permitida para a Carteira';\n case '23':\n return 'Aceite Inválido';\n case '24':\n return 'Data da Emissão Inválida';\n case '25':\n return 'Data da Emissão Posterior a Data de Entrada';\n case '26':\n return 'Código de Juros de Mora Inválido';\n case '27':\n return 'Valor/Taxa de Juros de Mora Inválido';\n case '28':\n return 'Código do Desconto Inválido';\n case '29':\n return 'Valor do Desconto Maior ou Igual ao Valor do Título';\n case '30':\n return 'Desconto a Conceder Não Confere';\n case '31':\n return 'Concessão de Desconto - Já Existe Desconto Anterior';\n case '32':\n return 'Valor do IOF Inválido';\n case '33':\n return 'Valor do Abatimento Inválido';\n case '34':\n return 'Valor do Abatimento Maior ou Igual ao Valor do Título';\n case '35':\n return 'Valor a Conceder Não Confere';\n case '36':\n return 'Concessão de Abatimento - Já Existe Abatimento Anterior';\n case '37':\n return 'Código para Protesto Inválido';\n case '38':\n return 'Prazo para Protesto Inválido';\n case '39':\n return 'Pedido de Protesto Não Permitido para o Título';\n case '40':\n return 'Título com Ordem de Protesto Emitida';\n case '41':\n return 'Pedido de Cancelamento/Sustação para Títulos sem Instrução de Protesto';\n case '42':\n return 'Código para Baixa/Devolução Inválido';\n case '43':\n return 'Prazo para Baixa/Devolução Inválido';\n case '44':\n return 'Código da Moeda Inválido';\n case '45':\n return 'Nome do Pagador Não Informado';\n case '46':\n return 'Tipo/Número de Inscrição do Pagador Inválidos';\n case '47':\n return 'Endereço do Pagador Não Informado';\n case '48':\n return 'CEP Inválido';\n case '49':\n return 'CEP Sem Praça de Cobrança (Não Localizado)';\n case '50':\n return 'CEP Referente a um Banco Correspondente';\n case '51':\n return 'CEP incompatível com a Unidade da Federação';\n case '52':\n return 'Unidade da Federação Inválida';\n case '53':\n return 'Tipo/Número de Inscrição do Sacador/Avalista Inválidos';\n case '54':\n return 'Sacador/Avalista Não Informado';\n case '55':\n return 'Nosso número no Banco Correspondente Não Informado';\n case '56':\n return 'Código do Banco Correspondente Não Informado';\n case '57':\n return 'Código da Multa Inválido';\n case '58':\n return 'Data da Multa Inválida';\n case '59':\n return 'Valor/Percentual da Multa Inválido';\n case '60':\n return 'Movimento para Título Não Cadastrado';\n case '61':\n return 'Alteração da Agência Cobradora/DV Inválida';\n case '62':\n return 'Tipo de Impressão Inválido';\n case '63':\n return 'Entrada para Título já Cadastrado';\n case '64':\n return 'Número da Linha Inválido';\n case '65':\n return 'Código do Banco para Débito Inválido';\n case '66':\n return 'Agência/Conta/DV para Débito Inválido';\n case '67':\n return 'Dados para Débito incompatível com a Identificação da Emissão do Boleto de Pagamento';\n case '68':\n return 'Débito Automático Agendado';\n case '69':\n return 'Débito Não Agendado - Erro nos Dados da Remessa';\n case '70':\n return 'Débito Não Agendado - Pagador Não Consta do Cadastro de Autorizante';\n case '71':\n return 'Débito Não Agendado - Beneficiário Não Autorizado pelo Pagador';\n case '72':\n return 'Débito Não Agendado - Beneficiário Não Participa da Modalidade Débito Automático';\n case '73':\n return 'Débito Não Agendado - Código de Moeda Diferente de Real (R$)';\n case '74':\n return 'Débito Não Agendado - Data Vencimento Inválida';\n case '75':\n return 'Débito Não Agendado, Conforme seu Pedido, Título Não Registrado';\n case '76':\n return 'Débito Não Agendado, Tipo/Num. Inscrição do Debitado, Inválido';\n case '77':\n return 'Transferência para Desconto Não Permitida para a Carteira do Título';\n case '78':\n return 'Data Inferior ou Igual ao Vencimento para Débito Automático';\n case '79':\n return 'Data Juros de Mora Inválido';\n case '80':\n return 'Data do Desconto Inválida';\n case '81':\n return 'Tentativas de Débito Esgotadas - Baixado';\n case '82':\n return 'Tentativas de Débito Esgotadas - Pendente';\n case '83':\n return 'Limite Excedido';\n case '84':\n return 'Número Autorização Inexistente';\n case '85':\n return 'Título com Pagamento Vinculado';\n case '86':\n return 'Seu Número Inválido';\n case '87':\n return 'e-mail/SMS enviado';\n case '88':\n return 'e-mail Lido';\n case '89':\n return 'e-mail/SMS devolvido - endereço de e-mail ou número do celular incorreto';\n case '90':\n return 'e-mail devolvido - caixa postal cheia';\n case '91':\n return 'e-mail/número do celular do Pagador não informado';\n case '92':\n return 'Pagador optante por Boleto de Pagamento Eletrônico - e-mail não enviado';\n case '93':\n return 'Código para emissão de Boleto de Pagamento não permite envio de e-mail';\n case '94':\n return 'Código da Carteira inválido para envio e-mail.';\n case '95':\n return 'Contrato não permite o envio de e-mail';\n case '96':\n return 'Número de contrato inválido';\n case '97':\n return 'Rejeição da alteração do prazo limite de recebimento (a data deve ser informada no campo 28.3.p)';\n case '98':\n return 'Rejeição de dispensa de prazo limite de recebimento';\n case '99':\n return 'Rejeição da alteração do número do título dado pelo Beneficiário';\n case 'A1':\n return 'Rejeição da alteração do número controle do participante';\n case 'A2':\n return 'Rejeição da alteração dos dados do Pagador';\n case 'A3':\n return 'Rejeição da alteração dos dados do Sacador/avalista';\n case 'A4':\n return 'Pagador DDA';\n case 'A5':\n return 'Registro Rejeitado – Título já Liquidado';\n case 'A6':\n return 'Código do Convenente Inválido ou Encerrado';\n case 'A7':\n return 'Título já se encontra na situação Pretendida';\n case 'A8':\n return 'Valor do Abatimento inválido para cancelamento';\n case 'A9':\n return 'Não autoriza pagamento parcial';\n case 'B1':\n return 'Autoriza recebimento parcial';\n case 'B2':\n return 'Valor Nominal do Título Conflitante';\n case 'B3':\n return 'Tipo de Pagamento Inválido';\n case 'B4':\n return 'Valor Máximo/Percentual Inválido';\n case 'B5':\n return 'Valor Mínimo/Percentual Inválido';\n default:\n return 'Código de rejeição desconhecido';\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.cnpjCpf) {\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.cnpjCpf = maskFormat.retornaCpfCnpjFormatado(\n dadosPDF.beneficiario.cnpjCpf,\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.cnpjCpf = maskFormat.retornaCpfCnpjFormatado(dadosPDF.pagador.cnpjCpf);\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 { carne } from '@/carne';\nimport { 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\n// TYPES RETORNO BOLETOS\nexport { IDocumentoRetornoBancoBrasil } from './banks/banco-brasil/types';\nexport { IDocumentoRetornoSicoob } from './banks/sicoob/types';\nexport { IDocumentoRetornoAilos } from './banks/ailos/types';\nexport { IDocumentoRetornoSicredi } from './banks/sicredi/types';\n\nexport default {\n gerar,\n pdf,\n remessa,\n retorno,\n carne,\n}\n"],"mappings":"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AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;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O;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;ACvUO,IAAM,cAAc;AAAA,EACzB,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AACF;;;ACHO,SAAS,MAAM,EAAE,OAAO,MAAM,GAAiB;AACpD,MAAI,6BAAuB;AACzB,WAAO,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAEA,MAAI,gCAA0B;AAC5B,WAAO,SAAS,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAAA,EACnD;AAEA,MAAI,+BAAyB;AAC3B,WAAO,QAAQ,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAAA,EAClD;AAEA,MAAI,8BAAwB;AAC1B,WAAO,OAAO,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAAA,EACjD;AAEA,MAAI,oCAA8B;AAChC,WAAO,YAAY,iBAAiB,EAAE,OAAO,MAAK,CAAC;AAAA,EACrD;AACF;;;AC1BA,OAAOC,aAAY;AASnB,SAAsBC,UAAS,IAA0B;AAAA,6CAA1B,EAAE,MAAM,GAAkB;AACvD,QAAI;AACF,YAAM,EAAE,SAAS,IAAI;AAErB,UAAI,CAAC,SAAS,QAAQ,SAAS;AAC7B,cAAM,IAAI,MAAM,0CAAqC;AAAA,MACvD;AAEA,YAAMC,eAAc,MAAMC,QAAO,SAAS;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,OAAO;AAAA,QACtB,QAAQ;AAAA,MACV,CAAC;AAED,eAAS,aAAa,cAAc,UAClC,SAAS,aAAa,cAAc,QAAQ,SAAS,GAAG,GAAG;AAE7D,eAAS,OAAO,iBAAiB,mBAAW,YAAY,SAAS,OAAO,cAAc;AACtF,eAAS,aAAa,UAAU,mBAAW;AAAA,QACzC,SAAS,aAAa;AAAA,MACxB;AACA,eAAS,aAAa,SAAS,MAAM,mBAAW;AAAA,QAC9C,SAAS,aAAa,SAAS;AAAA,MACjC;AACA,eAAS,QAAQ,SAAS,MAAM,mBAAW;AAAA,QACzC,SAAS,QAAQ,SAAS;AAAA,MAC5B;AACA,eAAS,QAAQ,UAAU,mBAAW,wBAAwB,SAAS,QAAQ,OAAO;AAEtF,YAAM,iBAAiB,OAAO,SAAS,OAAO,cAAc;AAC5D,eAAS,OAAO,iBAAiB,mBAAW;AAAA,QAC1C,SAAS,OAAO;AAAA,MAClB;AAEA,YAAM,WAAW,SAAS,aAAa,cAAc;AACrD,YAAM,WAAY,WAAW,MAAM,KAAM;AAEzC,UAAI,WAAW,GAAG;AAChB,iBAAS,OAAO,aAAa,CAAC,2CAAwC,mBAAW,aAAa,QAAQ,CAAC,WAAW,GAAG,SAAS,OAAO,UAAU;AAAA,MACjJ;AAEA,YAAM,qBAAqB,SAAS,aAAa,cAAc,YAAY;AAC3E,UAAI,qBAAqB,GAAG;AAC1B,iBAAS,OAAO,aAAa,CAAC,6CAA0C,kBAAkB,KAAK,GAAG,SAAS,OAAO,UAAU;AAAA,MAC9H;AAEA,YAAM,cAAc,SAAS,aAAa,cAAc,SAAS;AACjE,UAAI,cAAc,GAAG;AACnB,iBAAS,OAAO,aAAa,CAAC,YAAY,WAAW,KAAK,GAAG,SAAS,OAAO,UAAU;AAAA,MACzF;AAEA,YAAM,eAAe,SAAS,aAAa,cAAc,YAAY;AACrE,UAAI,eAAe,GAAG;AACpB,iBAAS,OAAO,aAAa,CAAC,qBAAkB,YAAY,gCAAgC,GAAG,SAAS,OAAO,UAAU;AAAA,MAC3H;AAEA,YAAM,UAAU,WAAW,iBAAiB,iBAAiB,GAAG,iCAC3D,WAD2D;AAAA,QAE9D,QAAQ,iCACH,SAAS,SADN;AAAA,UAEN,kBAAkBD,aAAY,SAAS,QAAQ;AAAA,UAC/C,mBAAmBE,WAAU,GAAG,SAAS,aAAa,cAAc,OAAO,GAAG,SAAS,aAAa,cAAc,KAAK,GAAG,SAAS,aAAa,cAAc,cAAc,GAAG,SAAS,OAAO,WAAW,EAAE;AAAA,QAC9M;AAAA,MACF,EAAC;AAED,YAAM,SAAqB;AAAA,QACzB,qBAAqB;AAAA,QACrB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,iBAAiB;AAAA,MACnB;AAEA,YAAM,WAAW,MAAM,IAAI,KAAK,KAAK,EAAE,SAAS,OAAO,CAAC;AACxD,YAAM,SAAS,OAAO,KAAK,SAAS,KAAK,GAAG;AAC5C,YAAM,YAAY,MAAM,WAAW,MAAM;AAEzC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAI,KAAK;AACjB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;AAEA,SAASA,WAAU,OAAe;AAChC,MAAI,IAAI,MAAM;AACd,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,SAAO,KAAK,GAAG;AACb,QAAI,MAAM,IAAI,IAAI;AAElB,QAAI,QAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AACpC,YAAQ,QAAQ;AAEhB,QAAI,SAAS,IAAI;AACf,cAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC;AAAA,IAC9D,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,YAAQ;AACR;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,IAAI,EAAE,MAAM,CAAC;AACvE,WAAS,KAAK;AACd,MAAI,WAAW;AAAI,aAAS;AAC5B,SAAO,OAAO,MAAM;AACtB;;;AC5HO,IAAM,OAAO;AAAA,EAClB,UAAAC;AACF;;;ACIO,SAAS,IAAI,EAAE,OAAO,MAAM,GAAc;AAC/C,MAAI,6BAAuB;AACzB,WAAO,MAAM,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EACxC;AAEA,MAAI,gCAA0B;AAC5B,WAAO,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAC3C;AAEA,MAAI,+BAAyB;AAC3B,WAAO,QAAQ,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAC1C;AAEA,MAAI,8BAAwB;AAC1B,WAAO,OAAO,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EACzC;AAEA,MAAI,oCAA8B;AAChC,WAAO,YAAY,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAC9C;AAEA,MAAI,4BAAsB;AACxB,WAAO,KAAK,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EACvC;AACF;;;ACzBO,SAAS,QAAQ,EAAE,OAAO,MAAM,GAAkB;AACvD,MAAI,6BAAuB;AACzB,WAAO,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC5C;AAEA,MAAI,gCAA0B;AAC5B,WAAO,SAAS,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC/C;AAEA,MAAI,+BAAyB;AAC3B,WAAO,QAAQ,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC9C;AAEA,MAAI,8BAAwB;AAC1B,WAAO,OAAO,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC7C;AAEA,MAAI,oCAA8B;AAChC,WAAO,YAAY,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAClD;AACF;;;ACpBO,SAAS,QAAQ,EAAE,OAAO,MAAM,GAAkB;AACvD,MAAI,6BAAuB;AACzB,WAAO,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC5C;AAEA,MAAI,gCAA0B;AAC5B,WAAO,SAAS,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC/C;AAEA,MAAI,+BAAyB;AAC3B,WAAO,QAAQ,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC9C;AAEA,MAAI,oCAA8B;AAChC,WAAO,YAAY,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAClD;AAEA,MAAI,8BAAwB;AAC1B,WAAO,OAAO,aAAa,EAAE,OAAO,MAAM,CAAC;AAAA,EAC7C;AACF;;;AClBO,SAAS,aAAa,EAAE,UAAU,GAAY;AACnD,MAAI,WAAW;AACb,UAAM,EAAE,eAAe,IAAI,IAAI;AAE/B,QAAI;AAAK,UAAI,SAAS,UAAU;AAChC,QAAI;AAAe,UAAI,SAAS,QAAQ,OAAO,gBAAgB;AAAA,EACjE;AACF;;;ACDA,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["formatter","codigoBarra","retorno","codigoBarra","BwipJs","codigoBarra","BwipJs","format","Banco","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","format","remessa","parse","gerarRetorno","parse","retornaMotivoRejeicao","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getValor","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","addDays","format","gerarRemessa","format","remessa","addDays","gerarRetorno","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","gerarDadosBoleto","getNossoNumero","getValor","getDigitoGeral","codigoBarra","getDigito","addDays","format","gerarRemessa","format","remessa","addDays","BwipJs","StringMask","gerarPDF","codigoBarra","BwipJs","StringMask","parse","gerarRetorno","parse","retornaMotivoRejeicao","gerarDadosBoleto","gerarRemessa","gerarPDF","gerarRetorno","gerarDadosBoleto","getValor","getNossoNumero","getDigitoGeral","codigoBarra","getDigito","BwipJs","gerarPDF","codigoBarra","BwipJs","format","gerarRemessa","format","remessa","getNossoNumero","parse","gerarRetorno","parse","retornaMotivoRejeicao","gerarDadosBoleto","gerarPDF","gerarRemessa","gerarRetorno","BwipJs","gerarPDF","codigoBarra","BwipJs","getDigito","gerarPDF"]}