CF-e: Emitindo cupom fiscal via SAT
A seguir estão descritos os passos para trabalho com o CF-e SAT.
Configuração do equipamento
O primeiro passo é certificar-se que o aparelho está instalado e devidamente configurado na máquina do usuário. As rotinas são compatíveis com equipamentos fisicos e/ou o emulador.
Qualquer tipo de suporte a instalação e/ou configuração do equipamento deve ser contratado à parte. Não sendo parte do suporte a API.
Obs: É importante conhecer a documentação do projeto:
https://portal.fazenda.sp.gov.br/servicos/sat/Downloads/Especificacao_SAT_v_ER_2_28_05.pdf
Configurando a DLL do SAT
O Webrun deve ter acesso à DLL do SAT do respectivo equipamento ou emulador para efetuar a comunicação. Isso pode ser feito de duas formas:
- Asicionando a pasta da DLL do SAT no PATH do sistema operacional;
- Copiando a DLL para uma das pastas no PATH. EX:
- Windows com Java 32 bits:
- C:\Windows\System32\
- C:\SAT\x32\
- Windows com Java 64 bits:
- C:\Windows\SysWOW64\
- C:\SAT\x64\
- Windows com Java 32 bits:
- Adicione as bibliotecas do JNA (acesso a DLL nativa) do Java no Agente, copiar as bibliotecas para a pasta “\apis\sefaz” dentro do agente. Os arquivos podem ser obtidos em no Zip da API, na pasta: “IMPRESSORAS\Java x64\Maker.Commons\WEB-INF\lib“.
Camada cliente
O agente deve utilizar o Java 32 ou 64 bits de acordo com a versão da DLL fornecida pelo fabricante do equipamento ou emulador.
Importante
A DLL deve ter o nome “SAT.dll“, no caso da Bematech por exemplo a DLL por padrão vem com o nome “BemaSAT64.dll” (versão de 64 bits), ela deve ser renomeada para o nome “SAT.dll” e colocada na pasta correta. É importante observar se o Java é 32 ou 64 bits. Em caso de dúvida sobre a versão do Java que o agente utiliza abra o Prompt de Comando (cmd.exe) e digite:
java -version
Observe na saída a versão do Java para identificar se é 32 ou 64 bits, para a camada servidor (Tomcat) observe a versão do Tomcat.
Gerando o código de ativação
Para gerar o código de ativação utilize a função “SEFAZ SAT – Gerar Código de Vinculação“, o primeiro parâmetro é um conector, como os utilizados nas funções do SEFAZ para NF-e/NFC-e. Os demais parâmetros são os números dos CNPJs envolvidos, a função irá retornar a assinatura (344 caracteres).
Verificando a comunicação
Para testar a comunicação básica com o SAT utilize a função “SEFAZ SAT – Consultar SAT“, com o parâmetro “numeroSessao” igual a 0 (ZERO).
Gerado um CF-e
- Use a função “SEFAZ SAT – Criar XML do CF-e” para iniciar a criação do XML do CF-e:
- CNPJ da software house desenvolvedora do sistema;
- Numero do caixa: Tag “<numeroCaixa>”;
- signAC – Assinatura de (CNPJ Software House + CNPJ do emitente) que gerou o CF-e-SAT;
- Versão dos dados (“0.07”, “0.08”).
- Adicione os dados usando a função “SEFAZ NF-e – Adicionar Elemento ao XML” (Observe que esta função está no grupo geral da SEFAZ);
- Após adicionar todas as tags utilize a função “SEFAZ SAT – Obter XML do CF-e” para obter o XML a ser enviado para o SAT. EXEMPLO:
<?xml version="1.0"?> <CFe> <infCFe versaoDadosEnt="0.07"> <ide> <CNPJ>18590980000195</CNPJ> <signAC>***ASSINATURA***</signAC> <numeroCaixa>001</numeroCaixa> </ide> <emit> <CNPJ>11222333000199</CNPJ> <IE>111111111111</IE> <IM>12345</IM> <cRegTribISSQN>3</cRegTribISSQN> <indRatISSQN>N</indRatISSQN> </emit> <dest/> <det nItem="1"> <prod> <cProd>123</cProd> <cEAN>9990000000000</cEAN> <xProd>API DA L2MAKER</xProd> <CFOP>9900</CFOP> <uCom>UN</uCom> <qCom>1.0000</qCom> <vUnCom>1.00</vUnCom> <indRegra>A</indRegra> </prod> <imposto> <ICMS> <ICMSSN102> <Orig>0</Orig> <CSOSN>500</CSOSN> </ICMSSN102> </ICMS> <PIS> <PISSN> <CST>49</CST> </PISSN> </PIS> <COFINS> <COFINSSN> <CST>49</CST> </COFINSSN> </COFINS> </imposto> </det> <total/> <pgto> <MP> <cMP>01</cMP> <vMP>1.00</vMP> </MP> </pgto> </infCFe> </CFe>
- Utilize a função “SEFAZ SAT – Enviar Dados Venda” para solicitar a emissão do CF-e pelo SAT:
- numeroSessao – Deixe 0 (ZERO) para gerar automatico;
- Código de ativação do equipamento, definido durante a ativação;
- XML (Letras) gerado.
- OBS: Você também pode passar esse mesmo XML para a função de testes “SEFAZ SAT – Teste Fim-A-Fim” se desejar apenas verificar o funcionamento.
- O retorno dessa função será um mapa com a situação da operação e o XML assinado (em caso de sucesso);
- Se o XML foi assinado você poderá emitir usando as funções de impressão.
Cancelando um CF-e
- Utilize a função “SEFAZ SAT – Montar XML de Cancelamento da Venda” fornecendo os seguintes parâmetros:
- cnpj
- numeroCaixa
- chCanc – A chave de cancelamento pode ser obtido no item “chaveConsulta” do Mapa retornado na venda.
- signAC
- Salve o XML retornado na função anterior numa variável do tipo letras;
- Chame a função “SEFAZ SAT – Cancelar Última Venda” passando os seguintes parâmetros:
- numeroSessao – Número de sessão
- codigoDeAtivacao – Chave de ativação do equipamento.
- chave – Chave do CF-e que será cancelado;
- dadosCancelamento – Este é o XML gerado anteriormente.
- No retorno virão algumas informações no formato de mapa, leia os itens “mensagem” e “CCCC” para identificar se a operação teve sucesso;
- Observe o XML retornado no item “arquivoCFeBase64” nele constará os dados do cancelamento se for bem sucedido.
Emulador off-line do SAT
Emulador off-line do SAT – http://www.fazenda.sp.gov.br/sat/downloads/vigentes.asp
Problemas na comunicação com o equipamento
O projeto do SAT prevê que o fabricante forneca uma DLL compatível. Assim, não deve(ria) haver divergências entre equipamentos:
- Bematech: http://www.oobj.com.br/bc/article/erro-na-abertura-da-porta-de-comunicacao-com-o-sat-de-desenvolvimento-bematech-rb-1000-fi-como-resolver-452.html