Blog

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:

  1. Asicionando a pasta da DLL do SAT no PATH do sistema operacional;
  2. Copiando a DLL para uma das pastas no PATH. EX:
    1. Windows com Java 32 bits:
      1. C:\Windows\System32\
      2. C:\SAT\x32\
    2. Windows com Java 64 bits:
      1. C:\Windows\SysWOW64\
      2. C:\SAT\x64\
  3. 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

  1. Use a função “SEFAZ SAT – Criar XML do CF-e” para iniciar a criação do XML do CF-e:
    1. CNPJ da software house desenvolvedora do sistema;
    2. Numero do caixa: Tag “<numeroCaixa>”;
    3. signAC – Assinatura de (CNPJ Software House + CNPJ do emitente) que gerou o CF-e-SAT;
    4. Versão dos dados (“0.07”, “0.08”).
  2. 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);
  3. 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>
  4. Utilize a função “SEFAZ SAT – Enviar Dados Venda” para solicitar a emissão do CF-e pelo SAT:
    1. numeroSessao  – Deixe 0 (ZERO) para gerar automatico;
    2. Código de ativação do equipamento, definido durante a ativação;
    3. XML (Letras) gerado.
  5. 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.
  6. O retorno dessa função será um mapa com a situação da operação e o XML assinado (em caso de sucesso);
  7. Se o XML foi assinado você poderá emitir usando as funções de impressão.

Cancelando um CF-e

  1. Utilize a função “SEFAZ SAT – Montar XML de Cancelamento da Venda” fornecendo os seguintes parâmetros:
    1. cnpj
    2. numeroCaixa
    3. chCanc – A chave de cancelamento pode ser obtido no item “chaveConsulta” do Mapa retornado na venda.
    4. signAC
  2. Salve o XML retornado na função anterior numa variável do tipo letras;
  3. Chame a função “SEFAZ SAT – Cancelar Última Venda” passando os seguintes parâmetros:
    1. numeroSessao – Número de sessão
    2. codigoDeAtivacao – Chave de ativação do equipamento.
    3. chave – Chave do CF-e que será cancelado;
    4. dadosCancelamento – Este é o XML gerado anteriormente.
  4. 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;
  5. 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

Leave a comment