Informações Gerais

 

Especifica

Produto

TSS

Módulo

 

Segmento Executor

SERVIÇOS

Projeto1

M_SER_TSS002

IRM1

PCREQ-8234

Requisito1

PCREQ-8235

Subtarefa1

 

Release de Entrega planejada

12.1.13

País

( X ) Brasil  (  ) Argentina  (  ) México  (  ) Chile  (  ) Paraguai  (  ) Equador

(  ) USA  (  ) Colômbia   (  ) Outro _____________.

 

Objetivo

Disponibilizar uma interface para integração dos métodos WS SOAP com a API HTTP e gerenciar o processo de contingência do TSS OFFLINE.

Definição da Regra de Negócio

A funcionalidade do serviço do TSS OFFLINE será definida através da chamada da função IsLocalBrocker(). Esta função será executada dentro da função TSSAnalyseReq(), onde é chamada na segregação dos métodos do TSS. E assim, direcionada para a função TSSBrokerReq() que será responsável por identificar o Web Service e o método em execução, através do Alias virtual HTTPHEADIN->MAIN e da função procname(), respectivamente.  

Após a identificação do Web Service e do Método, a rotina buscará os dados referente ao método em execução para que seja feita a montagem da requisição à ser enviada para o TSS ONLINE. Os dados deverão ser recuperados através da rotina TSSGetProcQueue(), que retornará um array com os dados do método. Por fim,  identificará a fila de processamento da requisição, onde será realizada através da função setProcQueue().

Assim definidos os dados para processamento,  será executado o processamento da requisição através da função TSSLocalBroker().

A função TSSLocalBroker() será responsável por processar as requisições dos métodos do TSS OFFLINE.

Para toda requisição será realizada a validação de acordo com sua funcionalidade. Quando ocorrer a validação com sucesso, verificará o cache da requisição, que é formada pela serialização da mensagem da requisição e o código do processo, assim resultando numa mensagem Hash, obtida a partir da função sha1(). A consulta do cache ocorrerá através da função getCache(). Caso a requisição seja encontrada, a rotina retornará a resposta em cache, caso contrário, o próximo passo consiste na identificação do cadastro de entidades, que ocorrerá através da função getEntidade().

Os métodos que precisarem de um pré-processamento serão tratados pela função preProcReq(), já os métodos que precisarem apenas verificar se a requisição deve ou não ser enviada para o TSS ONLINE,  apenas serão tratados pela função setSendReq(), por padrão sempre enviado ao TSS ONLINE. De acordo com a fila de processamento,  terá a definição da tabela de negócio, através da função setProcTable().

O processo pode variar de acordo com o método executado . Onde serão atendidos pelo próprio TSS OFFLINE, sem a necessidade do envio para o TSS ONLINE,  processados apenas no TSS ONLINE ou ainda em ambos os TSS.

  • Processamento no TSS OFFLINE:

As requisições definidas para processamento no TSS OFFLINE, passarão por duas restrições antes de serem executadas no TSS OFFLINE:

  1. Somente requisições com código de entidade preenchido serão processadas;
  2. Apenas processos do tipo 0,1 ou 2 serão processados, sendo que:

0 - Admempresas

1 - Configuração

2 - Remessa de processamento

3 - Monitoramento

O processamento no TSS OFFLINE ocorrerá através das mesmas funções de processamento utilizadas no TSS ONLINE. 


  • Envio para TSS ONLINE:

Antes do processo de envio para o TSS ONLINE, o sistema verificará os parâmetros de configuração da entidade, através da função GetDocCfg(). E também configurará a sequência da requisição, através da função getReqSequence().

A requisição a ser envida para o TSS ONLINE, será uma mensagem JSON que será obtida através da chamada da função getJSONRequest(), sendo que, só poderão ser envidas caso o processamento tenha ocorrido com sucesso.

O envio da requisição para o TSS ONLINE poderá ocorrer de duas formas Síncrona ou Assíncrona.

