Voltar para o topo
Caso não consiga ver as imagens deste e-mail, acesse este link.
Escovando Bits

Entendendo S@T x DarumaFramework

S@T Parte 2/4

Prezados Parceiros e Escovadores de Bits! Mais novidades sobre o S@T. Nesta segunda parte de nosso Escovando Bits Especial S@T, parte 2 de 4, falaremos sobre a DarumaFrameWork.dll e a DarumaFrameWork.SO, que é a única DLL do mercado realmente multiplataforma e adaptada com funções para rodar com o S@T. No “Escovando Bits” anterior, parte 1/4 vimos sobre como instalar o Emulador, ou seja, antes de ler esta parte 2/4 você deve ter o emulador já instalado e configurado.


Preocupados com a comunidade de desenvolvedores Daruma, estamos com uma solução para o S@T que vou explicar em três etapas. Vou preparar três documentos explicando o mais detalhado possível como:

Pessoal, é importante lembrar que o emulador não foi feito pela Daruma, ele é responsabilidade da SEFAZ e até o momento está compatível apenas com Windows, até a data de Hoje 26/03/2013 este é o comportamento do Emulador e ele pode mudar conforme suas atualizações de especificação e melhorias na especificação. Nada garante que o hardware final homologado pela Daruma obedecerá a verão atual do emulador, pois pode haver mudanças na especificação do S@T e isso afeta tanto o emulador como o hardware S@T, físico.

Entendendo S@T x DFW

Já estamos com quase todo o ambiente de testes do SAT configurado, agora vamos entender os comandos do S@T e relacioná-los com a DarumaFramework. No documento a seguir, vamos terminar as configurações SAT x DFW e finalmente testar.

Considero que esta etapa deve vir antes das configurações finais e teste, pois vocês precisam entender os comandos do S@T. O que é o quê, qual a sequencia dos comandos e todo o restante. Curioso? Eu também! Então acompanhe os passos abaixo, pois vamos “destrinchar” os comandos do S@T.

Informações importantes

DarumaFramework_SAT.xml – é um arquivo xml com TAG’s. Estas tag’s são usadas para configurar o S@T, tais como impostos, informações do contribuinte e inúmeras outras informações do S@T. Abaixo vou explicar apenas as tag’s obrigatórias a serem preenchidas, apenas o mandatório para vocês conseguirem emitir um cupom usando o emulador S@T CF-e.

DarumaFramework_SAT.xml:

<DARUMAFRAMEWORKSAT>

  <CONFIGURACAO>

    <estadoCFe>0</estadoCFe>

    <numeroSessao>100000</numeroSessao>

    <codigoDeAtivacao>1234567</codigoDeAtivacao><!-- Obrigatório – Este é o código de ativação que nós configuramos no documento anterior. Usamos o aplicativo “Ativação SAT-CFe” para fazer isso. -->

    <ChaveConsulta></ChaveConsulta>

  </CONFIGURACAO>

  <IDENTIFICACAO_CFE>

    <CNPJ>22222222222222</CNPJ> <!-- Obrigatorio – Este é o CNPJ que nós configuramos no documento anterior. Usamos o aplicativo “Ativação SAT-CFe” para fazer isso. -->

<signAC>1111111111111122222222222222</signAC> <!-- Obrigatório – Esta Assinatura foi configurada no documento anterior. Usamos o aplicativo “Ativação SAT-CFe” para fazer isso. -->

   <numeroCaixa>001</numeroCaixa> <!-- Obrigatório – Número do caixa onde o SAT CFe se encontra. -->

  </IDENTIFICACAO_CFE>

  <EMIT>

    <NomeFantasia>Urmet Daruma</NomeFantasia>

    <RazaoSocial>Razao Social</RazaoSocial>

    <Endereco>Endereco</Endereco>

    <CNPJ>11111111111111</CNPJ> <!-- Obrigatório -->

    <IE>111111111111</IE> <!-- Obrigatório -->

    <IM></IM>

    <cRegTribISSQN>1</cRegTribISSQN> <!-- Obrigatório -->

    <indRatISSQN>N</indRatISSQN> <!-- Obrigatório -->     

  </EMIT>

  <PROD>

    <CFOP>0001</CFOP> <!—Obrigatório – CFOP que será usado no CFe, deixamos 0001 apenas para testes. -->

    <indRegra>T</indRegra> <!—Obrigatório – Indicador de Arredondamento ou Truncamento, sendo “A” ou “T”. -->

  </PROD>

  <IMPOSTO>

    <ICMS>

      <ICMS00>

        <Orig>0</Orig> <!-- Obrigatório – É a origem da mercadoria, sugerimos o uso do valor 0, pois significa que é mercadoria nacional. -->

        <CST>00</CST> <!-- Obrigatório – É a tributação a ser usada, sugerimos 00, pois significa que a mercadoria será tributada integralmente. -->

        <pICMS>17.00</pICMS> <!—Obrigatório – Alíquota que será usada na venda do item. -->

      </ICMS00>

