Conversor Extrato PDF para OFX¶
- Slug:
conversor-extrato-pdf-ofx - Grupo: Contabil
- API Base:
/api/conversor-extrato-pdf-ofx - Classificacao operacional:
vps-compatible
O que esta ferramenta faz¶
Converte extratos bancarios em PDF para OFX, com suporte aos layouts de extrato Sicredi, Evolua, Stone, Banco 334 e Sicoob/SISBR. Aceita envio de um ou varios PDFs e disponibiliza o resultado por arquivo (OFX) e em lote (ZIP).
Como acessar¶
- Pagina:
/conversor-extrato-pdf-ofx - Permissao:
tool:conversor-extrato-pdf-ofxoutool:* - Categoria no menu: Contabil
Endpoint principal¶
POST /api/conversor-extrato-pdf-ofx/processarmultipart/form-data- Campos:
arquivos(1..N PDFs)bankid(opcional, padrao0000; codigo do banco escrito dentro da tagBANKIDdo OFX)acctid(opcional; numero/identificador da conta escrito na tagACCTID; se vazio, usa a conta detectada no PDF)
Saida¶
- Lista de resultados por arquivo (status, banco identificado, conta final, total de lancamentos).
ofxBase64para download individual.zipBase64para download consolidado.
Campos OFX¶
BANKID: identificador do banco no arquivo OFX. A ferramenta nao deduz esse valor hoje; ela envia exatamente o que for informado no formulario.ACCTID: identificador da conta no OFX. Quando o campo fica vazio, a API tenta extrair a conta do proprio extrato PDF e usa esse valor no arquivo final.
Correcao registrada em 2026-03-24¶
- Sintoma: a ferramenta abria por URL direta, mas nao aparecia no card da home nem na sidebar do portal.
- Causa provavel: integracao parcial da navegacao; o slug existia no catalogo oficial e nas rotas, mas faltava cadastro manual em
public/js/sidebar.jse o card correspondente empublic/home.html. - Solucao: inclusao da ferramenta na sidebar, criacao do card na home e reforco da explicacao de
BANKID/ACCTIDna propria tela.
Correcao registrada em 2026-03-25¶
- Sintoma: o PDF da Stone podia exigir preenchimento manual de
ACCTIDou gerar OFX com conta0000. - Causa provavel: no extrato Stone o campo
Contapode vir sem:e em linha separada, fora do padrao usado pela regex anterior. - Solucao: ajuste da extracao de conta para aceitar
Contasem:e com quebra de linha; regressao validada com os PDFs de exemplo da Stone, Evolua e Sicredi.
Correcao registrada em 2026-03-25 (lancamentos e saldo final Stone)¶
- Sintoma: o OFX da Stone podia sair com um lancamento a menos e com
LEDGERBALdivergente do saldo final do PDF. - Causa provavel: o parser nao capturava movimentos em linha unica (ex.:
Saida Tarifa - R$ 0,11 R$ 14,89) e sobrescrevia o saldo final com o saldo mais antigo do extrato, embora a Stone apresente os movimentos em ordem decrescente. - Solucao: suporte a linhas Stone com descricao, valor e saldo na mesma linha, coleta mais robusta de contraparte e preservacao do primeiro saldo lido como saldo final real do extrato.
Correcao registrada em 2026-03-25 (novo layout mensal do Evolua)¶
- Sintoma: o extrato
EXTRATO MES DE JULHO A DEZEMBRO 2025 EVOLUA.pdfnao era reconhecido pelo parser antigo do Evolua. - Causa provavel: esse modelo usa uma camada de texto codificada diferente do layout
EXTRATO ESPECIAL, o que fazia a extracao direta falhar nas datas, valores e descricao. - Solucao: adicionado fallback OCR apenas para esse layout, preservando o parser antigo do Evolua e calculando o valor pelo saldo do proprio extrato para reduzir divergencias.
Correcao registrada em 2026-03-25 (datas OCR do Evolua mensal)¶
- Sintoma: o fallback OCR do novo layout Evolua reconhecia a maior parte das linhas, mas alguns dias vinham corrompidos, como
86/08/2025. - Causa provavel: o OCR estava trocando o
0inicial do dia por8em uma pequena parte das linhas. - Solucao: correção conservadora de datas OCR invalidas antes do
datetime.strptime, sem alterar o parser classico do Evolua.
Correcao registrada em 2026-03-26 (mes/ano OCR do Evolua mensal)¶
- Sintoma: algumas linhas do layout mensal do Evolua apareciam com mes fora do padrao e ano corrompido, como
27/18/225e10/12/2825. - Causa provavel: o OCR do PDF mensal mistura mes de uma pagina com leitura falsa de ano e, em alguns casos,
datetime.strptimeaceitava o ano errado como valido. - Solucao: inferencia de mes por pagina, aceitando meses de 1 digito no OCR e rejeitando anos fora da faixa esperada antes de aplicar a correção.
Correcao registrada em 2026-03-26 (qualidade OCR do Evolua mensal)¶
- Sintoma: o layout mensal do Evolua ainda gerava pequenas divergencias em credito, debito e saldo quando a imagem era rasterizada com escala baixa.
- Causa provavel: a leitura OCR perdia nitidez em algumas paginas intermediarias, mesmo com o extrato sendo de linha unica e colunas bem definidas.
- Solucao: aumento da escala de OCR usada pelo parser mensal do Evolua para melhorar a leitura dos valores e manter o parser classico, Stone e Sicredi sem alteracao.
Correcao registrada em 2026-03-26 (fallback local do conversor)¶
- Sintoma: a conversao falhava com
connect ECONNREFUSED 127.0.0.1:8001quando a API Python nao estava em execucao. - Causa provavel: a rota do Node dependia exclusivamente do FastAPI local para converter os PDFs.
- Solucao: adicionado fallback local no proprio Node para executar o core Python do conversor quando o FastAPI estiver indisponivel, mantendo a mesma resposta para a tela.
Correcao registrada em 2026-03-26 (normalizacao do historico OCR do Evolua mensal)¶
- Sintoma: o OFX do layout mensal do Evolua ainda saia com ruido de historico, principalmente em espacamento ao redor de
-,CR.INTERNET,PG.P/INTERNETe alguns titulos curtos comoPREST.EMPRESTeTAXA C/C NEG.. - Causa provavel: o OCR entregava a mesma informacao com variacoes de pontuacao e espacamento entre paginas, gerando divergencia visual desnecessaria no campo
MEMO. - Solucao: normalizacao adicional do
MEMOapenas para o parser OCR do Evolua mensal, preservando data e valor e reduzindo o ruido de comparacao com o PDF.
Correcao registrada em 2026-03-31 (layout Sicredi CCPI Iguacu)¶
- Sintoma: o PDF
EXTRATO.pdfda Sicredi/Iguacu era reconhecido como Sicredi, mas o conversor geravaNenhum lancamento foi identificado para gerar OFX. - Causa provavel: esse layout vem com o texto praticamente colado em uma unica linha por pagina, usa saldos negativos com sinal na frente (
-41,84) e nao encaixa no parser Sicredi antigo baseado emsplitlines(). - Solucao: adicionado parser segmentado para o layout
CCPI IGUACU, com leitura por data no texto bruto, reconhecimento de saldos com sinal frontal e preservacao do parser Sicredi classico como fallback.
Correcao registrada em 2026-06-09 (layout Banco 334)¶
- Sintoma: os PDFs
extrato (1).pdfeEXTRATO VILELLA.pdfnao eram identificados, retornandoNao foi possivel identificar o banco neste PDF. - Causa provavel: o modelo usa cabecalho
Data Hora Tipo Descricao Status Valor, linhas comSucessoR$/Sucesso-R$, tarifas em linhas separadas (TarifaCobrada...) e datas/horas parcialmente coladas, fora dos parsers Sicredi, Evolua e Stone. - Solucao: adicionado parser especifico para o layout
Banco 33423888, com suporte a lancamentos multiline, repeticao de data/hora para tarifas, extracao da conta e saldo final pelo ultimo bloco do PDF.
Correcao registrada em 2026-06-09 (fallback quando FastAPI esta stale)¶
- Sintoma: a tela ja exibia suporte a
Banco 334, mas o processamento continuava retornandoNao foi possivel identificar o banco neste PDF. - Causa provavel: o Node estava ativo com arquivos publicos atualizados, enquanto o FastAPI em
127.0.0.1:8001ainda mantinha o modulo Python antigo carregado em memoria e respondia com erro funcional em vez de indisponibilidade. - Solucao: a rota Node passou a tentar o fallback local tambem quando o FastAPI responde que nao identificou o banco, alem do fallback ja existente para conexao recusada/timeout.
Correcao registrada em 2026-06-11 (Evolua OCR com saldo anterior usando dois-pontos)¶
- Sintoma: o PDF
EXTRATO 01 A 04.2026.pdfera identificado como Evolua via OCR, mas a tela retornavaNenhum lancamento foi identificado para gerar OFX. - Causa provavel: o OCR desse modelo le o cabecalho como
SALDO ANTERIOR: 8,46; o parser OCR aceitava apenasSALDO ANTERIOR 8,46, sem dois-pontos, e por isso nao inicializava o saldo base para processar as linhas. - Solucao: o parser OCR do Evolua passou a aceitar
SALDO ANTERIOR:e a detectarCONTA/DVtambem no texto OCR, preservando o suporte ao layout Banco 334.
Correcao registrada em 2026-06-11 (sinal de debitos no Evolua OCR)¶
- Sintoma: o OFX do
EXTRATO 01 A 04.2026.pdfera gerado, mas pagamentos e debitos entravam como recebimentos, deixando todos os lancamentos comoCREDIT. - Causa provavel: o OCR entrega muitos valores sem sinal negativo, usando apenas a letra
Dapos o valor ou o historico (DEBITO,SAQUE,PGTO,DB.COTAS) para indicar saida; o parser usava o valor numerico absoluto e ignorava esse sentido. - Solucao: o parser OCR do Evolua passou a separar valor do lancamento e saldo da linha, aplicar
D/C, inferir o sentido pelo historico quando a letra faltar, e corrigir datas OCR comOno lugar de zero (ex.:3O/03/26) para nao perder lancamentos.
Correcao registrada em 2026-06-15 (layout Sicoob/SISBR OCR)¶
- Sintoma: os PDFs
FEVEREIRO.pdf,MARCO.pdf,ABRIL.pdfeMAIO.pdfdo Sicoob/SISBR nao eram identificados, pois a camada de texto vinha vazia e o layout nao existia no conversor. - Causa provavel: esse modelo e uma impressao/imagem do extrato
EXTRATO CONTA CORRENTEdo Sicoob, com colunas lidas por OCR (DATA,DOCUMENTO,HISTORICO,VALOR) e valores sinalizados porC/D. - Solucao: adicionado parser OCR por posicao de coluna para Sicoob/SISBR, extracao da conta
CONTA:, leitura de creditos/debitos por sufixoC/De reconciliacao explicita porSALDO DO DIAquando o OCR omite o sufixo do valor.