Skip to content

story: implementar leitura de PDF de orientações para diagnóstico de erros XSD #172

Description

@elson-vinicius-lopes

Contexto

Achado por @lp-architect na varredura de 2026-08-20, confirmado no código em Services/XmlAnalysis/XsdValidationService.cs:379:

// Por enquanto, retornar mensagem genérica
// TODO: Implementar leitura de PDF (usar biblioteca como PdfSharp ou iTextSharp)
result.Orientations.Add("Para corrigir os erros de validação XSD:");
result.Orientations.Add("1. Verifique se todos os campos obrigatórios estão preenchidos");
result.Orientations.Add("2. Confirme que os valores estão nos formatos corretos (CNPJ, CPF, datas, etc.)");
result.Orientations.Add("3. Valide que os códigos de produto, CFOP e outras referências estão corretos");
result.Orientations.Add("4. Consulte a documentação oficial da SEFAZ para a versão " + xsdVersion);

O método já checa a existência de uma pasta de PDFs (Directory.Exists(pdfPath), linha 371) e emite um aviso se ela não existir — ou seja, a infraestrutura de localizar o material de orientação já existe, só a leitura do conteúdo do PDF em si nunca foi implementada. Hoje, quando a pasta existe e tem PDFs relevantes para o erro XSD específico, o serviço ainda assim devolve só as 4 mensagens genéricas acima, ignorando o conteúdo real do PDF.

Confirmado pelo dono do projeto: PDF continua sendo escopo real do projeto, não é código morto a ser removido. Formalizar como feature a implementar, não como débito técnico descartável.

O que falta

  • Ler o conteúdo do(s) PDF(s) na pasta de orientações (pdfPath) usando uma biblioteca de leitura de PDF (candidatas citadas no próprio TODO: PdfSharp, iTextSharp — avaliar licenciamento de cada uma antes de escolher, iTextSharp tem AGPL/comercial em versões recentes)
  • Extrair e associar o trecho de orientação relevante ao erro XSD específico sendo diagnosticado (hoje as 4 mensagens são genéricas e não usam xsdVersion nem o erro específico além de interpolar a versão no texto)
  • Manter o fallback genérico atual como comportamento de degradação caso a leitura do PDF falhe ou a pasta não tenha o arquivo esperado (alinhado ao princípio de resiliência do projeto — nunca quebrar a resposta principal por falha em dependência externa)

Critério de aceite

  • Biblioteca de leitura de PDF escolhida e referenciada no .csproj, com licença compatível confirmada
  • XsdValidationService lê o conteúdo do(s) PDF(s) em pdfPath e usa esse conteúdo (não só a mensagem genérica) nas result.Orientations
  • Falha de leitura do PDF (arquivo corrompido, biblioteca indisponível etc.) degrada graciosamente para a mensagem genérica atual, sem quebrar a resposta de validação
  • Teste cobrindo: pasta com PDF válido, pasta sem PDF, PDF corrompido
  • dotnet build/dotnet test verdes

Dono natural

A avaliar entre @lp-backend-dev (integração de biblioteca externa, leitura de arquivo) e @lp-parser-llm (se a extração de orientação precisar de parsing semântico do conteúdo do PDF além de leitura crua de texto) — recomenda-se @lp-backend-dev para a integração inicial da biblioteca, com @lp-parser-llm entrando se a extração precisar de lógica de matching entre erro XSD e trecho do PDF.

Por que agora

TODO já documentado no código, mas nunca formalizado como item de backlog rastreável. Dono confirmou que é escopo real, evitando que a lacuna continue invisível no board.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions