Document Processing Pipeline
Pipeline de processamento de documentos com detecção automática de tabelas de preço, chunking estratégico e geração automática de catálogos para RAG.
⚡ O Problema
Clínicas enviam tabelas de preço em formatos diversos (PDF, Excel, Word). Chunking tradicional quebra tabelas no meio, destruindo a relação entre procedimento e preço:
Clareamento R$ 800,00
Extração simples R$..."
--- FIM DO CHUNK ---
"...250,00
Canal R$ 600,00..."
✨ A Solução
Detecção Automática de Tabelas (Docling)
Análise estrutural do documento para identificar tabelas de preço vs texto corrido (FAQ, políticas):
- →Heurísticas de layout (colunas, bordas, alinhamento)
- →Detecção de padrões monetários (R$, $, €)
- →Headers típicos ("Procedimento", "Valor", "Preço")
Chunking Estratégico
Estratégias diferentes para tipos de conteúdo diferentes:
TableRow Strategy: Cada linha da tabela vira um chunk atômico. Nunca quebra no meio de um preço.
Semantic Chunking: Chunks por parágrafo ou seção semântica, com overlap para contexto.
Catálogo Automático
Extração estruturada gera catálogo JSON pronto para busca:
{
"catalog_id": "clinica_demo_pricing",
"items": [
{
"name": "Limpeza Dental",
"aliases": ["profilaxia", "limpeza"],
"payments": [
{ "method": "pix", "value": 150.00 },
{ "method": "cartao", "value": 165.00 }
],
"metadata": { "category": "preventivo" }
}
],
"match": { "min_score": 0.82 }
}🏗️ Pipeline de Processamento
┌─────────────────────────────────────────────────────────────┐
│ DOCUMENTO UPLOAD │
│ (PDF, Excel, Word) │
└─────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 1. HASH CHECK │
│ - Verifica duplicados via SHA-256 │
│ - Skip se já processado │
└─────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. DOCLING ANALYSIS │
│ - Detecta tipo de conteúdo (tabela vs texto) │
│ - Extrai estrutura do documento │
└─────────────────────────┬───────────────────────────────────┘
▼
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────────────┐
│ PRICING TABLE │ │ TEXT CONTENT │
│ - TableRow chunks │ │ - Semantic chunks │
│ - Catalog extract │ │ - Overlap for context │
└─────────┬───────────┘ └─────────────┬───────────────┘
│ │
└───────────────┬─────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. EMBEDDING GENERATION │
│ - OpenAI text-embedding-3-large (3072d) │
│ - Batch processing para eficiência │
└─────────────────────────┬───────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. STORAGE (Memory Engine) │
│ - Chunks → pgvector │
│ - Catalog → pricing_catalogs table │
│ - HNSW index update (async via Celery) │
└─────────────────────────────────────────────────────────────┘⚡ HNSW Index Auto-Update
Índices HNSW são atualizados automaticamente via Celery workers, garantindo que novos documentos estejam disponíveis para busca em minutos:
- →Trigger: Upload de documento ou schedule periódico
- →Rebuild: Incremental quando possível, full rebuild se necessário
- →Zero-downtime: Novo índice é criado em paralelo, swap atômico