Eu não tinha pensado por este lado, mas....
O governo tem um webservice para cada tipo de serviço.
A classe tem um método para cada webservice.
Cada webservice do governo precisa certas informações.
Na classe, cada método recebe essas informações por parâmetro.
Então, a princÃpio, o manual do governo é praticamente o manual da SefazClass.
O que a SefazClass tem a mais é que certas informações ela consegue obter dos parâmetros, então pode reduzir a quantidade de informação que precisa preencher.
Além disso, ela pode fazer um algo mais....
- Cada processo vai pra um endereço diferente, webservice diferente
- Cada processo/webservice tem um método na SefazClass
- A SefazClass cria um XML baseado nas informações, envia pro governo, e recebe a resposta
- Depois junta esse XML enviado ao XML recebido, e gera um autorizado.
A diferença fica no documento autorizado em si: a NFE, NFCE, CTE ou MDFE
- O aplicativo deve gerar o XML
- A Sefaz assina, envia, e recebe um número de recibo
Pra facilitar, a própria Sefaz já faz a parte seguinte:
- Ela gera um XML de consultar recibo, e consulta o recibo pra ter a resposta, pra ver o que aconteceu com a nota
- Se tudo ok, ela junta o XML enviado, com o XML de resposta, e gera um autorizado.
Então, de um modo geral, a SefazClass é igual o governo, o manual do governo acaba explicando cada método da classe.
Ela apenas já faz mais de uma etapa de uma vez, pra facilitar pra quem usa.
Quer entender a classe?
Primeiro entenda o governo, como funciona a parte do governo.
Ao entender como funciona o governo, já entendeu a classe.
O mesmo acima de outra forma, sobre o que a classe faz:
ela monta um XML, envia o XML pro governo, recebe um XML como resposta.
Na autorização de nota/etc. quem cria o XML é o aplicativo, ela apenas complementa, e faz a mesma coisa.
E porque precisa tanto fonte?
pra autorizar nota é um XML de autorizar nota, é um endereço de autorizar nota, é uma resposta de autorizar nota.
pra enviar carta de correção, é um XML de carta de correção, é um endereço de carta de correção, é uma resposta de carta de correção.
O autorizado é um XML contendo os dois XMLs: enviado e recebido, mas devidamente formatado, o que torna diferente em cada processo, por ter detalhes diferentes.
E pra cada UF é um endereço diferente, que pode ter alguma particularidade diferente.
Então as possibilidades seriam uns 20 webservices diferentes, pra 26 UFs diferentes, resultando em 520 combinações diferentes.
Se considerar ambiente de homologação e produção, que usam webservices diferentes, as possibilidades vão pra 1040.
Se considerar ambiente de contingência, que é pra quando os outros não funcionam, multiplica isso por 2 ou mais.
Toda complicação é pra escolher dentro dessas 520 possibilidades, qual delas será usada.
Teoricamente são mais de 1.000 endereços de internet diferente.
Algumas UFs não tem serviço próprio, e usam o serviço de outras, isso reduz a quantidade.
Pra não ter milhares de rotinas diferentes, uma pra cada situação, é onde entram os arrays e os IFs dentro da SefazClass.
É escolher entre milhares de endereços de internet, e algum detalhe especÃfico de alguma UF.
Tem lá, por exemplo, o serviço RecebeLoteDaNota.... mas uma UF decidiu chamar de RecebeNota, ou RecebeNota2 pra identificar que é nota 2.0.
É só uma palavra, mas se mandar a palavra errada não funciona.
Então a SefazClass também precisa identificar qual a palavra correta pra cada UF.
Todo o mecanismo de escolher endereço, e escolher detalhes diferentes está pronto desde o começo.
Mas eu só trabalho com São Paulo, só tenho certificado digital de São Paulo, então só testei São Paulo.
Conforme vai aparecendo alguma diferença, em alguma UF não testada, então é só acrescentar a diferença na SefazClass.
E nota de serviço......
nota de serviço não tem pequena diferença, só tem GRANDES diferenças.
É o contrário de NFE, enquanto em NFE é difÃcil ter uma UF diferente, na NFSe é difÃcil ter uma igual.
O processo é o mesmo: criar XML, enviar pra um endereço de internet, pegar resposta.
Mas os tipos de webservices são outros, a informação que vai é outra, a informação que volta é outra.
E não são 26 UFs, são milhares de cidades.... o que multiplicaria tudo.
Se alguém tiver feito pra alguma cidade, e quiser enviar, pra tentarmos fazer uma classe mais universal, tudo bem, podemos tentar pra ver o que dá...
De repente só a parte de webservice/endereços... e cada um que veja em manuais sobre os XMLs.
Também ao contrário de NFE, não existe data pra mudar layout de cada cidade, cada uma pode alterar o modelo em data diferente.