Tecnologias Java para Implementação de NFe Edilmar

Propaganda
Tecnologias Java para
Implementação de NF­e
Edilmar Alves
Novembro/2008
[email protected]
Palestrante
●
●
●
●
●
Mestre em Ciência da Computação pela UNICAMP/SP;
Professor Universitário nas áreas de Redes de Computadores, Servidores Linux e Programação Java;
Sócio/Diretor Técnico da InterSite Informática, onde desenvolve projetos de sistemas usando ferramentas livres, além de administração de servidores Internet Linux;
Desenvolvedor principal do software livre Java Framework SubMacro.
Participante da comunidade JUGMS
Tópicos
●
Visão Geral de NF­e
●
Padrões Técnicos
●
Serviços Síncronos e Assíncronos
●
Webservices e SOAP
●
Certificação Digital
●
Validação de Schemas XSD
●
Envio e Armazenamento
●
Conclusão
Visão Geral de NF­e
●
NF­e: Nota Fiscal Eletrônica
●
Documento exclusivamente digital
●
Exigência da Receita em diversos nichos de negócio
●
Troca online de informações fiscais entre ERP e Receita de cada Estado (Secretaria de Fazenda)
●
Necessária homologação do ERP em cada Estado
●
Problema: diferenças de legislação entre estados
Visão Geral de NF­e
●
Manuais disponíveis nos sites das Receitas Estaduais e Receita Federal
Padrões Técnicos
●
Informações trocadas através de arquivos XML 1.0 codificados em UTF­8
●
Arquivo XML deve ser validado por Schema XSD
●
Comunicação usando HTTPs (HTTP Seguro)
●
Certificado digital A1 ou A3
●
●
Autenticação Mútua: certificado do ERP + certificado da Receita (fornecido)
Arquivo XML deve ser assinado com o certificado
Serviços Síncronos e Assíncronos
●
Síncrono: envio de requisição pelo ERP e retorno de resposta da Receita.
Serviços Síncronos e Assíncronos
●
Assíncrono: envio de requisição pelo ERP e aguardo de resposta da Receita, através de outra thread.
Serviços Síncronos e Assíncronos
●
●
●
●
Consulta de Status de Serviço: síncrono, testar se o serviço está em pleno funcionamento.
Envio de Lote de NF­e: assíncrono, envio de uma ou mais NFs, que serão processadas pela Receita, com posterior resposta.
Retorno de Recepção de Lote de NF­e: síncrono, para verificar se as NFs enviadas foram processadas corretamente.
Cancelamento de NF­e: síncrono.
Webservices e SOAP
●
●
●
●
Webservice: programa instalado em um servidor web (protocolos HTTP e HTTPs), que fornece um ou mais serviços para outros sistemas remotos (clientes).
RPC: chamada de procedimento remoto, técnica usada para que clientes acessem os serviços remotos.
RMI: termo em Java para RPC, chamada de métodos (orientação a objeto).
JAX­WS: https://jax­ws.dev.java.net/ ­ implementação de webservices em Java
Webservices e SOAP
●
●
SOAP: protocolo de comunicação definido pela W3C, baseado na troca de informações formatadas com arquivos XML, encapsula RPC sobre HTTP.
Webservices+SOAP:
–
–
–
uso da Internet (TCP/IP) como protocolo da rede/transporte de dados;
uso do protocolo de aplicação HTTP/HTTPs para comunicação cliente/servidor via Internet;
uso do SOAP para formatação dos dados, via Jaxp ­ https://jaxp.dev.java.net/.
Certificação Digital
●
●
●
Certificado digital: arquivo contendo informações de pessoa física ou jurídica.
Fornecido por um cartório digital (ex. Serpro, Certisign, Serasa, etc).
Contém chaves pública e privada, usadas no algoritmo de criptografia.
Certificação Digital
●
●
●
●
Protocolo SSL: usado por servidores web HTTPs para implementar a criptografia.
http://www.gta.ufrj.br/grad/00_2/ssl/ssl.htm
No Java, o uso dos certificados digitais é feito através de KeyStores, que devem ser setados antes de iniciar a comunicação com o servidor.
SubMacroUtils.GeralXML.setKeyStore()
Certificação Digital
●
●
Assinatura digital: procedimento de gravação da tag <Signature> (e seus descendentes) em um arquivo XML, usando um certificado digital.
Objetivos: –
–
–
Privacidade: somente o servidor conseguirá ler o XML;
Autenticidade: garantir que as informações foram enviadas pelo cliente;
Integridade: através de algoritmo de checksum, garantir que os dados não foram adulterados durante o envio.
Certificação Digital
●
●
SubMacroUtils.GeralXML.assinarXML(): utiliza as bibliotecas de criptografia do Java para gerar a tag <Signature> no arquivo XML.
Alguns links sobre assinatura digital em Java:
–
http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/
–
http://java.sun.com/javase/technologies/security/
–
http://java.sun.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html Validação dos Schemas XSD
●
●
●
Schema XSD: arquivo que contém a definição da estrutura de dados usada pelo XML.
Um arquivo XML deve obedecer as regras estabelecidas pelo seu XSD, para ser validado.
Exemplos de regras: definição de tipos e subtipos, nomes de campos, etc.
Validação dos Schemas XSD
<xs:element name="aniversario">
<xs:complexType>
<xs:sequence>
<xs:element name="dia" type="xs:int" />
<xs:element name="mes" type="xs:string" />
<xs:element name="ano" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Validação dos Schemas XSD
<aniversario>
<dia>18</dia>
<mes>Fevereiro</mes>
<ano>1973</ano>
</aniversario>
<aniversario>
<dia>Dezoito</dia>
<mes>02</mes>
<ano>1973</ano>
</aniversario>
Validação dos Schemas XSD
●
●
●
É necessário validar o XML no ERP antes do envio para a Receita, usando os XSDs fornecidos por ela.
SubMacroUtils.GeralXML.validarXMLporXSD(): método de validação usando API padrão JAXP.
Links com tutoriais sobre validação:
–
http://java.sun.com/developer/technicalArticles/xml/validationxpath/
–
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPDOM8.html
–
http://www.ibm.com/developerworks/xml/library/x­javaxmlvalidapi.html Envio e Armazenamento
●
●
Envio: validação e assinatura do XML, envio do lote de NFs via Webservice/SOAP.
Nova thread para aguardar processamento da Receita:
–
–
–
se NF correta, armazená­la no banco de dados por 5 anos, pelo menos. Estabelecer política de backup confiável;
Após confirmação, pode­se imprimir o DANFE (documento a ser entregue ao cliente)
se NF errada, definir um procedimento de correção no ERP, para posterior re­envio.
Envio e Armazenamento
<enviNFe versao="1.07">
<idLote>000000000001538</idLote>
<NFe>
<infNFe versao="1.07" Id="NFe43060992665611012850550079000000011485651995">
<ide><cUF>43</cUF><cNF>148565199</cNF>
<natOp>TRANSFERENCIA REMETIDA MERCADORIA</natOp>
<indPag>1</indPag><mod>55</mod><serie>7</serie><nNF>900000001</nNF>
<dEmi>2006­09­12</dEmi><dSaiEnt>2006­09­12</dSaiEnt><tpNF>1</tpNF>
...</ide>
...<NFe>...<enviNFe>
Envio e Armazenamento
Conclusão
●
●
●
●
NF­e: “caminho sem volta”
Necessária adaptação dos ERPs ou aquisição de um novo ERP com suporte – ex. InterSite Gestor.
Possibilidade de integração do ERP com ferramentas de terceiros – ex. InterSite eMonitor.
Java: possui toda a infra­estrutura de bibliotecas para implementação e/ou integração de NF­e.
Download