[{"heading":"CORTEX — Arquitetura de RAG e Ingestão Vetorial","level":1,"anchor":"cortex-arquitetura-de-rag-e-ingestão-vetorial","chars":793,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#cortex-arquitetura-de-rag-e-ingestão-vetorial","anchor_stable":false},{"heading":"1. Princípios travados","level":2,"anchor":"rag.principles.locked","chars":1324,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.principles.locked","anchor_stable":true},{"heading":"1.1. Donos do diálogo — três planos (fronteira)","level":3,"anchor":"rag.principles.dialogue-ownership","chars":1698,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.principles.dialogue-ownership","anchor_stable":true},{"heading":"2. Topologia","level":2,"anchor":"rag.architecture.topology","chars":1807,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.architecture.topology","anchor_stable":true},{"heading":"3. Modelo de dados (Postgres por domínio)","level":2,"anchor":"rag.data-model.index","chars":313,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.index","anchor_stable":true},{"heading":"3.1. `documents` — fonte de conhecimento (pai do chunk)","level":3,"anchor":"rag.data-model.documents","chars":765,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.documents","anchor_stable":true},{"heading":"3.2. `chunks` — texto canônico vetorizável","level":3,"anchor":"rag.data-model.chunks","chars":1551,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.chunks","anchor_stable":true},{"heading":"3.3. Diálogo — fora deste modelo (aposenta `messages`)","level":3,"anchor":"rag.data-model.dialogue-excluded","chars":469,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.dialogue-excluded","anchor_stable":true},{"heading":"3.4. `outbox` — ponte transacional Postgres → Qdrant","level":3,"anchor":"rag.data-model.outbox","chars":1440,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.outbox","anchor_stable":true},{"heading":"3.5. Retenção e LGPD","level":3,"anchor":"rag.data-model.retention-lgpd","chars":1049,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.data-model.retention-lgpd","anchor_stable":true},{"heading":"4. Collections do Qdrant","level":2,"anchor":"rag.qdrant.collections","chars":43,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.qdrant.collections","anchor_stable":true},{"heading":"4.1. Nomenclatura e identidade","level":3,"anchor":"rag.qdrant.naming-identity","chars":572,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.qdrant.naming-identity","anchor_stable":true},{"heading":"4.2. Payload (mínimo — UNISCALE §26.4)","level":3,"anchor":"rag.qdrant.payload","chars":727,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.qdrant.payload","anchor_stable":true},{"heading":"4.3. Configuração via ambiente (UNISCALE §26.7)","level":3,"anchor":"rag.qdrant.configuration","chars":260,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.qdrant.configuration","anchor_stable":true},{"heading":"4.4. Denso agora, híbrido depois","level":3,"anchor":"rag.qdrant.dense-then-hybrid","chars":274,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.qdrant.dense-then-hybrid","anchor_stable":true},{"heading":"5. Ingestão e consistência (outbox)","level":2,"anchor":"rag.ingestion.index","chars":40,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.index","anchor_stable":true},{"heading":"5.1. O problema e a solução","level":3,"anchor":"rag.ingestion.problem","chars":383,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.problem","anchor_stable":true},{"heading":"5.2. Fluxo do worker (`<domain>-ingestion-worker`)","level":3,"anchor":"rag.ingestion.worker-flow","chars":739,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.worker-flow","anchor_stable":true},{"heading":"5.3. Update e delete","level":3,"anchor":"rag.ingestion.update-delete","chars":308,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.update-delete","anchor_stable":true},{"heading":"5.4. Troca de modelo (blue-green)","level":3,"anchor":"rag.ingestion.model-swap","chars":319,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.model-swap","anchor_stable":true},{"heading":"5.5. Rede de segurança","level":3,"anchor":"rag.ingestion.safety-net","chars":371,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.safety-net","anchor_stable":true},{"heading":"5.6. Evolução","level":3,"anchor":"rag.ingestion.evolution","chars":179,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.ingestion.evolution","anchor_stable":true},{"heading":"6. Dependência externa lenta — boleto (ai-secretary)","level":2,"anchor":"rag.external.slow-dependency","chars":209,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.external.slow-dependency","anchor_stable":true},{"heading":"6.1. Por que não cachear","level":3,"anchor":"rag.external.no-cache","chars":177,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.external.no-cache","anchor_stable":true},{"heading":"6.2. Fluxo assíncrono + single-flight","level":3,"anchor":"rag.external.async-single-flight","chars":731,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.external.async-single-flight","anchor_stable":true},{"heading":"6.3. Garantias","level":3,"anchor":"rag.external.guarantees","chars":315,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.external.guarantees","anchor_stable":true},{"heading":"7. Fronteiras adiadas conscientemente","level":2,"anchor":"rag.boundaries.deferred","chars":847,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#rag.boundaries.deferred","anchor_stable":true},{"heading":"CHANGELOG","level":2,"anchor":"changelog","chars":2270,"anchor_url":"https://docs.cortex.uniscale.tec.br/rag#changelog","anchor_stable":false}]