Boa tarde, pessoal! Tudo bem?
Estou com uma dúvida sobre a geração de classes em C# a partir dos XSDs dos eventos da SEFAZ, e queria entender melhor como vocês costumam lidar com isso na prática.
Percebi que a SEFAZ disponibiliza vários pacotes de schemas para diferentes tipos de eventos — como cancelamento de nota, carta de correção, EPEC, entre outros. Ao analisar esses pacotes, notei que os XSDs são praticamente iguais, mudando basicamente a validação do campo detEvento, enquanto toda a parte geral do schema é praticamente idêntica.
Eu gerei as classes de dois schemas — o genérico e o de cancelamento — e, ao comparar, percebi que são quase iguais, mudando apenas o detEvento. No schema genérico, ele aceita qualquer tipo; no de cancelamento, é específico. O problema é que, ao gerar as classes, ambos acabam tendo o mesmo nome, o que causa duplicidade se eu tentar usar os dois juntos.
Nosso sistema já utiliza o schema específico de cancelamento há alguns anos, mas agora, com a implementação dos eventos da Reforma Tributária, tudo indica que precisaremos usar o schema genérico.
A dúvida é justamente como vocês tratam esse cenário:
— Costumam usar só o schema genérico para todos os eventos?
— Ou mantêm ambos e trabalham com namespaces diferentes?
Tentei separar os namespaces (um para cancelamento e outro para o genérico), mas acabei tendo problemas de dependência entre classes. E, sinceramente, gostaria de evitar alterar manualmente as classes geradas, porque isso pode complicar futuras atualizações dos schemas — outro dev que pegar o código pode nem perceber as alterações manuais e acabar quebrando algo.
Uma ideia que tive seria usar apenas o schema genérico e ajustar a implementação para que o detEvento aceite qualquer tipo (já que o próprio XSD do cancelamento referencia o arquivo e110111_v1.00.xsd). Isso resolveria tanto para o cancelamento quanto para os novos eventos da reforma.
Mas antes de seguir por esse caminho, queria ouvir de vocês: Qual abordagem acham mais segura e sustentável para manter no longo prazo?