Importante: Em nossos testes, as chaves restantes que não constam aqui neste escovando bits, não precisam ser alteradas, por este motivo eu não irei mostrá-las. Sendo assim, nosso arquivo DarumaFramework_SAT.xml terminou aqui.

O cupom do S@T necessita passar por 5 fases para então ser emitido, são eles:
Abertura – Registro de Item – Totalização – Pagamento – Encerramento

É importante lembrar que o S@T faz a venda não-concomitante, ele não trabalha da forma concomitante. Então não é possível registar apenas 01 item em seu sistema e esperar alguma resposta do S@T, como é hoje no caso da impressora fiscal. Reforçando: o S@T só trabalha da forma não-concomitante, de forma que você só enviará o CF-e quando ele estiver totalmente pronto e com a forma de pagamento definida. O S@T só é responsável por fazer o envio dos itens e dados de venda e dizer se ele foi enviado com sucesso ou não para o servidor fiscal, retornando a você uma chave indicando que “SIM”, foi registrado no servidor do fisco a venda, esta é a forma mais básica de definir este hardware.

Vou exemplificar como é hoje com a impressora fiscal e em seguida como será o comportamento do S@T.

  • ECF:
    • Com seu sistema você abre o cupom fiscal e a ECF imprime a abertura;
    • Com seu sistema, um registro de item é feito e a ECF imprime este item;
    • Com seu sistema, outro registro de item é feito e a ECF imprime este item;
    • Com seu sistema, a totalização e pagamento são feitos e em seguida a ECF imprime isso;
    • Por fim, seu sistema encerra seu cupom, provavelmente com uma mensagem promocional e a ECF imprime este encerramento + mensagem;
  • S@T:
    • Com seu sistema, você armazena a abertura do CF-e e o S@T não faz nada;
    • Com seu sistema, você armazena o registro de item do CF-e e o S@T não faz nada;
    • Com seu sistema, você armazena outro registro de item do CF-e e o S@T não faz nada;
    • Com seu sistema, você armazena a totalização e os meios de pagamento do CF-e e o S@T não faz nada;
    • Com seu sistema, você envia todos os dados armazenados nas etapas acima e faz o encerramento do CF-e, o S@T faz a transmissão completa deste CFe;
      Esta é a diferença entre o comportamento do S@T comparado com o comportamento da ECF.
      Abaixo, um fluxo para facilitar o comportamento do S@T com os comandos da DarumaFramework. Não se preocupe em codificar agora, preocupe-se apenas em entender. A etapa 2/3 foi feita apenas para entender. Na etapa 3/3 vamos explicar passo a passo como usar os comandos acima, qual devemos usar primeiro, qual será usado no meio e assim por diante.

Exemplo

[Exemplo]
Se você não vai testar o S@T, ignore os passos abaixo

Explicação dos comandos S@T na DarumaFramework

Abertura do CF-e no SAT – aCFeAbrir_SAT_Daruma(char *pszTagsParamAbertura)

  • A letra “a” no início do método significa que será armazenado algo. Sendo assim, concluímos que nada será transmitido ou impresso;
  • Este método é responsável por armazenar as informações do cliente, informações do consumidor;
  • O parâmetro pszTagsParamAbertura não é de preenchimento obrigatório;
  • O método possui apenas um parâmetro, que é do tipo char. Mais então como vou passar CPF e Nome se existe apenas um parâmetro? O S@T usa o conceito de tag’s, então dentro da variável char deve conter
    as tag’s com as informações a serem passadas;
  • Caso seja informada alguma tag como parâmetro, a mesma deve ser fechada;
  • Se for usado algum parâmetro, além da tag a ser usada, deverá ser informada também a chave <dest>.
    Veja o exemplo : <dest><CPF>39834505303</CPF></dest>
  • Possíveis retornos do método:
    • 1 – Comando executado com sucesso
    • 120 – Encontrada tag inválida
    • 121 – Estrutura Invalida
    • 122 – Tag obrigatória não foi informada
    • 123 – Tag obrigatória não tem valor preenchido
    • 130 - CFe ja Aberto