Processo Síncrono

No processamento Síncrono, o envio da requisição para o TSS ONLINE será realizado na mesma conexão estabelecida pelo ERP com o TSS OFFLINE. Os processamentos síncronos serão identificados através das seguintes condições:

  1. Tipo = " " : Requisições sem definição de tipo.
  2. Tipo = 3 : Requisições do tipo consulta de documentos.
  3. Tipo = 0 : Requisição de cadastro de empresa.

Ao atender os critérios acima, ocorrerá a consulta do status de operação do TSS ONLINE. O status deverá ser obtido através da função isTSSCloudOnline(), se retornar inválido indica que o TSS ONLINE está fora de operação, impossibilitando o envio, se o retorno for válido, a requisição poderá ser enviada através da função TSSPostQueueMessage().

De acordo com o retorno obtido pela função TSSPostQueueMessage() a rotina deverá se comportar da seguinte forma:

  1. Retorno de Ticket: Este caso, o TSS ONLINE retornou um ticket, indicando que está utilizando processamento em Fila, neste caso deverá ser enviada uma outra requisição para consultar o próprio ticket, com a finalidade de obter o retorno do processamento do método. A função responsável pela montagem da requisição de consulta do ticket é getJsonTicket().
  2. Retorno com resultado do Processo: Este caso, o TSS ONLINE está realizando o processamento da requisição na mesma comunicação, retornando o resultado do processamento do método.
  3. Retorno invalido: Este caso, o TSS ONLINE está fora de operação, onde deverá ser tratado através da função procRetError().

Poderá haver a necessidade de realizar algum processamento com o retorno do TSS ONLINE. Dessa forma o retorno deverá ser tratado através da função procRetOnline()

Caso ocorra falha na consulta do status de operação do TSS ONLINE, os processos do tipo 3 "consulta de documentos", deverão ser atendidas pelo TSS OFFLINE, nesse caso deverá ser executada a função responsável pelo processamento do método, que retornará o status do documento na base de dados do TSS OFFLINE.


Processo Assíncrono

O processamento Assíncrono será realizado para os processos capazes de gerar a resposta para o ERP somente utilizando o serviço do TSS OFFLINE sem depender de uma resposta do TSSONLINE.

Neste caso a conexão com o ERP será liberada e a requisição será colocada em uma fila do TSS OFFLINE através da função putQueue()  para que essa possa ser envida posteriormente através do JOB do TSS OFFLINE( JOB_DLL( ) ). 

Por fim as requisições recebidas e atendidas com sucesso, serão armazenadas no cache da aplicação através da função grvCache(). 


Estrutura da função:

Função:  TSSAnalyseReq()

Função responsável pela verificação do serviço que está configurado.

A configuração é realizada no arquivo de configuração (.INI) do TOTVS Application Server.

Parâmetros:

Nulo

Retorno: 

lRetorno - Retorno verdadeiro caso o serviço específico esteja sendo utilizado.

 

 

Função: isLocalBroker()

Função responsável para verificar se o serviço será um TSS OFFLINE.

A configuração é realizada no arquivo de configuração (.INI) do TOTVS Application Server, onde deverá ser informado em seu environment:

[TSSOFFLINE]

TSSOFFLINE=1              

ONLINEURL=URL do TSS OnLine
ONLINEPORT=Porta do TSS OnLine


Parâmetros:

Nulo

Retorno: 

lRetorno - Retorno verdadeiro caso o serviço seja sendo utilizado.

 

Função: TSSBrokerReq()

Função responsável pela definição básica do processamento da requisição, ou seja, responsável por identificar o Web Service e o Método em execução, buscando os dados referente ao método para que seja feita a montagem da requisição e identificar a fila de processamento.

O retorno da função deverá ser de acordo com a estrutura de retorno definida para o método Web Service. Em caso de falha que provoque o etorno Soap fault, a rotina deverá preencher a variável cError com a mensagem Soap fault e retornar nil.

