Formatos Suportados no Upload
Seu acervo raramente é só PDF: relatórios em Word, planilhas de execução, apresentações, páginas salvas em HTML — e tudo isso muitas vezes compactado em um ZIP. A página de Upload aceita documentos Office (DOCX, XLSX, PPTX) e HTML como arquivo, inclusive dentro de pacotes ZIP/TAR/GZ. Cada formato é extraído preservando a estrutura (seções, planilhas, slides) e segue pelo mesmo caminho de sempre: divisão em trechos, vetores semânticos, identificação de entidades, grafo e busca. Você envia o que tem, do jeito que tem.
Este guia detalha o que é aceito, os limites e as regras de rejeição. O fluxo geral de upload — contexto de destino, fila de lotes, acompanhamento — está no guia de upload e ingestão.
1. Formatos aceitos
| Grupo | Extensões |
|---|---|
| Documento | pdf, docx |
| Planilha | xlsx |
| Apresentação | pptx |
| Web | html, htm |
| Texto/dados | txt, csv, json, xml, md, tsv, log |
| Pacotes | zip, gz, gzip, tar, tar.gz, tgz (contendo qualquer formato acima) |
Arquivo fora da lista é recusado com:
"Formato de arquivo não suportado: .<ext>. Formatos aceitos: PDF, DOCX, XLSX, PPTX, HTML, TXT, CSV, JSON, XML, MD, TSV e LOG."
2. Limites por formato
Estes são os valores padrão. O administrador pode ajustá-los na instalação pelas variáveis de ambiente indicadas.
| Limite | Valor | De onde vem |
|---|---|---|
| Upload (qualquer arquivo/requisição) | 256 MB | Limite de corpo da requisição na borda da plataforma, alinhado ao limite de leitura em memória da mesma borda; na ingestão, o multipart é gravado em disco (spring.webflux.multipart, teto de 300 MB por parte) |
| sem teto próprio — vale o limite geral de 256 MB | O PDF é lido direto do arquivo, em acesso aleatório: um "inteiro teor" de 1.700+ páginas e 118 MB não passa pela memória da aplicação | |
| DOCX | 25 MB | datta.document.max-docx-size-bytes (DATTA_MAX_DOCX_SIZE_BYTES, 26214400) |
| XLSX | 100 MB | datta.document.max-xlsx-size-bytes (104857600) — lido em fluxo contínuo, sem carregar a planilha inteira |
| PPTX | 60 MB | datta.document.max-pptx-size-bytes (62914560) |
| HTML | 10 MB | datta.document.max-html-size-bytes (10485760) |
| Texto extraído por documento | 4.000.000 caracteres | datta.document.max-text-length (DATTA_DOC_MAX_TEXT_LENGTH) — cobre um inteiro teor de ~1.700 páginas (≈ 3,3 milhões de caracteres); o excedente é truncado com aviso nos metadados |
| Conteúdo descomprimido de pacotes | 500 MB por pacote | Proteção contra arquivos-bomba na extração |
Excedeu o limite do formato? A mensagem é:
"O arquivo "<nome>" excede o limite de <N> MB para o formato <FORMATO>. Divida o conteúdo em arquivos menores e envie novamente."
Por que DOCX e PPTX têm teto menor? Porque a leitura desses dois formatos carrega o arquivo em memória. O XLSX usa leitura em fluxo contínuo (SAX) e por isso aceita arquivos bem maiores sem risco de esgotar a memória do serviço.
3. Regras de rejeição (segurança)
Toda validação acontece antes de o arquivo tocar o extrator, e a recusa volta como erro de validação (HTTP 422) com mensagem em português — nunca um rastro de erro técnico. As mensagens abaixo são as reais do sistema:
| Regra | Mensagem |
|---|---|
Macros (.docm, .xlsm, .pptm, .dotm, .xltm, .potm, .ppsm) | "Arquivos com macros (.docm) não são aceitos por segurança. Salve o documento no formato equivalente sem macro (.docx, .xlsx ou .pptx) e envie novamente." |
Macro embutida (arquivo .docx contendo vbaProject.bin) | "O arquivo "<nome>" contém macros embutidas e não é aceito por segurança. Salve o documento sem macros e envie novamente." |
Office legado (.doc, .xls, .ppt — binário OLE2) | "O formato legado .doc não é suportado. Converta o arquivo para o formato Office atual (.docx, .xlsx ou .pptx) e envie novamente." |
Conteúdo divergente da extensão (ex.: PDF renomeado para .docx) | "O conteúdo do arquivo "<nome>" não corresponde ao formato <FORMATO> declarado pela extensão. Verifique o arquivo e envie novamente." |
| OLE2 renomeado para extensão OOXML | "O arquivo "<nome>" está no formato Office legado (binário OLE2). Converta para o formato atual (.docx) e envie novamente." |
| HTML com conteúdo binário | "O conteúdo do arquivo "<nome>" não parece ser HTML. Verifique o arquivo e envie novamente." |
| Container OOXML corrompido | "O arquivo "<nome>" parece corrompido e não pôde ser validado. Gere o arquivo novamente e reenvie." |
| Arquivo vazio | "O arquivo enviado está vazio." |
Como funciona por baixo: a validação confere a extensão, depois os limites, depois os magic bytes (%PDF, a assinatura ZIP PK.. dos formatos Office atuais, a assinatura OLE2 do Office legado) e, por fim, o conteúdo do container Office — [Content_Types].xml mais a parte principal (word/, xl/ ou ppt/), inspecionando no máximo 500 entradas. As proteções globais contra arquivos-bomba nos formatos Office são razão mínima de descompressão 0.01, entrada máxima de 256 MB e no máximo 10.000 entradas — todas configuráveis pelas variáveis DATTA_OOXML_*.
4. Como cada formato vira seções
O texto extraído é dividido em seções, e são elas que orientam a divisão em trechos e as citações que a busca devolve.
| Formato | Seções |
|---|---|
| DOCX | Cada heading (estilos Título/Heading 1–9) abre uma seção com o texto do heading como título. Tabelas entram linearizadas (células separadas por `\ |
| XLSX | Cada planilha (aba) é uma seção, com o nome da aba como título. Cada linha vira uma linha de texto com os valores como exibidos (formatação aplicada), separados por tabulação. Leitura em fluxo contínuo — planilhas de centenas de milhares de linhas não estouram a memória (o texto além do limite é truncado com aviso). |
| PPTX | Cada slide é uma seção; o título do slide vira o título da seção (na falta dele, "Slide N"). As notas do apresentador entram no fim do texto do slide, com o prefixo "Notas do apresentador:". |
| HTML | Passa pelo mesmo extrator de conteúdo principal usado na ingestão por URL — menus, rodapés e anúncios saem, fica o artigo. Enviar um .html produz o mesmo texto que ingerir aquela página pela aba URL. Seção única. |
| Comportamento inalterado (extração de texto direta). | |
| TXT/CSV/JSON/XML/MD/TSV/LOG | Seção única "Conteúdo Principal" (UTF-8, com ISO-8859-1 como alternativa). |
Depois da extração, nada muda em relação aos formatos antigos: divisão em trechos (200 palavras com sobreposição de 30), vetores semânticos automáticos, identificação de entidades com o modelo do contexto, gravação no grafo e nos índices, linhagem completa — e o arquivo original é armazenado com hash SHA-256, recuperável na tela do documento.
Identificação de entidades em documentos longos
A identificação de entidades não trunca mais o texto nos primeiros 10.000 caracteres. Documentos maiores que uma janela (DATTA_NER_WINDOW_CHARS, padrão 40.000 caracteres) são divididos em janelas alinhadas em quebras de parágrafo e analisados em paralelo controlado (DATTA_NER_CONCURRENCY, padrão 2 — o número baixo protege a cota por minuto do provedor de IA). As entidades e os relacionamentos das janelas são fundidos com deduplicação: mesmo tipo mais mesmo nome resultam em uma única entidade, e propriedades complementares são mescladas.
O custo de IA é limitado por documento: no máximo DATTA_NER_MAX_WINDOWS janelas (padrão 24, o equivalente a ~960 mil caracteres). Se o documento tem mais janelas que isso, elas são distribuídas uniformemente entre início, meio e fim, e o arquivo termina com o aviso "NER cobriu N de M trechos do documento (amostragem distribuída…)". Amplie DATTA_NER_MAX_WINDOWS quando a cobertura total compensar o custo.
5. Pacotes (ZIP/TAR/GZ)
Os formatos novos funcionam também dentro de pacotes, no upload em lote: cada arquivo processável extraído entra na mesma fila do hub de execuções. Caminhos maliciosos (zip-slip) são ignorados e o total descomprimido é limitado a 500 MB por pacote.
Exemplo prático — um ZIP com relatório, planilha e slides
- Você tem
prestacao-contas-2026.zipcomrelatorio.docx(12 MB),execucao.xlsx(40 MB) eapresentacao.pptx(18 MB). - Em , selecione o contexto de destino e envie o ZIP.
- A plataforma descompacta com segurança e cada arquivo entra na mesma fila de processamento, visível no grupo do lote.
- Ao final: o relatório virou seções por título, cada aba da planilha virou uma seção com as linhas como exibidas, e cada slide — inclusive as notas do apresentador — virou uma seção própria.
- Pesquise um termo do relatório: o resultado cita a seção de origem, e o arquivo original continua disponível na tela do documento.
6. Solução de problemas
| Sintoma | Causa | O que fazer |
|---|---|---|
| "Arquivos com macros (...) não são aceitos" | Documento .docm/.xlsm/.pptm | Salvar como .docx/.xlsx/.pptx (Arquivo → Salvar como) e reenviar |
| "O formato legado .doc não é suportado" | Office 97–2003 (binário OLE2) | Abrir no Word/Excel/PowerPoint e salvar no formato atual |
| "não corresponde ao formato declarado pela extensão" | Arquivo renomeado (ex.: PDF com extensão .docx) | Corrigir a extensão para o formato real |
| Documento entrou "plano", sem seções | DOCX sem estilos de heading | Comportamento esperado (seção única); aplicar estilos de título melhora as citações |
| Texto da planilha truncado | Limite de 4.000.000 caracteres de texto extraído | Dividir a planilha; o aviso fica nos metadados do documento |
| "excede o limite de N MB para o formato" | Arquivo maior que o teto do formato | Dividir o conteúdo; o administrador pode ajustar as variáveis DATTA_MAX_*_SIZE_BYTES |
| "O arquivo excede o tamanho máximo aceito pelo servidor (256MB)" | Arquivo maior que o limite geral da borda | Dividir o arquivo; o administrador pode subir o limite geral, mantendo alinhados o teto de corpo da requisição e o de leitura em memória |
| "NER cobriu N de M trechos do documento" | Documento muito longo — a identificação de entidades amostrou janelas distribuídas | Comportamento esperado; ampliar DATTA_NER_MAX_WINDOWS para cobertura total |
| "Nenhum PDF disponível para este processo" (painel Processos) | Documento ingerido antes do armazenamento de originais (o binário foi descartado) | Reenviar o mesmo arquivo: a plataforma deduplica pelo texto e acrescenta o PDF/ZIP (arquitetura) |