Venda de item no CF-e S@T - aCFeVender_SAT_Daruma(char *pszTagsParamVenda)

  • A letra “a” no início do método significa que será armazenado algo. Sendo assim, concluímos que nada
    será transmitido ou impresso;
  • Este método irá armazenar as informações do item a ser vendido;
  • As informações passadas como parâmetro são armazenadas no arquivo temporário;
  • O parâmetro pszTagsParamVenda é de preenchimento obrigatório;
  • O método possui apenas um parâmetro, que é do tipo char. O S@T usa o conceito de tag’s, então dentro
    da variável do tipo char deve conter as tag’s com as informações a serem passadas;
  • Caso seja informada alguma tag como parâmetro, a mesma deve ser fechada;
  • Caso o método seja chamado sem que o CF-e seja aberto, internamente a DarumaFramework irá
    executar o método de abertura de CF-e;
  • As tag’s obrigatórias da venda de item no CF-e são: Prod(Produto), cProd(Código de Produto), xProd(Descrição do Produto), CFOP(Informado no DFW_SAT.xml), uCom(Unidade do Produto), qCom(Quantidade vendida), vUnCom(Valor Unitário), indRegra( Indicador de
    Arredondamento/Truncamento), imposto(Informado no DFW_SAT.xml);
  • Possíveis retornos do método:
    • 1 – Comando executado com sucesso
    • 120 – Encontrada tag inválida
    • 121 – Estrutura Invalida
    • 122 – Tag obrigatória não foi informada
    • 123 – Tag obrigatória não tem valor preenchido
    • 130 - CFe ja Aberto

Pagamento do CF-e S@T – aCFeEfetuarPagamento_SAT_Daruma(char *pszTagsParamPagamento)

  • A letra “a” no início do método significa que será armazenado algo. Sendo assim, concluímos que nada será transmitido ou impresso;
  • Este método irá armazenar as informações do pagamento a ser feito no CF-e;
  • As informações passadas como parâmetro são armazenadas no arquivo temporário;
  • O parâmetro pszTagsParamPagamento é de preenchimento obrigatório;
  • O método possui apenas um parâmetro, que é do tipo char. O S@T usa o conceito de tag’s, então dentro da variável do tipo char deve conter as tag’s com as informações a serem passadas;
  • Caso seja informada alguma tag como parâmetro, a mesma deve ser fechada;
  • As tag’s obrigatórias para fazer o pagamento do CFe são: MP(Meio de Pagamento), cMP(Código do Meio de Pagamento), vMP(Valor do Meio de Pagamento);
  • Possíveis retornos do método:
    • 1 – Comando executado com sucesso
    • 120 – Encontrada tag inválida
    • 121 – Estrutura Invalida
    • 122 – Tag obrigatória não foi informada
    • 123 – Tag obrigatória não tem valor preenchido
    • 131 - CFe não aberto
    • 133 - CFe não em fase de pagamento

Encerramento CF-e S@T – tCFeEncerrar_SAT_Daruma(char *pszTagsParamEncerramento)

  • A letra “t” no início do método significa que será enviado algo. Sendo assim, concluímos que será transmitido seu CF-e nesta etapa;
  • Este método irá transmitir as informações do CF-e. As informações contidas no arquivo temporário
    usadas nos métodos anteriores;
  • Este método é responsável também por fazer a impressão do seu CF-e na DR700;
  • O parâmetro pszTagsParamEncerramento não é de preenchimento obrigatório;
  • O método possui apenas um parâmetro, que é do tipo char. O SAT usa o conceito de tag’s, então
    dentro da variável do tipo char deve conter as tag’s com as informações a serem passadas;
  • Caso seja informada alguma tag como parâmetro, a mesma deve ser fechada;
  • Se for usado algum parâmetro, além da tag a ser usada, deverá ser informada também a chave
    <infAdic>. Veja o exemplo : <infAdic><infCpl>Obrigado e volte sempre!</infCpl></infAdic>
  • Possíveis retornos do método:
    • 1 – Comando executado com sucesso
    • 120 – Encontrada tag inválida
    • 121 – Estrutura Invalida
    • 122 – Tag obrigatória não foi informada
    • 123 – Tag obrigatória não tem valor preenchido
    • 140 – biblioteca auxiliar SAT.dll não foi encontrada/carregada
    • 6 – TimeOut, erro de comunicação com o SAT
    • 12 - SAT retornou erro, chame o método rUltimoErro_SAT_Daruma para verificar o erro
    • 131 - CFe não aberto
    • 135 - CFe não em fase de encerramento
    • 6001 - Código de ativação inválido
    • 6002 – SAT ainda não ativado
    • 6003 – SAT não vinculado ao AC
    • 6004 – Vinculação do AC não confere
    • 6005 – Tamanho do CFe superior a 1500KB
    • 6006 – SAT bloqueado pelo contribuinte
    • 6007 – SAT bloqueado pela SEFAZ
    • 6008 – SAT bloqueado por falta de comunicação
    • 6009 – SAT bloqueado, código de ativação incorreto
    • 6010 – Erro de validação do conteúdo
    • 6098 – SAT em processamento. Tente novamente
    • 6099 – Erro desconhecido na emissão

 