Parâmetros:

oWsRequest - Mensagem Soap recebida pelo Método Web Service. 

cError - Referência para mensagem de erro no processamento da requisição 

cWS - Web Service

cMethod - Método

Retorno:

oRet - Mensagem Soap de Retorno do Web Service.

 

Função: TSSLocalBroker()

Função responsável pelo tratamento da requisição que está sendo realizada com o serviço do TSS OFFLINE, ou seja, validará o método em execução (TSVAL0002ADMEMPRESSAS link), verificando o cache da requisição, o cadastro de entidades, verificar se é somente processado no TSS OFFLINE ou se deverá ser enviado para o TSS ONLINE, de forma síncrona ou assíncrona, consultar se o serviço do TSS ONLINE está disponível para envio da requisição. Além de tratamentos para contingência para certos cenários e processos.

O retorno da função deverá ser de acordo com a estrutura de retorno definida para o método Web Service. Em caso de falha que provoque o etorno Soap fault, a rotina deverá preencher a variável cError com a mensagem Soap fault e retornar nil.

Parâmetros:

oWsRequest - Mensagem Soap recebida pelo Método  Web Service. 

cWSRequest - Mensagem Soap recebida com número de serial.

cError - Referência para mensagem de erro no processamento da requisição.

aProc - Vetor contendo os dados de processo do método.

cMethod – Método.

Retorno:

oRet - Mensagem Soap de Retorno do Web Service.

 

Função: TSSGetProcQueue()

Função responsável por retornar os dados do método do TSS. 

As informações estarão definidas na função: TSSInitServices(). Ao identificar o processo no cadastro a rotina deverá retornar um vetor com os dados do processo. A busca pelo processo poderá ser realizada de duas formas, Web Service e Método ou através do código do processo.

Parâmetros:

cWS - Nome do Web Service

cMethod - Nome do método

cCodProc - Código do Processo

Retorno: 

aProc - Vetor com os dados do Processo. Sendo:

aProc[1] – WEB SERVICE;

aProc[2] – METODO;

aProc[3] - CODIGO DO PROCESSO;

aProc[4] - FUNCAO DE VALIDADE;

aProc[5] - FUNCAO DE PROCESSAMENTO;

aProc[6] - TIPO DE PROCESSOS;

aProc[7] - DEFINIÇÃO DA UTILIZAÇÃO DA FILA;

 

Função: GetCache()

Função responsável por recuperar a resposta de uma requisição gravada no cache no TSS OFFLINE.

A função receberá com parâmetro um Hash do tipo sha1 com a mensagem da requisição Web Service. Através desse Hash a função deverá realizar uma busca no cadastro de cache Tabela DLL0002.  Que será considerado apenas para processos com tipo diferente de "1" (Configuração). 

Parâmetros:

cTypeProc - Fila de processamento.

cHash - Hash da mensagem.

oRetMsgJson - Objeto como referência de retorno do cache.

Retorno:

lRet - Retorno verdadeiro caso tenha encontrado o cache.

 

Função: GetEntidade()

 Função responsável pela definição da entidade da requisição.

Parâmetros:

oJSON - Mensagem Soap recebida pelo Método  Web Service. 

oRet - Objeto como referência de retorno do processo ADMEMPRESAS.

cCodProc - Código do processo.

Retorno: 

cIdEnt - Entidade do processo.

 

Função: preProcReq()

Função responsável por concentrar qualquer pré-processamento necessário antes do envio da requisição para o TSS ONLINE.

Os seguintes processos são tratados pela função:

  • Processo 0062(Monitor Sefaz) e Processo 0063(Monitor Sefaz Modelo): Consulta o Status de operação do TSS ONLINE. Caso o TSS ONLINE esteja fora de operação, o retorno da requisição  será baseado no Status de Operação do TSS ONLINE, informando que a contingência OFFLINE está disponível. Vale lembrar que por se tratar de uma contingência do produto TSS, apenas a contingência OFFLINE estará disponível.  
    A resposta para informar a contingência do TSS ONLINE, é montada através da função getCloudStatus().

 

  • Processo 0073(Remessa de NFC-e): Caso a modalidade esteja configurada como normal e o TSS ONLINE esteja fora de operação, os documentos deverão ser registrados na tabela SPED050 e realizada a configuração para modalidade para contingência OFFLINE.

