Package: sathub
Projeto SATHubThis project is aboutSAT-CF-ewhich is a system for autorization and
transmission of fiscal documents, developed by Finance Secretary of
state of São Paulo, Brazil. This entire project, variables, methods and
class names, as well as documentation, are written in brazilian
portuguese.Refer to theofficial web sitefor
more information (in brazilian portuguese only).Este projeto está relacionado à tecnologiaSAT-CF-epara autorização e
transmissão de documentos CF-e (Cupons Fiscais eletrônicos).SATHub é um projeto open-source baseado emFlaskeFlask-RESTfulpara
prover uma API que possibilita que múltiplos pontos-de-venda (PDV) possam
compartilhar um único equipamento SAT. Por se tratar de uma API RESTful,
qualquer aplicação de ponto-de-venda pode invocar funções SAT, desde que seja
capaz de fazer requisições HTTP simples.Também fornece umfrontendweb leve para tornar possível o acesso às funções
do equipamento SAT a partir de um navegador com suporte à HTML5.Este projeto integra os projetosSATCFeeSATcomum <https://github.com/base4sistemas/satcomum>para fornecer uma API
RESTful. Se o seu projeto já for baseado no projetoSATCFe, basta configurar
o acesso ao servidor SATHub e instanciarsatcfe.ClienteSATHubao invés de
instanciarsatcfe.ClienteSATLocal.Instalando em Modo de Desenvolvimento no Windows 8.1Caso queira experimentar SATHub em Windows, o roteiro não é exatamente curto mas
é bem simples. O primeiro passo é instalar oPython2.7 e todas as demais
dependências para que seja possível executar o servidor SATHub em modo de
desenvolvimento.Baixe o arquivo MSI para sua arquiteturaneste link.
Procure o linkLatest Python 2 Releasee então localize o link para para o
pacoteWindows x86 MSI installerouWindows x86-64 MSI installerse
a arquitetura do seu sistema for 64 bits. Faça a instalação normalmente como
qualquer outro pacote MSI, aceitando as opções pré-definidas.Para ter acesso aos binários, será preciso incluir o caminho emPath.
TecleWin+Xe escolha a opçãoSistema.No diálogoSistemaescolha a opçãoConfigurações avançadas do sistema.No diálogoPropriedades do Sistema, guiaAvançado, clique no botãoVariáveis de Ambiente.Na lista deVariáveis do Sistemalocalize a variávelPath, selecione-a
e clique emEditareinclua(não apague o valor já existente) o
seguinte trecho no início do campoValor:C:\Python27;C:\Python27\Scripts;Se você instalou o Python em um caminho diferente, adapte os valores.Abra o Windows PowerShell: mova o cursor para o canto superior direito,
clique na opçãoPesquisare escrevapowershell. A primeira opção
encontrada deverá serWindows PowerShell, clique nela.Digite o seguinte comando no terminal:PSC:\Users\User>python--versionPython2.7.10Se obtiver um erro, revise os passos.Com o Python instalado será preciso instalar as dependências para execução
do SATHub em modo de desenvolvimento. Ainda no Windows PowerShell:PSC:\Users\User>pipinstallvirtualenvPSC:\Users\User>virtualenvsatPSC:\Users\User>.\sat\Scripts\activate.ps1(sat)PSC:\Users\User>pipinstallflask(sat)PSC:\Users\User>pipinstallflask-restful(sat)PSC:\Users\User>pipinstallunidecode(sat)PSC:\Users\User>pipinstallrequests(sat)PSC:\Users\User>pipinstallsatcomum(sat)PSC:\Users\User>pipinstallsatcfeFaça odownload dos fontesdo projeto SATHub (ou clone o projeto se você possui oGitinstalado) e descompacte o arquivo em
um diretório de sua preferência, digamosC:\workdir.(sat)PSC:\Users\User>cd\workdir\sathub-master\(sat)PSC:\workdir\sathub-master>pythonrunserver.pySe lhe for apresentando o diálogo de restrição de acesso do Firewall do Windows,
permita o acesso para o aplicativo. Você deverá ver uma saída como essa
(aparentemente com informação duplicada, isso é normal em desenvolvimento):SATHub versao 0.1
[-] Debug esta LIGADO
[-] Caminho para DLL: sat.dll
[-] Convencao de chamada para DLL: Windows "stdcall"
** DLL NAO ENCONTRADA **

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
[-] Debug esta LIGADO
[-] Caminho para DLL: sat.dll
[-] Convencao de chamada para DLL: Windows "stdcall"
** DLL NAO ENCONTRADA **Neste ponto o servidor está em execução, mas há um problema. Note a mensagem
que dizDLL NAO ENCONTRADA. Interrompa o servidor teclandoCtrl+C.
Note que após a primeira execução foi criado um arquivo chamadoconf.json.
Abra esse arquivo com um editor de textos e coloque o caminho completo para a
DLL do seu equipamento SAT. O arquivo deverá ficar mais ou menos assim:{"debug":true,"codigo_ativacao":"123456789","convencao_chamada":2,"caminho_dll":"C:/SAT/SAT.DLL"}Note que o caminho para a DLL é especificado usando barras no padrão Unix
(/forward slahes), mesmo no Windows, ao invés de usar contra-barras.Se o seu código de ativação for diferente, altere-o também. A convenção de
chamada2significaWindows Standard calls(ou apenasWindows StdCall).
Se sua DLL usar a convenção de chamadas de C (Standard C calls) altere a
propriedadeconvencao_chamadapara1.Execute o servidor novamente compython runserver.py. Você deverá ver a
seguinte saída.SATHub versao 0.1
[-] Debug esta LIGADO
[-] Caminho para DLL: C:\SAT\SAT.DLL
[-] Convencao de chamada para DLL: Windows "stdcall"

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
[-] Debug esta LIGADO
[-] Caminho para DLL: C:\SAT\SAT.DLL
[-] Convencao de chamada para DLL: Windows "stdcall"Acessando a API via PowerShellNeste ponto o servidor está em execução, o caminho para a DLL do equipamento
SAT foi configurado e está tudo OK. Podemos então fazer algumas chamadas à API
do SATHub para vê-lo em ação. Abra outra janela do PowerShell e digite:PSC:\Users\User>Invoke-RestMethod-Urihttp://localhost:5000/hub/v1/consultarsat-MethodPOST-Body"numero_caixa=1"Na janela do terminal PowerShell em que o servidor está em execução você verá o
acesso à URI, o método de acesso e o código de resposta,200OK, entre
outras informações:127.0.0.1 - - [20/Jun/2015 10:25:48] "POST /hub/v1/consultarsat HTTP/1.1" 200 -No terminal em que o comandoInvoke-RestMethodfoi executado você terá o
seguinte resultado (se tudo correr bem):funcao                    retorno
------                    -------
ConsultarSAT              101341|08000|SAT em operação||O equivalente em um terminal Linux, usandocurl, é o seguinte (acessando a
máquina Windows 8.1 em que o SATHub está executando, como no exemplo acima):$curl--data"numero_caixa=1"http://10.0.0.115:5000/hub/v1/consultarsat{"funcao":"ConsultarSAT","retorno":"101363|08000|SAT em opera\u00e7\u00e3o||"}Se você tiver outras máquinas Windows em uma rede local, ou estiver usando
máquinas virtuais, você poderá acessar um único equipamento SAT a partir de
qualquer uma delas.Acessando a API em C#Os exemplos abaixo mostram como é simples acessar a API RESTful de SATHub
através de outras linguagens muito comumente usadas neste campo de aplicações.
Neste exemplo, usando C# (testado comMonoDevelop):// (!) baseado em http://stackoverflow.com/a/4015346/550237usingSystem;usingSystem.Collections.Specialized;usingSystem.Net;usingSystem.Text;publicclassExemploSATHub{staticpublicvoidMain(){Console.WriteLine(ConsultarSAT());}privatestaticstringConsultarSAT(){varpayload=newNameValueCollection();payload["numero_caixa"]="1";varclient=newWebClient();varresponse=client.UploadValues("http://10.0.0.115:5000/hub/v1/consultarsat",payload);returnEncoding.Default.GetString(response);}}O resultado é o seguinte:$mscexemplo.cs$monoexemplo.exe{"funcao":"ConsultarSAT","retorno":"100914|08000|SAT em opera\u00e7\u00e3o||"}Executandosmoke testsCertas funções SAT são difíceis de serem executadas contra um equipamento SAT
real ou até mesmo contra o emulador desenvolvido pela Secretária da Fazenda,
como por exemplo,AtualizarSoftwareSATouCancelarUltimaVenda. Por esse
motivo foi desenvolvido ummockupda biblioteca SAT, que implementa todas as
funções que a biblioteca SAT implementa, mas não acessa nenhum equipamento. As
funções apenas recebem os parâmetros esperados e devolvem uma resposta muito
parecida com uma resposta de sucesso. Desse modo, omockupda biblioteca SAT
torna trivial executar testes simples para verificar o comportamento da API.Para executar ossmoke testsserá necessário compilar omockupda
biblioteca SAT que está emsathub/test/mockup/. Você irá precisar de um
compilador GCC ou outro capaz de compilar o código. Tipicamente, em um ambiente
Linux, basta invocarmakepara produzir o arquivolibmockupsat.so.Configure o SATHub apontando para omockupda biblioteca SAT (normalmente, a
convenção de chamada seráStandard C, equivalente a1):{"debug":true,"codigo_ativacao":"123456789","convencao_chamada":1,"caminho_dll":"~/sathub/test/mockup/libmockupsat.so"}Para executar os testes é necessário instalar o framework para testes de APIs
RESTfulPyRestTeste suas dependências:(sat)$pipinstallpyresttestpyyamlpycurljsonschemaAbra uma janela de terminal e execute o servidor SATHub:(sat)$pythonrunserver.pyAbra uma outra janela do terminal e vá até o diretório onde está o arquivo YAML
que descreve os testes e execute-os com PyRestTest:(sat)$cd~/sathub/test/tests(sat)$resttest.pyhttp://localhost:5000smoke.yamlTestGroupMetodosSAT-CF-eSUCCEEDED:14/14TestsPassed!ConsideraçõesVia de regra, é recomendado que se mantenha um olho na legislação vigente a
respeito da tecnologia SAT-CF-e e das implicações dessa legislação na tecnologia
de suporte empregrada. Atualmente não há nada regulamentando o acesso
compartilhado ao equipamento SAT. Tudo o que se tem é que essa possibilidade tem
sido aventada desde os primórdios do projeto.Sendo assim, apenas use o bom senso ao compartilhar o acesso ao equipamento SAT
e evite compartilhar muitos pontos-de-venda em único equipamento. Considere
balancear o número de pontos-de-venda e tenha sempre uma folga para redirecionar
em caso de pane em um equipamento, por exemplo.