Boa tarde Fauze,
Em vez de tratar as rejeições por parte da SEFAZ, porque você não faz com que a sua aplicação rejeite dados pela metade?
Exemplo: Ao Cadastrar um cliente, você só habilita o botão salvar se todos os dados necessários forem digitados.
Um dica: cada campo tem um titulo exemplo: Endereço, Número, Complemento, etc. vamos supor que Endereço e Número são dados obrigatórios já Complemento é opcional, sendo assim deixe os titulos Endereço e Número em negrito ou de uma cor diferente exemplo vermelho.
Isso vai facilitar a vida do usuário.
Quanto ao código do Município, eu fiz da seguinte forma, criei uma tabela no banco de dados contento: CódigoPais, DescriçãoPais, CódigoUF, SiglaUF, CódigoMunicipio e DescriçãoMunicipio de todas as cidade brasileiras, dados colhidos do site do IBGE.
No form de cadastro de cliente tenho um botão para o usuário selecionar a cidade, desta forma tenho todos os códigos de Pais, UF e Municipio bem como a sua descrição segundo o IBGE no cadastro do cliente.
Trabalhando desta forma você minimiza as rejeições no que diz respeito aos dados do cliente.
Inclusive checo a validade do CNPJ / CPF / IE, se um dado for inválido ou estiver faltando a minha aplicação não salva no banco de dados.
Espero ter ajudado.