lex-document-ocr
Scannednpx machina-cli add skill fbmoulin/lex-intelligentia-skills/lex-document-ocr --openclawLex Document OCR — Processamento de Documentos Jurídicos Brasileiros
Arquitetura de Processamento
PDF/Imagem
│
▼
┌─────────────────────────────────────┐
│ CAMADA 1: Pré-processamento │
│ • Detecção de qualidade │
│ • Deskew + denoising │
│ • Identificação do tipo │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ CAMADA 2: Extração de Texto │
│ • OCR (Tesseract / AWS Textract / │
│ Google Vision / Azure Form) │
│ • Preservação de layout │
│ • Reconhecimento de tabelas │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ CAMADA 3: Estruturação Jurídica │
│ • Identificação de tipo de doc │
│ • Extração de entidades jurídicas │
│ • Normalização do texto │
└──────────────────┬──────────────────┘
│
▼
┌─────────────────────────────────────┐
│ CAMADA 4: Output │
│ • JSON estruturado / Markdown │
│ • Alimentação de sistemas │
│ • Exportação para n8n / APIs │
└─────────────────────────────────────┘
Tipos de Documentos e Extratores Específicos
1. Certidões de Cartório
Campos a extrair:
{
"tipo_certidao": "Certidão de Casamento | Nascimento | Óbito | Ônus Reais",
"numero_folha": "",
"numero_livro": "",
"data_lavratura": "",
"cartorio": {
"nome": "",
"oficio": "",
"comarca": "",
"uf": ""
},
"partes": [
{"papel": "titular | cônjuge", "nome": "", "cpf": "", "rg": ""}
],
"data_registro": "",
"observacoes": ""
}
2. Petições Iniciais
Campos a extrair:
{
"numero_processo": "",
"vara": "",
"comarca": "",
"uf": "",
"tipo_acao": "",
"autor": {"nome": "", "cpf_cnpj": "", "advogado": "", "oab": ""},
"reu": {"nome": "", "cpf_cnpj": ""},
"valor_causa": 0.00,
"pedidos": [],
"tutela_urgencia": false,
"data_distribuicao": ""
}
3. Decisões / Sentenças
Campos a extrair:
{
"numero_processo": "",
"classe_cnj": "",
"assunto_cnj": "",
"juiz": "",
"data_sentenca": "",
"resultado": "PROCEDENTE | IMPROCEDENTE | PROCEDENTE EM PARTE | EXTINÇÃO",
"valor_condenacao": 0.00,
"honorarios": 0.00,
"houve_tutela": false,
"dispositivo": "",
"prazo_recursal": "15 dias úteis"
}
4. Contratos (Bancários / Imobiliários / Prestação de Serviços)
Campos a extrair:
{
"tipo_contrato": "",
"numero_contrato": "",
"data_assinatura": "",
"partes": [
{"papel": "contratante | contratado | credor | devedor", "nome": "", "cpf_cnpj": ""}
],
"objeto": "",
"valor": 0.00,
"prazo": "",
"clausulas_relevantes": {
"juros": "",
"multa": "",
"rescisao": "",
"foro": "",
"arbitragem": false
}
}
5. Publicações no DJE / DOU
Campos a extrair:
{
"fonte": "DJE | DOU",
"data_publicacao": "",
"secao": "",
"numero_edicao": "",
"tipo_ato": "Portaria | Resolução | Despacho | Citação | Intimação",
"processo_referenciado": "",
"partes_citadas": [],
"prazo": "",
"texto_integra": ""
}
Padrões de Reconhecimento — Regex Jurídicos Brasileiros
# Número CNJ de processo
CNJ_PATTERN = r'\d{7}-\d{2}\.\d{4}\.\d\.\d{2}\.\d{4}'
# Exemplo: 0012345-67.2024.8.08.0012
# CPF
CPF_PATTERN = r'\d{3}\.\d{3}\.\d{3}-\d{2}'
# CNPJ
CNPJ_PATTERN = r'\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}'
# Data brasileira
DATE_BR_PATTERN = r'\d{2}/\d{2}/\d{4}'
# Valor monetário BRL
MONEY_BR_PATTERN = r'R\$\s*[\d\.,]+'
# OAB
OAB_PATTERN = r'OAB/?[A-Z]{2}\s*n?º?\s*[\d\.,]+'
# Número de livro/folha cartório
CARTORIO_PATTERN = r'[Ll]ivro\s*n?º?\s*[\d]+[,\s]+[Ff]olha\s*n?º?\s*[\d]+'
Estratégias de Processamento por Qualidade do Documento
Documento Digital (PDF gerado eletronicamente)
Estratégia: Extração direta de texto (pdfminer / PyMuPDF)
Confiança: 99%
Pipeline: PDF → text extraction → structured parsing
Documento Escaneado (qualidade alta, >200 DPI)
Estratégia: Tesseract 5 com language pack por_BRL + LSTM
Confiança: 85-95%
Pipeline: PDF → img conversion → preprocessing → Tesseract → cleanup
Documento Escaneado (qualidade baixa, manuscrito parcial)
Estratégia: Cloud OCR (AWS Textract ou Google Vision)
Confiança: 70-85%
Pipeline: PDF → enhance → Cloud OCR → post-processing → manual review flags
Documento Manuscrito
Estratégia: Claude Vision API para interpretação contextual
Confiança: 60-80% (dependente da caligrafia)
Recomendação: Sempre revisar manualmente
Integração com n8n — Workflow de Processamento em Lote
{
"name": "Lex OCR - Processamento em Lote",
"description": "Pipeline de OCR jurídico com n8n",
"nodes": [
{
"name": "Trigger Webhook",
"type": "n8n-nodes-base.webhook",
"description": "Recebe PDF via upload ou URL"
},
{
"name": "Detectar Tipo de Documento",
"type": "@n8n/n8n-nodes-langchain.agent",
"description": "AI classifica o tipo de documento jurídico"
},
{
"name": "Extrair Texto OCR",
"type": "n8n-nodes-base.httpRequest",
"description": "Envia para serviço OCR (Tesseract/Cloud)"
},
{
"name": "Estruturar com Claude",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"description": "Claude extrai e normaliza os campos jurídicos"
},
{
"name": "Salvar no Banco",
"type": "n8n-nodes-base.postgres",
"description": "Persiste JSON estruturado"
}
]
}
Normalização de Texto Jurídico Pós-OCR
Problemas comuns e correções:
| Problema OCR | Correção |
|---|---|
| "lnstrumento" → "Instrumento" | l/I confusion |
| "0 réu" → "O réu" | 0/O confusion |
| "artlgo" → "artigo" | l/i confusion |
| Hifenização incorreta no final da linha | Remove e reconstrói palavra |
| Números com pontos/vírgulas trocados | Normaliza para padrão BRL |
| Datas "1O/O2/2O24" → "10/02/2024" | O/0 confusion em datas |
Script de limpeza básico:
import re
def clean_legal_ocr(text: str) -> str:
# Remove quebras de linha artificiais
text = re.sub(r'(?<=[a-záéíóú])-\n(?=[a-záéíóú])', '', text, flags=re.IGNORECASE)
# Normaliza espaços múltiplos
text = re.sub(r' {2,}', ' ', text)
# Corrige "O" por "0" em números
text = re.sub(r'(?<=\d)O(?=\d)', '0', text)
# Normaliza números CNJ
text = re.sub(r'(\d{7})[–—-](\d{2})', r'\1-\2', text)
return text.strip()
Extração via Claude Vision
Quando receber um PDF ou imagem de documento jurídico, usar este prompt:
Você é um especialista em documentos jurídicos brasileiros.
Analise o documento e extraia as informações no formato JSON especificado.
Tipo de documento detectado: [tipo]
Campos a extrair: [lista de campos do schema]
Regras:
1. Preservar a escrita original dos nomes
2. Datas no formato YYYY-MM-DD
3. Valores monetários como números float (sem R$)
4. Se um campo não existir no documento, usar null
5. Para texto extenso (dispositivo, cláusulas), resumir em até 200 caracteres
Documento:
[conteúdo do documento]
Checklist de Qualidade da Extração
- Número CNJ identificado e validado (formato correto)
- Nomes das partes sem abreviações incorretas
- Datas no formato padrão
- Valores monetários sem erros de OCR
- Campos obrigatórios todos preenchidos (ou null)
- Texto de dispositivo/cláusulas preservado fielmente
- Confidence score do OCR documentado
- Flag de revisão manual quando confiança < 80%
Source
git clone https://github.com/fbmoulin/lex-intelligentia-skills/blob/main/skills/automacao/lex-document-ocr/SKILL.mdView on GitHub Overview
Lex Document OCR automatiza o processamento, extração, estruturação e análise de documentos jurídicos brasileiros (peças processuais, certidões, laudos, contratos e DJE/DOU). Converte PDFs e imagens em JSON estruturado, identifica dados de processo (CNJ, partes, datas, valores) e facilita integração com sistemas e automação em lote via n8n.
How This Skill Works
Funciona em quatro camadas: pré-processamento para checar qualidade, deskew e detectar o tipo de documento; extração de texto com OCR mantendo layout e reconhecendo tabelas; estruturação jurídica para identificar o tipo de documento e extrair entidades; e output estruturado em JSON para alimentar sistemas ou fluxos no n8n.
When to Use It
- Extrair texto de PDFs jurídicos escaneados ou digitais
- Estruturar informações de contratos, certidões, laudos ou decisões
- Identificar dados de processo (CNJ, partes, datas, valores)
- Converter documentos para formato editável
- Processar lotes de documentos (incluindo DJE/DOU) para alimentação de sistemas
Quick Start
- Step 1: Prepare os documentos (PDFs/imagens) e configure o motor OCR (Tesseract / AWS Textract / Google Vision / Azure Form) conforme necessidade
- Step 2: Execute o fluxo de quatro camadas (pré-processamento, extração, estruturação, output) para gerar JSON estruturado
- Step 3: Envie o JSON para o n8n ou integrações API para alimentar seus sistemas
Best Practices
- Garanta boa qualidade de imagem e resolução (mínimo 300 dpi) para o OCR
- Defina claramente o tipo de documento-alvo para orientar a extração de campos
- Habilite reconhecimento de tabelas e preservação de layout para documentos estruturados
- Valide resultados com revisão humana para dados sensíveis (CNJ, valores, datas)
- Padronize a saída JSON e utilize o fluxo n8n/APIs para ingestão automática
Example Use Cases
- Extrair cláusulas contratuais de contratos bancários e imobiliários
- Coletar dados de certidões de cartório para cadastros e due diligence
- Converter sentenças em formato editável (Word) para revisão jurídica
- Processar publicações no DJE/DOU para monitoramento regulatório
- Extrair número CNJ, partes e datas de petições e decisões para dashboards