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
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.
Contexto
Achado por
@lp-architectna varredura de 2026-08-20, confirmado no código emServices/XmlAnalysis/XsdValidationService.cs:379: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
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)xsdVersionnem o erro específico além de interpolar a versão no texto)Critério de aceite
.csproj, com licença compatível confirmadaXsdValidationServicelê o conteúdo do(s) PDF(s) empdfPathe usa esse conteúdo (não só a mensagem genérica) nasresult.Orientationsdotnet build/dotnet testverdesDono 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-devpara a integração inicial da biblioteca, com@lp-parser-llmentrando 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.