Parâmetros:

oRequest - Objeto da requisição.

cIdEnt - Código da entidade.

cError - Referência para atribuição de Erro no Processamento.

oRet - Referência para retorno do Processo.

lSinc - Referência para indicar se o processo será realizado de forma  Síncrona ou Assíncrona.

cCodProc - Código do processo.

Retorno: 

lRet - Indica se a requisição está válida para ser enviada para o TSS ONLINE.

 

Função: setSendReq()

Função responsável por definir se deve ou não enviar a requisição para o TSS ONLINE. Por default sempre será enviado para o TSS ONLINE os métodos do processo do tipo 1.

Parâmetros:

lSendReq - Indica se será enviado para o TSS ONLINE

Retorno:

Nulo

 

Função: setProcTable()

Função responsável por definir a tabela de negócio através da definição da fila de processamento do TSS ONLINE.

Parâmetros:

cModel - Modelo da fila

cCodProc - Código do processamento

Retorno:

Nulo

 

 

Função: GetDocCFG()

Função responsável por buscar os parâmetros de configuração da entidade (SPED000).

Parâmetros:

cIdEnt - Código da entidade

Retorno:

cJson - Mensagem com os parâmetros no formato Json.

 

 

Função: getReqSequence()

Função responsável por buscar a sequência da requisição.

Parâmetros:

Nulo

Retorno:

cSequence - Sequencia da requisição

 

 

Função: getJSonRequest()

 Função responsável pela montagem do leiaute padrão para envio de requisições para o TSS ONLINE. 

 A Mensagem deverá ser estruturada com os seguintes atributos:

  • id_request: ID para identificação da requisição. Deverá ser obtido através da função FWUUIDV4().
  • sequence: Identificador de sequência da requisição, será utilizada para informar ao TSS ONLINE a ordem das requisições. O novo modelo de processamento do TSS ONLINE utiliza o modo distribuído, caso o atributo esteja com o valor = 0, não será possível garantir a sequência de processamento enviada pelo TSS OFFLINE. Será necessário utilizar este atributo nas transmissões de NFS-e que necessitem de controle de numeração para determinados municípios, desta forma o TSS ONLINE garantirá a ordem de processamento informada. Caso haja necessidade de recuperação da sequência numérica, basta utilizar a função getReqSequence().
  • docModel: Identifica o modelo de documento da requisição, é  utilizada pelo TSS ONLINE para definir a fila de processamento da requisição. O modelo deverá ser obtido através da função getProcQueue()
  • codProc: Indica o código do processo. Deverá ser obtido através do array __aProc[IND_PROC]
  • action: Indica a função responsável pelo processamento da função no TSS ONLINE. Deverá ser obtido através de __aProc[IND_ACTION].
  • valid: Indica a função responsável pelo validação da função no TSS ONLINE. Deverá ser obtido através de __aProc[IND_VALID].
  • docConfig: Estrutura com os parâmetros MV do TSS OFFLINE. Devido ao TSS OFFLINE trabalhar com configurações locais, as requisições enviadas para o TSS ONLINE devem conter os parâmetros configurados no TSS OFFLINE. Dessa forma ao receber a requisição o TSS ONLINE dará preferência para os parâmetros enviados na requisição, que serão recuperados através da função getDocCfg().
  • receive: Estrutura com os parâmetros da requisição WS. Esse parâmetro deverá ser recuperado através da função FWJsonSerialize().

Parâmetros:

oReceive - Objeto da requisição Web Service.

cMethod - Método do Web Service.

