
CONSELHO DE IAs — RODADA 1: Rodada 1 — Análise inicial Objet...
Prompt
CONSELHO DE IAs — RODADA 1: Rodada 1 — Análise inicial Objetivo geral: CONSELHO DE IAs — ANÁLISE DE RECUOS, HIERARQUIA VISUAL E LISTAS EM PDF REFLOW Você é parte de um conselho técnico. Analise o problema e proponha soluções robustas. Não implemente alterações no documento convertido nem sugira correções manuais por PDF: a solução deve ser geral, no código do conversor, para funcionar em PDFs futuros. INSTRUÇÃO DESTA RODADA Analise o documento de forma independente, identifique problemas e proponha melhorias precisas. DOCUMENTO DIVIDIDO PELOS MARCADORES # [B01] DOCUMENTO COMPLETO OBJETIVO Melhorar o conversor `scripts/pdf-reflow.mjs`, que transforma PDFs textuais em HTML, EPUB e DOCX. Ele já preserva texto, negrito, itálico, títulos, questões, textos legais, imagens editoriais e páginas de origem, mas ainda perde nuances estruturais do PDF: 1. Recuos originais; 2. Recuos suspensos de listas; 3. Relação pai → filhos após dois-pontos; 4. Hierarquia de listas que continua após uma linha vazia, imagem, quebra de página ou bloco intermediário; 5. Marcadores visuais que às vezes não são extraídos como caracteres (`•`, `✓`, ponto gráfico); 6. Diferenças de fonte, tamanho, negrito e alinhamento que ajudam a distinguir estrutura de corpo comum. O resultado precisa ser reflow responsivo, portanto não pode simplesmente copiar coordenadas absolutas do PDF. RESTRIÇÕES IMPORTANTES - Não alterar manualmente HTML/EPUB já gerados. - Não usar IA durante a conversão dos PDFs. - Não transformar qualquer parágrafo após `:` em lista: reduzir falsos positivos é essencial. - Manter compatibilidade com HTML, EPUB e Word. - Não quebrar regras já existentes: questões, questões comentadas, leis, callouts, títulos, imagens editoriais, marcadores de página, negrito/itálico e auditoria. - Não usar posições absolutas no HTML. - Preservar conteúdo integral; a classificação visual não pode descartar texto. - Uma linha vazia no PDF é um sinal fraco: ela não deve, sozinha, impedir que filhos sejam associados ao pai. - A solução precisa ter testes automatizados e auditoria para casos ambíguos. ARQUITETURA ATUAL Arquivo central: `scripts/pdf-reflow.mjs` Cada linha extraída do PDF possui, aproximadamente: ```js { page, pageWidth, pageHeight, top, left, width, height, column, text, html, // preserva <strong> e <em> detectados no PDF typography: { fontSize, boldRatio, italicRatio } } ``` Fluxo atual: 1. `pdftohtml -xml` extrai texto e geometria; 2. linhas são ordenadas e recebem tipografia; 3. `inferHeadingHierarchy()` identifica títulos; 4. `makeDocument()` organiza blocos; 5. são gerados HTML, EPUB e DOCX; 6. a auditoria registra páginas ambíguas. Funções e regras já existentes: ```js isIndentedQuote(line) isVisualBulletListStart(lines, start) isVisualBulletItemAfter(first, next) makeVisualBulletListBlock(lines, start, nested) isLetteredContentItemLine(text) // a), b), c)... isNestedContentLetteredItem(lines, start) ``` Já existe uma regra para: - pai terminado em `:`; - filhos `a)`, `b)`, `c)`; - rótulos em negrito como `Registro:` e `Averbação:` após pai terminado em `:`; - listas visuais com `<ul>`. A especificação atual está em: ```text specs/0001-reflow-hierarquia-de-listas-rotuladas.md ``` PROBLEMAS REAIS OBSERVADOS Caso A — lista numerada sem preservação visual adequada No PDF há itens como: ```text 1. A averbação não pode ser utilizada... 2. A instituição do bem de família... 3. As cláusulas restritivas... 4. É possível a alienação... 5. A multipropriedade... 6. O direito real de laje... ``` No PDF original, os números ficam em uma coluna à esquerda e o texto começa em uma coluna recuada, com continuação alinhada ao texto, não ao número. No reflow, parte dessa geometria é perdida; a lista parece corpo comum ou tem recuo insuficiente. Sinais disponíveis no PDF: - marcador numérico no início; - coluna do marcador; - coluna do texto; - linhas de continuação com `left` maior; - fonte/negrito diferentes em partes do item; - distâncias verticais entre irmãos. Caso B — pai terminado em dois-pontos, filhos com marcador gráfico e linhas vazias No PDF original existe um parágrafo equivalente a: ```text Para concluir o tema ... existem algumas exceções a essa regra: • As averbações, que serão efetuadas na matrícula ... • Os registros relativos a imóveis situados ... • O registro previsto nos contratos de locação ... ``` No PDF há: - pai terminado em `:`; - espaço vertical antes dos itens; - itens com marcador visual; - recuo dos filhos em relação ao pai; - itens que podem atravessar páginas; - alguns marcadores podem não aparecer no texto extraído porque são gráficos ou símbolos. O conversor não deve concluir que a linha vazia encerrou automaticamente a relação pai → filhos. O recuo e o alinhamento devem ter peso maior. Caso C — filhos rotulados em negrito ```text Assim, os atos praticados ... incluem: Registro: Formaliza ... Averbação: Modifica ... ``` Esses filhos devem: - ficar recuados em relação ao pai; - ficar compactos entre si; - voltar a ter separação maior antes do próximo assunto; - manter `Registro:` e `Averbação:` como texto normal com negrito preservado, sem inventar bullets. O código já começou a tratar esse caso por meio da combinação: “pai terminado em `:` + filho curto iniciado em negrito e terminado em `:`”. O QUE DEVE SER ANALISADO Proponha uma estratégia geral de inferência de hierarquia visual baseada em: 1. Faixas de recuo relativas à largura da página, e não pixels fixos; 2. Relação entre `left`, `width`, `top`, `height` e `column`; 3. Marcadores explícitos: - `1.`, `1)`, `a)`, `I -`; - bullets e símbolos; - prefixos curtos em negrito terminados em `:`; 4. Recuo suspenso: - marcador em uma coluna; - texto do item em outra; - linhas seguintes alinhadas ao texto do item; 5. Relação semântica de pai → filhos: - pai terminado em `:`; - filhos geometricamente mais recuados; - possibilidade de linha vazia ou quebra de página; - limites para não capturar parágrafos não relacionados; 6. Persistência de contexto: - quando a lista continua; - quando ela termina; - quando começa uma lista aninhada; - quando um novo parágrafo volta ao nível do pai; 7. Tipografia como sinal auxiliar: - tamanho relativo ao corpo; - negrito; - itálico; - alinhamento; - mas sem depender de uma família de fonte específica, pois nomes podem estar ofuscados no PDF. REQUISITOS DE SAÍDA Entregue uma recomendação técnica objetiva contendo: 1. Diagnóstico das falhas prováveis da lógica atual; 2. Algoritmo recomendado, passo a passo; 3. Modelo de dados sugerido para representar: - nível de recuo; - tipo de marcador; - pai; - profundidade; - confiança da inferência; 4. Pseudocódigo para classificação e abertura/fechamento de grupos; 5. Regras de limiar sugeridas, sempre relativas ao tamanho da página e/ou altura de linha; 6. Estratégia para preservar listas no HTML, EPUB e Word; 7. Estratégia CSS responsiva: - recuo por níveis; - hanging indent; - espaçamento compacto entre irmãos; - separação maior após o fechamento de um grupo; 8. Casos que devem gerar “auditoria / revisão necessária” em vez de inferência agressiva; 9. Plano de testes: - lista numérica; - lista por letras; - lista com bullet gráfico; - pai com `:` e linha vazia; - lista em página seguinte; - lista aninhada; - rótulo forte como `Registro:`; - falso positivo de parágrafo normal após `:`; 10. Indicação precisa dos arquivos e funções do projeto que devem ser modificados. NÃO FAÇA - Não proponha ajustes manuais em HTML convertido. - Não proponha OCR/IA como requisito obrigatório. - Não recomende “copiar o PDF como imagem”. - Não trate todo texto após `:` como filho. - Não elimine o texto ou marcadores se a confiança for baixa. - Não ignore EPUB e DOCX. Ao final, escolha uma solução principal e explique por que ela é mais segura do que as alternativas. HISTÓRICO INCLUÍDO — SOMENTE A RODADA ANTERIOR Sem comentários registrados. FORMATO OBRIGATÓRIO DA RESPOSTA Retorne SOMENTE um objeto JSON válido dentro de um único bloco de código Markdown identificado como json. Comece a resposta com ```json e termine com ```. Não escreva introdução, explicação ou qualquer texto antes ou depois do bloco: ```json { "summary": "síntese curta da sua posição nesta rodada", "comments": [ { "target": "bloco", "blockId": "B01", "type": "concordancia | discordancia | complemento | duvida | problema | proposta", "comment": "opinião precisa e completa sobre este bloco", "replyToCommentId": null } ] } ``` REGRAS - Comente somente os blocos que realmente exigem observação; não é obrigatório comentar todos. - Para uma observação sobre o documento inteiro, use target=documento e blockId=null. - Use apenas os identificadores B01, B02 etc. fornecidos acima. - Para responder a comentário anterior, use seu identificador em replyToCommentId; caso contrário use null. - Não altere campos ou valores dentro do JSON, não inclua comentários no JSON e não assine.