Escovando a Abertura

Delphi

//Declarações
function
aCFeAbrir_SAT_Daruma(pszTagsParamAbertura:string):Integer; StdCall; External 'DarumaFramework.dll';

//Chamada de Métodos
//Sem parâmetro
iRetorno := aCFeAbrir_SAT_Daruma (‘ ’);
//Com parâmetro
iRetorno := aCFeAbrir_SAT_Daruma (‘<dest><CPF>39834505303</CPF></dest>’);

C#

//Declarações
[DllImport("DarumaFrameWork.dll")]
public static extern int aCFeAbrir_SAT_Daruma(string pszTagsParamAbertura);

//Chamada de Métodos
//Sem parâmetro
iRetorno = aCFeAbrir_SAT_Daruma (“ “);
//Com parâmetro
iRetorno = aCFeAbrir_SAT_Daruma (“<dest><CPF>39834505303</CPF></dest>”);

Visual Basic 6

' Declarações Fiscais
Public Declare Function aCFeAbrir_SAT_Daruma Lib "DarumaFrameWork.dll" (ByVal pszTagsParamAbertura As String) As Integer

' Chamada de Métodos
//Sem parâmetro
iRetorno = aCFeAbrir_SAT_Daruma (“ “)
//Com parâmetro
iRetorno = aCFeAbrir_SAT_Daruma (“<dest><CPF>39834505303</CPF></dest>”)

Escovando a venda

Delphi

//Declarações
function aCFeVender_SAT_Daruma(pszTagsParamVenda:string):Integer; StdCall; External 'DarumaFramework.dll';

//Chamada de Métodos
iRetorno := aCFeVender_SAT_Daruma (‘<Prod><cProd>0008992</cProd><xProd>Impressora Fiscal</xProd><uCom>UN</uCom><qCom>1</qCom><vUnCom>1900</vUnCom></Prod>
<IMPSTO><ICMS><ICMS00></ICMS00></ICMS> <PIS><PISAliq><CST>01</CST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISAliq></PIS>
<PISST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISST>
<COFINS><COFINSAliq><CST>01</CST><vBC>1.00</vBC><pCOFINS>1.0000</pCOFINS>
</COFINSAliq></COFINS></IMPOSTO>’);

C#

//Declarações
[DllImport("DarumaFrameWork.dll")]
public static extern int aCFeVender_SAT_Daruma(string pszTagsParamVenda);

//Chamada de Métodos
iRetorno = aCFeVender_SAT_Daruma (“<Prod><cProd>0008992</cProd><xProd>Impressora Fiscal</xProd><uCom>UN</uCom><qCom>1</qCom><vUnCom>1900</vUnCom></Prod>
<IMPSTO><ICMS><ICMS00></ICMS00></ICMS> <PIS><PISAliq><CST>01</CST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISAliq></PIS>
<PISST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISST>
<COFINS><COFINSAliq><CST>01</CST><vBC>1.00</vBC>
<pCOFINS>1.0000</pCOFINS></COFINSAliq></COFINS></IMPOSTO>”);

Visual Basic 6

' Declarações Fiscais
Public Declare Function aCFeVender_SAT_Daruma Lib "DarumaFrameWork.dll" (ByVal pszTagsParamVenda As String) As Integer