aProc - Dados do método

cDocConfig - Configuração da entidade (JSon).

cSequence - Sequência de requisição.

Retorno:

cJSON - String com a requisição para o TSS ONLINE.

 

 

Função: isTSSCloudOnline()

Função responsável pela consulta do status da operação do TSS ONLINE. A consulta será realizada através do processo 0015 (TSProc0015CFGCONNECT ). A função TSSPostQueueMessage(). montará a mensagem JSON da requisição e enviando para o TSS ONLINE.

As consultas deverão ser realizadas de forma moderada, tendo um controle de intervalo entre as tentativas, o qual será realizado através da API para manipulação de variáveis Globais, devendo ser criado um array de 2 posições contendo o status de operação e o horário da última consulta realizada.

Caso a consulta seja realizada com Sucesso, o status deverá ser preenchido com ‘.T.’,  permanecendo enquanto não houver falha de comunicação com o TSS ONLINE. A cada tentativa de consulta o horário deverá ser sempre atualizado, mantendo um intervalos de 10 segundos. 

Parâmetros:

lCheck - Força a realização da consulta. 

cError - Referência para retorno de erro no processamento.   

Retorno:

aStatus[1] - Status de Operação.

 

 

Função: procRetError()

Função responsável por realizar os processos em caso de falha na transmissão da requisição.

Deverão ser realizados tratamentos para os seguintes processos:

  • Processo 0073(Remessa NFC-e): Caso ocorra falha no envio de NFC-e a rotina executará o processo configuração de modalidade a alterando para OFFLINE. 

A configuração deverá ser realizada através do Processo 0021 (TSProc0021CfgModalidGRV)

Parâmetros:

cIdEnt - Código da Entidade.

oWSRequest - Objeto da requisição Web Service.

cCodProc - Código do processo.

Retorno:

oRet - Requisição com a Remessa da NFC-e.

 

 

Função: procRetOnline()

Função responsável por executar rotina para processamento de retorno do TSS ONLINE.

Parâmetros:

oWSResponse - Retorno do TSS ONLINE

cCodProc - Código do processo.

Retorno:

oRet - Retorno do Processamento.

 

Função: TSSInitServices()

Função responsável por armazenar no array todos as informações dos métodos do Web Service.

Parâmetros:

Nulo

Retorno:

aService - Todos as informações dos métodos do Web Service.

 

 

Função: getJsonTicket()

 Função responsável pela montagem da requisição de consulta do ticket.

Parâmetros:

cTicket - Ticket de consulta.

Retorno:

aService - Todos as informações dos métodos do Web Service.

 

 

Função: getCloudStatus()

Função responsável por montar e retornar status de operação do TSS ONLINE.

A função montará a resposta com a estrutura da classe MonitorStatusSefazModelo, informado a indisponibilidade do TSS ONLINE.

Os atributos deverão ser preenchidos da seguinte forma:

Modelo: Informar o modelo de cada tipo de documento modelo Sefaz(55, 57, 58, 65).

VersaoMensagem: Preencher com conteúdo do parâmetro MV_VERSAO.

StatusCodigo: Preencher com "999".

StatusMensagem: "TSSCloud Fora de Operação".

UFOrigem: SPÈD0001->UF.

UFResposta: Preencher com vazio " ".

TempoMedioSef: 0

Motivo: "Falha de comunicação".

Observacao: vazio " ".

Sugestao: "Entrar em contingencia OFFLINE".

LogAuditoria: vazio " ".

Parâmetros:

cIdEnt - Código da Entidade

Retorno:

StatusSefazModelo - Estrutura MonitorStatusSefazModelo com mensagem de retorno.

 

 

Função: getReqSequence()

Função responsável por retornar à sequência definida para a requisição.

A sequência da requisição estará definida na variável __cSequence definida pela função setReqSequence(). A função deverá apenas retornar o conteúdo da variável.

Parâmetros:

Nulo

Retorno:  

