OCR Pipeline — Extração de Documentos¶
1. Visão Geral¶
- Slug:
ocr-pipeline - Grupo: Geral
- Página (rota):
/ocr-pipeline - API base:
/api/ocr-pipeline - Permissão RBAC:
tool:ocr-pipelineoutool:*(ADMIN acessa)
Envie PDFs, imagens (JPG, PNG, TIFF, BMP) ou um ZIP contendo vários arquivos. O sistema realiza OCR, classifica o tipo de documento (nota fiscal, recibo, contrato…) e extrai campos como CNPJ, CPF, datas e valores. O resultado é uma planilha Excel com todos os dados organizados.
2. Objetivo Operacional¶
- Automatizar a leitura e indexação de documentos físicos digitalizados ou PDFs nativos sem necessidade de digitação manual.
- Suporta envio único, múltiplos arquivos e ZIP com vários documentos internos.
- Exibe aviso explícito para arquivos que não foram convertidos corretamente, sem interromper o lote.
3. Arquivos Relacionados (Verificados)¶
- Página HTML:
public/ocr-pipeline.html - Script JS da ferramenta:
public/js/ocr-pipeline.js - Router Node:
src/routes/tools/ocr-pipeline.routes.js - Multer (storage):
src/services/tool-storage.service.js→uploadOcrPipeline - Endpoint Python:
api/integra_api.py→POST /api/ocr-pipeline/processar - Pipeline Python:
Robôs Leonardo/OCR Pipeline/pipeline.py(chamado viapipeline.run()) - Catálogo:
src/core/tool-catalog.json→ slugocr-pipeline - Sidebar:
public/js/sidebar.js→ grupogeral
4. Rotas e Endpoints¶
- Rota de página:
/ocr-pipeline - Base de API:
/api/ocr-pipeline - Endpoints no router:
POST /processar— recebe arquivos via multer, salva em job dir, chama Python via axiosGET /download/:jobId— serve o Excel gerado para download
5. Fluxo Técnico (Página → Node → Python)¶
- Usuário seleciona arquivos (drag-and-drop ou seleção manual) e clica em Processar.
- Frontend faz
POST /api/ocr-pipeline/processarcommultipart/form-data(campofiles). - Node salva os arquivos em
data/ocr-pipeline/<jobId>/input/. - Node chama
axios.post(PY_BASE_URL + '/api/ocr-pipeline/processar', { input_dir, output_excel }). - Python (
integra_api.py) extrai ZIPs, chamapipeline.run()e devolve JSON comtotal,ok_count,failed[]. - Node retorna
{ ok, total, ok_count, failed, downloadUrl }ao frontend. - Frontend habilita o botão de download e exibe aviso com a lista de arquivos com problema.
GET /api/ocr-pipeline/download/:jobIdserve o arquivoresultado.xlsx.
6. Configuração (variáveis de ambiente opcionais)¶
| Variável | Padrão | Descrição |
|---|---|---|
OCR_PIPELINE_DIR |
../../Robôs Leonardo/OCR Pipeline (relativo ao repositório) |
Caminho até a pasta do pipeline OCR Python |
Se o pipeline estiver instalado no mesmo ambiente Python que o integra_api.py, nenhuma variável extra é necessária — o caminho padrão é resolvido automaticamente.
7. Segurança e Governança¶
- Exige autenticação ativa no portal.
- RBAC por ferramenta (
tool:ocr-pipeline,tool:*, ADMIN). - Multer: disco, máximo 50 arquivos por envio, 200 MB por arquivo.
- Download protegido por validação de
jobId(regex[\w-]+) epath.resolveanti-traversal. auditLogregistrapage_view_ocr_pipelinena abertura da página.
8. Entradas e Saídas Esperadas¶
- Entradas: arquivos
.pdf,.jpg,.jpeg,.png,.tiff,.tif,.bmp,.zip(campofiles). - Saídas:
- JSON
{ ok, total, ok_count, failed[], downloadUrl }no POST. - Arquivo
ocr-pipeline-resultado.xlsxno GET de download. - Erros esperados:
503se o módulo OCR Pipeline não estiver carregado no ambiente Python.400se nenhum arquivo for enviado.404no download se o Excel não tiver sido gerado (pipeline falhou completamente).
9. Troubleshooting Rápido¶
- 503 no processamento: verificar se
OCR_PIPELINE_DIRaponta para a pasta correta e se as dependências do pipeline estão instaladas no venv Python (pip install -r requirements.txtna pasta do pipeline). - 401/403: conferir sessão do usuário e permissão RBAC.
- 404 no download: o pipeline pode ter falhado antes de gerar o Excel — verificar logs do
integra_api.py. - 500: inspecionar logs do Node (
console.error) e logs do servidor Python. - Arquivos no aviso de falha: normal para PDFs corrompidos ou imagens muito baixa resolução — os demais arquivos do lote são processados normalmente.
10. Observações de Manutenção¶
- Os arquivos de job em
data/ocr-pipeline/não são limpos automaticamente — implementar rotina de limpeza periódica se necessário. - Ao atualizar o pipeline Python, verificar compatibilidade da interface
pipeline.run()e dos campos deDocumentRecord. - Se incluir nova API/fluxo, atualizar este documento e
src/core/tool-catalog.json.