' Chamada de Métodos
iRetorno = aCFeVender_SAT_Daruma (“<Prod><cProd>0008992</cProd><xProd>Impressora Fiscal</xProd><uCom>UN</uCom><qCom>1</qCom><vUnCom>1900</vUnCom></Prod>
<IMPSTO><ICMS><ICMS00></ICMS00></ICMS> <PIS><PISAliq><CST>01</CST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISAliq></PIS>
<PISST><vBC>1.00</vBC><pPIS>1.0000</pPIS></PISST>
<COFINS><COFINSAliq><CST>01</CST><vBC>1.00</vBC><pCOFINS>1.0000</pCOFINS>
</COFINSAliq></COFINS></IMPOSTO>”)

Escovando os meios de pagamento

Delphi

//Declarações
function aCFeEfetuarPagamento_SAT_Daruma(pszTagsParamPagamento:string):
Integer;StdCall;External 'DarumaFramework.dll';

//Chamada de Métodos
iRetorno := aCFeEfetuarPagamento_SAT_Daruma(‘<MP><cMP>01</cMP><vMP>2500</vMP></MP>’);

C#

//Declarações
[DllImport("DarumaFrameWork.dll")]
public static extern int aCFeEfetuarPagamento_SAT_Daruma(string pszTagsParamPagamento);

//Chamada de Métodos
iRetorno = aCFeEfetuarPagamento_SAT_Daruma(“<MP><cMP>01</cMP><vMP>2500</vMP></MP>”);

Visual Basic 6

' Declarações Fiscais
Public Declare Function aCFeEfetuarPagamento_SAT_Daruma Lib "DarumaFrameWork.dll" (ByVal pszTagsParamPagamento As String) As Integer

' Chamada de Métodos
iRetorno = aCFeEfetuarPagamento_SAT_Daruma(“<MP><cMP>01</cMP><vMP>2500</vMP></MP>”)

Escovando o encerramento

Delphi

//Declarações
tCFeEncerrar_SAT_Daruma(pszTagsParamEncerramento:string):Integer; StdCall; External 'DarumaFramework.dll';

//Chamada de Métodos
//Sem parâmetro
iRetorno := tCFeEncerrar_SAT_Daruma(‘ ’);
//Com parâmetro
iRetorno := tCFeEncerrar_SAT_Daruma _SAT_Daruma(‘<infAdic><infCpl>Obrigado e volte sempre!</infCpl></infAdic>’);

C#

//Declarações
[DllImport("DarumaFrameWork.dll")]
public static extern int tCFeEncerrar_SAT_Daruma(string pszTagsParamEncerramento);

//Chamada de Métodos
//Sem parâmetro
iRetorno = tCFeEncerrar_SAT_Daruma(“ “);
//Com parâmetro
iRetorno = tCFeEncerrar_SAT_Daruma _SAT_Daruma(“<infAdic><infCpl>Obrigado e volte sempre!</infCpl></infAdic>”);

Visual Basic 6

' Declarações Fiscais
Public Declare Function tCFeEncerrar_SAT_Daruma Lib "DarumaFrameWork.dll" (ByVal pszTagsParamEncerramento As String) As Integer

' Chamada de Métodos
' Sem parâmetro
iRetorno = tCFeEncerrar_SAT_Daruma(“ “)
' Com parâmetro
iRetorno = tCFeEncerrar_SAT_Daruma _SAT_Daruma(“<infAdic><infCpl>Obrigado e volte sempre!</infCpl></infAdic>”)

Se tiver alguma dúvida e/ou dificuldade, entre em contato com a nossa equipe de suporte ao desenvolvedor.

Suporte ao desenvolvedor: 0800 770 3320
E-mail Skype
desenvolvedores.suporte@daruma.com.br
suporte.desenvolvedores@daruma.com.br
desenvolvedores.daruma@daruma.com.br
suporte@daruma.com.br
suporte.ddc@daruma.com.br
ddc.suporte@daruma.com.br
ana.ribeiro@daruma.com.br
claudenir@daruma.com.br
desenvolvedores_suporte_daruma
suporte_desenvolvedores_daruma
suporte_ddc_daruma
ddc_suporte_daruma
desenvolvedores_daruma
suporte_daruma
anaribeiro.ddc
claudenir_andrade
Acompanhe nossa comunidade e fique por dentro de novidades
DDC Facebook Twitter Google+ Linkedin YouTube Skype Social Network
www.desenvolvedoresdaruma.com.br