__cSequence - Sequência da Requisição.

 

Função: setReqSequence()

Função responsável por definir a sequência do documento da requisição.

A sequência do documento deverá ser definido na variável __cSequence definida com escopo "static".

Parâmetros:

__cSequence - Sequência do documento .

Retorno:

Nulo

 

 

Função: getProcQueue()

Função responsável por retornar o Modelo do documento da requisição. 

O modelo do documento estará definido na variável __cProcModel definida pela função setProcQueue(). A função deverá apenas retorno do conteúdo da variável. 

Parâmetros:

Nulo 

Retorno:

__cProcModel - Modelo do documento.

 

 

Função: setProcQueue()

Função responsável por definir o Modelo do documento da requisição. 

O modelo do documento deverá ser definido na variável __cProcModel definida com escopo "static"   

Parâmetros:

__cProcModel - Modelo do documento.

Retorno:

Nulo

 

 

Função: putQueue()

Função responsável pela gravação da Tabela DLL0001 onde serão armazenadas as requisições que enviadas pelo JOB do TSS OFFLINE.

Parâmetros:

cIdEnt - Codigo da entidade.

cReqId - Hash da requisição.

cWSRequest - Mensagem JSon da requisição. 

cProc - Código do processo. 

cError - Mensagem de Erro. 

Retorno:  

lRet - Gravado com sucesso.

 

 

Função: grvCache()

Função responsável pela gravação do cache na Tabela DLL0002. Somente será armazenado requisições do tipo diferente de ‘1’. 

Parâmetros:

cTypeProc - Tipo de requisição. 

cIdEnt - Código da entidade. 

cMsgHash - Hash da requisição. 

cMsgJson - Mensagem JSon da requisição. 

cMsgJsonRet - Mensagem JSon do retorno do envio. 

cCodProc - Código do processo.  

Retorno:

lRet - Se foi gravado com sucesso.

Tabela:  DLL0001

Cadastro de requisições para envio ao TSS ONLINE.


 

Campo

Tipo

Tamanho

Descrição

Observação

ID_ENT

Caractere

040

Código da Entidade

Id da Entidade no TSS

REQ_ID

Caractere

003

Id da requisição

Id da Requisição

REQ_MSG

Binary

Indefinido

Mensagem da Requisição 

String Json com requisição para o TSS ONLINE

DOCUMENTO

Caractere

045

Tipo do Documento

Tipo do Documento : Ex:

Nfe, CTe

DATA_CONT

Date

008

Data do registro

Data da Inclusão do registro

HORA_CONT

Caractere

010

Hora do registro

Hora da Inclusão do registro

TICKET

Caractere

040

Ticket da Requisição

Ticket retornado pela Fila do TSS

TABELA

Caractere

040

Tabela do documento

 

PROCESSO

Caractere

004

Código do Processo

Código de acordo com a tabela TSS0006

HISTORICO

Caractere

250

Historico com os Tickets

String com tickets retornados pelo TSS delimitados por “,”

 

 
Tabela:  DLL0002

Tabela de cadastro de cache de requisições.

Campo

Tipo

Tamanho

Descrição

Observação

ID_ENT

Caractere

040

Código da Entidade

Id da Entidade no TSS

CODPROC

Caractere

004

Código do Processo

Código de acordo com a tabela TSS0006

MSG_JSON

Binary

Indefinido

Mensagem da Requisição 

String da Requisição

MSG-HASH

Binary

indefinido

String com Hash da Mensagem

Hash da requisição WS

RMSG_JSON

Binary

indefinido

String com resposta da requisição

Resposta da requisição WS

DATA_CACHE

Date

008

Data do registro

Data da Inclusão do registro

HORA_CACHE

Caractere

010

Hora do registro

Hora da Inclusão do registro

 

                                                  

Fluxo do processamento


 

 

 

 

 

 

 Este documento é material de especificação dos requisitos de inovação, trata-se de conteúdo extremamente técnico.