Histórico da Página
...
Aviso |
---|
NUNCA PUBLIQUE ESTA PÁGINA. POR LIMITAÇÃO DA FERRAMENTA, NÃO PODEMOS MAIS CRIAR PÁGINAS RESTRITAS A CLIENTES. A ALTERNATIVA QUE ACHAMOS FOI CRIAR ESTA PÁGINA COMO RASCUNHO, ASSIM APENAS USUÁRIOS LOGADOS PODEM ACESSAR O CONTEÚDO. |
Projeto Interno
O objetivo deste guia é ajudar os membros da equipe a entender a composição do projeto e como nos organizamos para planejar, desenvolver, testar e documentar o TAF TSI.
A documentação oficial publicada para os clientes consta em TSI - TAF Service Integration.
O projeto consta no diretório: .../Master/Fontes/TAF/Integração/TSI, sendo composto por fontes na raiz (genéricos) , subpasta ERP (extração dos módulos do protheus) e subpasta TAF (APIS que fazem operações nas tabelas legados do TAF).
O controle com o nome dos fontes, descrição e analista que desenvolveram o TSI, fica disponível no google docs \Tabelas TAF.
Atualmente o pacote centralizador do TSI no AtuSx é o 009134 (release 33). Aqui tem a criação dos campos stamp nas tabelas do TAF e a criação da tabela de log V5R.
Pontos de melhorias, dúvidas ou discussões sobre a execução, podem ser colocados no dontpad do TSI, para posterior implementação, se necessário expor em review ou retrospectiva.
Divisão na execução
Quando é necessário criar um novo leiaute no TSI, precisamos trabalhar em alguns pontos, são eles:
Extração do ERP
Aqui é contemplado a regra de extração apenas do ERP Protheus, que em muito(s) casos a(s) regra(s) consta(m) nos extratores:
- extrator fiscal (...\Master\Fontes\Livros Fiscais\Extrator\ExtFisxTaf.prw),
- extrator financeiro(...\Master\Fontes\Adm\FINA989.prw) ou
- extrator contábil (...\Master\Fontes\Adm\ECD\CTBS001.prw e CTBS103.prw).
- Entender e elaborar a regra de extração.
- Nessa etapa são levantados todos os campos necessários na extração, a planilha interna com o layout consta em google drive em Layout TAF.xlsx
- Aqui também é necessário utilizar o pacote centralizador do TSI no atusx, para criar o campo STAMP na tabela legado do SIGATAF.
- Conforme DOD dessa tarefa, aqui também é esperado a geração do JSON com o conteúdo dos campos do layout nas tags pré definidas para integração.
- Controle do Stamp criado na Tabela do ERP e Mecanismo de validação do STAMP entre Protheus x TAF finalizado.
Lembrando que seguimos a regra que deve ser integrado registros onde o stamp do erp é superior ao do TAF ou se no erp é diferente de nulo e no taf está vazio.
Integração TAF (+ Hash )
Etapa onde o layout já está sendo extraído pelo TSI (geração do json mencionado na etapa 4 da extração do ERP) e agora será construído a integração das informações para o TAF.
- Construir Hash do JSON para o TAF (pai, filho e netos).
- Realizar o processo de gravação dos dados através de um mecanismo que irá receber o JSON e realizar a integração com o TAF.
- Colocar a rotina dentro do Schedule.
...
Open API
Fontes e Tabelas
...
SFT\SF3\SF1\
SD1\SF2\SD2
...
C20\C30\C35\
C39\C2F\C2D
...
Aviso |
---|
Para melhor desempenho no processamento dos participantes com as tabelas SA1, SA2 e C1H totalmente compartilhadas (CCC), o schedule não deverá estar configurado para processar as filiais paralelamente e sim no modo sequencial. |
O que é TSI?
- É o novo serviço de integração do SIGATAF com o ERP-Protheus.
- O TAF Service Integration ( TSI ) foi criado exclusivamente para clientes que usam o TAF como módulo do ERP-Protheus, ou seja, ambos no mesmo banco de dados.
Pré Requisitos
- 1. Requer um banco de dados homologado.
- 2. Requer um TOTVS Application Server build 7.00.170117A com geração superior a 23/09/2019.
- 3. Requer um TOTVS DbAccess igual ou superior a 19/11/2019
- 4. Executar o UpdDistr ( sdfbra.txt referente ao pacote acumulado do SIGATAF ).
- 5. Aplicar a patch com os fontes atualizados do acumulado ( .ptm da expedição contínua ).
Banco de Dados Homologados
- A integração com TSI depende do novo campo S_T_A_M_P_ e sua criação está disponível para os Banco de Dados MSSQL, ORACLE e POSTGRES.
O que é stamp?
- Um campo interno para tabelas do DBAccess, não visíveis na estrutura de acesso pelo AdvPL, que registra um datetime e/ou timestamp para cada registro inserido e/ou alterado na base de dados.
- O tipo do campo criado na tabela é DATETIME (para MSSQL) e TIMESTAMP (para Postgres e Oracle).
- Para recuperar o campo de controle S_T_A_M_P_ com a informação completa ( data e horário ), por exemplo no formato yyyy-mm-dd hh:MM:ss.mmm,
deve ser feito um CAST. Confira mais sobre stamp na documentação do DbAccess: Implementação - Campo de controle adicional no DBAccess - S_T_A_M_P_
Exemplo de STAMP em uma tabela no TAF:
Exemplo de STAMP em uma tabela do ERP:
Exemplo de query em MSSQL realizando o cast para converter o campo em string:
Select cast( to_char(SA1.S_T_A_M_P_,'DD.MM.YYYY HH24:MI:SS.FF') AS VARCHAR2(23) ) From SA1T10
Configuração
Dicionário
- Já foi incorporado no segregado e agora está disponível no portal através do pacote acumulado 21/01/2022.
- No dicionário constam os campos stamp nas tabelas do TAF, a criação da tabela de log V5R ( logs ) e V80 ( data e hora de corte ), conforme:
- Campos C/ STAMPS
X3_ARQUIVO | X3_CAMPO | X3_TIPO | X3_TAMANHO | X3_DECIMAL | X3_TITULO |
C0A - NCM | C0A_STAMP | C | 23 | 0 | Stamp |
C1G - Processos Referenciados | C1G_STAMP | C | 23 | 0 | Stamp |
C1H - Participantes | C1H_STAMP | C | 23 | 0 | Stamp |
C1J - Unidade de Medida | C1J_STAMP | C | 23 | 0 | Stamp |
C1L - Item da NF | C1L_STAMP | C | 23 | 0 | Stamp |
C1N - Natureza de Operação | C1N_STAMP | C | 23 | 0 | Stamp |
C1O - Plano de Contas | C1O_STAMP | C | 23 | 0 | Stamp |
C20 - Nota Fiscal | C20_STAMP | C | 23 | 0 | Stamp |
C2S - Apuração de ICMS | C2S_STAMP | C | 23 | 0 | Stamp |
C3J - Apuração de ICMS ST | C3J_STAMP | C | 23 | 0 | Stamp |
C3Q - Informações Complementares | C3Q_STAMP | C | 23 | 0 | Stamp |
C5M - CPRB | C5M_STAMP | C | 23 | 0 | Stamp |
LEM - Faturas/Recibo | LEM_STAMP | C | 23 | 0 | Stamp |
T9C - Cadastro de Obras | T9C_STAMP | C | 23 | 0 | Stamp |
- V80
X2_CHAVE | X2_NOME | X2_MODO | X2_MODOUN | X2_MODOEMP | X2_UNICO |
V80 | Data de corte TSI | E | E | E | V80_FILIAL+V80_ALIAS |
X3_ARQUIVO | X3_ORDEM | X3_CAMPO | X3_TIPO | X3_TAMANHO | X3_DECIMAL | X3_TITULO | X3_DESCRIC | X3_PICTURE | X3_BROWSE | X3_VISUAL | X3_CONTEXT |
V80 | 1 | V80_FILIAL | C | 8 | 0 | Filial | Filial | S | A | R | |
V80 | 2 | V80_ALIAS | C | 3 | 0 | Alias | Alias | @! | S | A | R |
V80 | 3 | V80_STAMP | C | 23 | 0 | Stamp | Stamp | @! | S | A | R |
INDICE | ORDEM | CHAVE |
V80 | 1 | V80_FILIAL+V80_ALIAS |
- V5R
X2_CHAVE | X2_NOME | X2_MODO | X2_MODOUN | X2_MODOEMP | X2_UNICO |
V5R | Log TSI | C | C | C | V5R_FILIAL+V5R_CODFIL+V5R_ALIAS+V5R_REGKEY |
X3_ARQUIVO | X3_ORDEM | X3_CAMPO | X3_TIPO | X3_TAMANHO | X3_DECIMAL | X3_TITULO | X3_DESCRIC | X3_PICTURE | X3_BROWSE | X3_VISUAL | X3_CONTEXT |
V5R | 1 | V5R_FILIAL | C | 8 | 0 | Filial | Filial | S | A | R | |
V5R | 2 | V5R_CODFIL | C | 8 | 0 | Filial | Filial | @! | S | V | R |
V5R | 3 | V5R_ALIAS | C | 3 | 0 | Alias Tabela | Alias da tabela | @! | S | A | R |
V5R | 4 | V5R_REGKEY | C | 228 | 0 | Chave Reg. | Chave do registro | @! | S | A | R |
V5R | 5 | V5R_MSGERR | M | 999 | 0 | Msg. Erro | Mensagem de erro | @! | S | A | R |
V5R | 6 | V5R_DATA | D | 8 | 0 | Data | Data do erro | S | A | R | |
V5R | 7 | V5R_HORA | C | 8 | 0 | Hora | Hora do erro. | @! | S | A | R |
V5R | 8 | V5R_STAMP | C | 23 | 0 | Stamp | Stamp | @! | N | V | R |
V5R | 9 | V5R_ERPKEY | C | 228 | 0 | Chav Reg ERP | Chave do Registro no ERP | @! | S | A | R |
INDICE | ORDEM | CHAVE | DESCRICAO |
V5R | 1 | V5R_FILIAL+V5R_CODFIL+V5R_ALIAS+V5R_REGKEY | Filial + Alias Tabela + Chave Reg. |
V5R | 2 | V5R_FILIAL+V5R_CODFIL+DTOS(V5R_DATA)+V5R_HORA+V5R_ALIAS | Filial + Data + Hora + Alias Tabela |
Wizard Configuração TAF
- Para que a opção do "TSI - TAF SERVICE INTEGRATION" seja exibida no Wizard do TAF, é necessário ter executado os pré-requisitos e que exista ao menos uma nota escriturada no fiscal ( SF3/SFT ).
- A wizard de configuração do TAF ganhou uma nova opção para criação dos campos S_T_A_M_P_, basta executar marcando a nova opção, [X] TSI - TAF Integration Service
Execute a wizard, resultando em sucesso, será apresentada a tela com a mensagem conforme abaixo.
Tabelas Afetadas ( Criação STAMP )
- As tabelas do Protheus que sofrerão a criação do campo S_T_A_M_P_ são:
SB1, SFT, SF4, SB5, SA1, SA2, SA4, SAH, CT1, F2Q, CDN, SE1, SE2, CCF, SF1, SF2, SF3, CCE, SYD, CDH, SON e CKX.
Obs: Em breve a CDT e CDG serão disponibilizadas com S_T_A_M_P_.
Qtd | tablename | columnname |
01 | CCE | S_T_A_M_P_ |
02 | CCF | S_T_A_M_P_ |
03 | CDH | S_T_A_M_P_ |
04 | CDN | S_T_A_M_P_ |
05 | CKX | S_T_A_M_P_ |
06 | CT1 | S_T_A_M_P_ |
07 | F2Q | S_T_A_M_P_ |
08 | SA1 | S_T_A_M_P_ |
09 | SA2 | S_T_A_M_P_ |
10 | SA4 | S_T_A_M_P_ |
11 | SAH | S_T_A_M_P_ |
12 | SB1 | S_T_A_M_P_ |
13 | SB5 | S_T_A_M_P_ |
14 | SE1 | S_T_A_M_P_ |
15 | SE2 | S_T_A_M_P_ |
16 | SF1 | S_T_A_M_P_ |
17 | SF2 | S_T_A_M_P_ |
18 | SF3 | S_T_A_M_P_ |
19 | SF4 | S_T_A_M_P_ |
20 | SFT | S_T_A_M_P_ |
21 | SON | S_T_A_M_P_ |
22 | SYD | S_T_A_M_P_ |
Schedule Configurador
- O TSI deverá ser incluído no agendamento ( schedule do SIGACFG ) como um serviço ( job ) sempre ativo.
Desta maneira, ao incluir ou alterar um novo cadastro ou movimento no ERP, o JOB se encarregará de executar a integração automaticamente de forma transparente ao usuário.
O controle é feito através da comparação dos campos do ERP-Protheus S_T_A_M_P_ Vs XXX_STAMP do TAF.
Exemplo de configuração:
Usabilidade ( menus )
Menu Log de Integração
- Através desta rotina é possível visualizar o detalhamento das mensagens de integração que apontaram falhas no processamento ( tabela V5R ) e não foram integradas ao TAF.
Módulo | Nome do Menu | Submenu | Nome da Rotina | Programa |
---|---|---|---|---|
Totvs Automação Fiscal | Miscelânea | Integração | Log de Processamentos TSI | TAFA564 |
Browse com Log
Detalhamento dos Erros
Menu Filtro Data de Corte
- Através desta rotina é possível visualizar o último processamento por layout, a tabela V80 foi criada para melhorar o desempenho do filtro, referente ao registros que ainda não foram processados.
Módulo | Nome do Menu | Submenu | Nome da Rotina | Programa |
---|---|---|---|---|
Totvs Automação Fiscal | Miscelânea | Integração | Data de Processamento TSI | TAFA599 |
Browse com Log
Como identificar erros
Quando acionar o TAFCONOUT para verificar possíveis falhas
- Caso não ocorra integração ou deseje acompanhar em que passo está a integração é possível ligar o log de mensagem do TSI, para isso basta atualizar o appserver.ini:
[GENERAL]
TAFCONOUT=1
Onde avaliar os erros de integração
- Consultar o console para verificar se o serviço está em execução ou se ocorreu alguma falha.
- Pode ser verificado na tabela V5R, através da chave do registro ( TAFA564 - Cadastro de Log de integração ).
- Consulte a aba "Erros de Integração" na documentação TSI - TAF Service Integration, para maiores informações sobre as mensagens de erros e suas possíveis soluções
- Consulte a aba "Análise Técnica" na documentação TSI - TAF Service Integration, para maiores informações sobre as mensagens de erros.
Estrutura de Log na V5R
- Os erros são aglutinados e gravados em uma única linha na V5R (por chave do cadastro) por registro, substituindo o erro anterior caso exista.
- A filial é gravada no campo V5R_CODFIL e não na V5R_REGCHAVE.
- Caso seja realizado o ajuste no registro e o mesmo seja integrado no TAF, o log é apagado na sequência.
Aviso |
---|
Caso o log gravado na V5R não possua algum campo de chave e depois o usuário corrigiu e refez a integração, esse registro não será removido da V5R de forma automática, pois a chave composta mudou. |
As principais validações no TSI são por modelo do mvc (VldData) ou regras específicas:
- Por tipo de dados, ex: data, numérico, lógico ou caractere (FWNOSTRUCT);
- Obrigatório (OBRIGAT);
- Se código existe na consulta padrão F3 (NOTFOUND);
- Se o tamanho é excedido (FWNOWIDTH);
- Se o conteúdo consta no combox (FWNOLIST);
- Se o registro existe na origem (NOTEXIST);
- Se o conteúdo pode ser editado (FWWHEN);
- Regra de modelo específico, exemplo: Se a nota necessita de item (TAFHLPNF017);
- Se o commit do modelo é válido e não estoura o uniqline (UNIQUELINE);
- Se o formato de data é válido (DATE);
- Se é válido apagar uma chave estrangeira (FWFORMCANCEL);
- Se houve falha na atribuição de conteúdo (LOADVALUE)
Quais tabelas são utilizadas
Entidades | Tabelas ERP | Tabelas TAF |
Participante e dependentes | SA1\SA2\DHT | C1H\V3R |
Unidade Medida | SAH | C1J |
Item (Produto) | SB1\SB5\F2Q\CDN | C1L |
Natureza de Operação \ TES | SF4 | C1N |
Centro de Custo | CTT | C1P |
Conta Contábil | CT1 | C1O |
Inscrição do estabelecimento substituto (Inscrições Estaduais) | MV_SUBTRIB | C1F |
Processos referenciados e suspensões | CCF | C1G\T5L |
Informações Complementares | CCE | C3Q |
NCM | SYD | C0A |
Nota Fiscal | SFT\SF3\SF1\ | C20\C2F\ C30\C35\ C2D\ Transporte C39 Info Compl. C21 Compl. Processo T9Q |
Apuração ICMS | CDH | C2S\C2T |
Apuração ICMS ST | CDH | C3J\C3K |
Cadastro de Obras | SON | T9C |
CPRB | CKX\F2S\F3Z | C5M\T9T\V48 |
Índice do Banco de Dados Sugeridos ( Performance )
Aviso |
---|
Referente a performance possuímos a sugestão de criação do índice no banco de dados. Se atentar ao grupo de empresa que pode mudar no nome da tabela e a ordem do índice, ex: TABELA + GRUPO + DESCRIÇÃO SFTT10ESP, SF3T10ESP e SFT010STP |
CREATE NONCLUSTERED INDEX SFTT10ESP ON SFTT10(FT_FILIAL, [FT_NFISCAL] ,[FT_SERIE], [FT_CLIEFOR], [FT_LOJA],[FT_IDENTF3], [FT_ENTRADA],[FT_ESPECIE],[FT_PRODUTO], R_E_C_N_O_, D_E_L_E_T_)
CREATE NONCLUSTERED INDEX SF3T10ESP ON SF3T10(F3_FILIAL, [F3_NFISCAL] ,[F3_SERIE], [F3_CLIEFOR], [F3_LOJA],[F3_IDENTFT], [F3_ENTRADA],[F3_ESPECIE], R_E_C_N_O_, D_E_L_E_T_)
CREATE NONCLUSTERED INDEX SFT010STP ON SFT010(FT_FILIAL, S_T_A_M_P_, R_E_C_N_O_, D_E_L_E_T_)
Onde encontrar as documentações
Documentação Oficial SIGATAF TSI para Clientes
Implementação - Campo de controle adicional no DBAccess - S_T_A_M_P_
Fontes Envolvidos
Qtd Layout | Entidades | (C)ad. (M)ov. (A)pur. | JOB TSI? (S)im (N)ão | Tabelas ERP | Tabelas TAF | Layout TAF | Extração ( ERP ) | Gravação ( API TAF ) | Obrigações |
01 | Participante | C | S | SA1\SA2 | C1H | T003 | TAFA556 | WSTAF027 | GIA\REINF |
02 | Unidade Medida *predecessor produto | C | S | SAH | C1J | T005 | TAFA557 | WSTAF030 | - |
03 | Item (Produto) | C | S | SB1\SB5\F2Q\CDN | C1L | T007 | TAFA559 | WSTAF026 | GIA\REINF |
04 | Natureza de Operação \ TES | C | S | SF4 | C1N | T009 | TAFA560 | WSTAF025 | GIA |
05 | Centro de Custo | C | N | CTT | C1P | T011 | TAFA562 | WSTAF029 | - |
06 | Conta Contábil | C | N | CT1 | C1O | T010 | TAFA563 | Sem Construção | - |
07 | Inscrição do estabelecimento substituto (Inscrições Estaduais) | C | N | MV_SUBTRIB | C1F | T001AA | TAFA569 | WSTAF031 | GIA |
08 | Processos referenciados e suspensões. | C | S | CCF | C1G\T5L | T001AB\T001AO | TAFA572 | WSTAF032 | REINF |
09 | Informações Complementares | C | S | CCE | C3Q | T001AK | TAFA575 | WSTAF035 | GIA |
10 | NCM *predecessor produto | C | S | SYD | C0A | (auto contida) | TAFA561 | WSTAF036 | - |
11 | Nota Fiscal | M | S | SFT\SF3\SF1\ SD1\SF2\SD2 | C20\C2F\ | T013\T013AP\ | TAFA574 | WSTAF034 | GIA\REINF |
12 | Apuração ICMS | A | S | CDH | C2S\C2T | T020\T020AA\T020AG | TAFA584 | WSTAF039 | GIA |
13 | Apuração ICMS ST | A | S | CDH | C3J\C3K | T021\T021AA | TAFA586 | WSTAF040 | GIA |
14 | Cadastro de Obras | C | S | SON | T9C | T157 | TAFA596 | WSTAF042 | REINF |
15 | CPRB | A | S | CKX/F2S/F3Z | C5M/T9T/V48 | T082/T082AC/T082AD | TAFA566 | WSTAF043 | REINF |
Rotinas Envolvidas
Fonte | Processo | Detalhamento da rotinas |
ERP/ TAFA558 | Alteração Fake | Alteração fake nos cadastros predecessores com base nas movimentações, |
TSI/ | Schedule TSI | Mecanismo responsável por executar o JOB do TSI na seguinte ordem: |
TAF/ TAFA564 | Log | Cadastro de Log de integração (MVC tabela V5R). |
TAF/ TAFA565 | Motor para os Cadastros | Método responsável por persistir os dados enviados via JSON e gravar o MVC de cadastro básico (apenas uma tabela). |
TAF/ TAFA585 | Motor Pai, Filho, Neto | Função que efetua inclusão e alteração do cadastro no MVC e seu respectivo filhos/netos ( com mais de uma tabela). Colocar na função do hash pai as inforções de s_u_b_m_o_d_e_l_ ( filhos ) e s_u_b_m_o_d_e_l_2 ( netos ), conforme abaixo: |
TSI/ TSIXFUN | Funções genéricas TSI | GetTafId Rertorna o _ID de cada consulta F3 |
TAF/ TAFA599 | Data de Corte | Filtro para extrair e processar mais rápido tabela V80. |
ERP/ TAFA600 | Alteração Fake SFT | Com base no ERPKEY da V5R para o alias C20 é realizado a alteração fake nas notas que constam no log. |
Projeto Interno ( DEVS )
O objetivo deste guia é ajudar os membros da equipe a entender a composição do projeto e como nos organizamos para planejar, desenvolver, testar e documentar o TAF TSI.
A documentação oficial publicada para os clientes consta em TSI - TAF Service Integration.
O projeto consta no diretório: .../Master/Fontes/TAF/Integração/TSI, sendo composto por fontes na raiz (genéricos) , subpasta ERP (extração dos módulos do protheus) e subpasta TAF (APIS que fazem operações nas tabelas legados do TAF).
O controle com o nome dos fontes, descrição e analista que desenvolveram o TSI, fica disponível no google docs \Tabelas TAF.
Divisão na execução do Desenvolvimento
Quando é necessário criar um novo leiaute no TSI, precisamos trabalhar em alguns pontos, são eles:
Extração do ERP
Aviso |
---|
A regra deve considerar registros onde o stamp do ERP é superior ao do TAF, ou se no ERP tem conteúdo e no TAF está nulo, em algumas situações também é verificado se o STAMP do ERP é superior ao do log gravado na tabela V5R, |
Aqui é contemplado a regra de extração apenas do ERP Protheus, que em muito(s) casos a(s) regra(s) consta(m) nos extratores:
- extrator fiscal (...\Master\Fontes\Livros Fiscais\Extrator\ExtFisxTaf.prw),
- extrator financeiro(...\Master\Fontes\Adm\FINA989.prw) ou
- extrator contábil (...\Master\Fontes\Adm\ECD\CTBS001.prw e CTBS103.prw).
Entender e elaborar a regra de extração.
- Nessa etapa são levantados todos os campos necessários na extração, a planilha interna com o layout consta em google drive em Layout TAF.xlsx
- Aqui também é necessário utilizar o pacote centralizador do TSI no atusx, para criar o campo STAMP na tabela legado do SIGATAF.
- Conforme DOD dessa tarefa, aqui também é esperado a geração do JSON com o conteúdo dos campos do layout nas tags pré definidas para integração.
- Controle do Stamp criado na Tabela do ERP e Mecanismo de validação do STAMP entre Protheus x TAF finalizado.
Integração ERP e TAF ( Json x Hash )
Etapa onde o layout já está sendo extraído pelo TSI (geração do json mencionado na etapa 4 da extração do ERP) e agora será construído a integração das informações para o TAF.
- Construir Hash do JSON para o TAF pai, filho e netos (se houver), o modelo dos fontes com hash consta em TAF\Integração\TSI\TAF\WSTAFXXX.prw.
- Realizar o processo de gravação das tabelas do TAF, através de um mecanismo que irá receber os dados do JSON (utilizar o motor de cadastro básico TAFA565 ou motor pai, filho e netos TAFA585).
Integração do JSON com o TAF finalizado para o evento, iremos instanciar o modelo do respectivo cadastro que será integrado e alimentá-lo com as informações extraídas do Protheus. - Validar se o Commit foi possível (Tabelas do TAF gravadas com os dados do JSON), se sim grava o campo TAFSTAMP com o mesmo valor do STAMP trazido do Protheus para o respectivo evento
(Controle do STAMP nas tabelas do TAF implementado), precisa ser a última instrução da função.
Ponto de atenção: não é necessário instanciar o modelo a cada novo registro de integração, todo o processo acima precisa estar dentro de controle de transação, ou seja, se cair a conexão durante o processo
o campo TAFSTAMP não será preenchido e o registro será reintegrado no novo processamento do TSI. - Gravação da tabela V5R para os erros de integração, caso não seja possível a integração gravar a tabela de "Erros de Integração TSI" (Tabela V5R), veja os principais itens a serem validados em estrutura de log.
- Para auxiliar a equipe de suporte, ou na análise de um possível problema, devemos avaliar pontos onde é válido adicionar conouts (TAFCONOUT), ver em documentação oficial TAF Service Integration \ Análise Técnica \ Lista de Erros.
- Colocar a rotina dentro do Schedule ( TAFA573 ).
Construção APIS
Aqui será construídas as APIS para substituir o layout TAF.
- Construir API que recebe mensagem JSON e grava no cadastro MVC do TAF o respectivo leiaute.
Construir as APIs com os seguintes tipos de requisição:
PUT ( pode receber um código ou uma lista para atualizar )
http://localhost:8099/REST/api/tsi/v1/tsiCommonExternalTariff/63013000/?sourceBranch=T1D MG 01
http://localhost:8080/rest/api/tsi/v1/tsiinvoice/?sourceBranch=T1D MG 01 (+Body)
DELETE ( pode receber parâmetros ou uma lista para apagar )
http://localhost:8080/rest/api/tsi/v1/tsiinvoice?sourceBranch=T1D MG 01&operationType=1&modelIdentificationCode=55&taxDocumentSeries=1&taxDocumentNumber=000000002 &fiscalDocumentDate=20201015&participatingCode=CSP000101
http://localhost:8099/REST/api/tsi/v1/tsiCommonExternalTariff/?sourceBranch=T1D MG 01 (+Body)
POST ( pode receber uma lista para inserir )
http://localhost:8080/rest/api/tsi/v1/tsiinvoice/?sourceBranch=T1D MG 01 (+Body)
http://localhost:8099/REST/api/tsi/v1/tsiCommonExternalTariff/?sourceBranch=T1D MG 01 (+Body)
GETID ( pode retornar um único código )
http://localhost:8099/REST/api/tsi/v1/tsiCommonExternalTariff/63013000/?sourceBranch=T1D MG 01
http://localhost:8080/rest/api/tsi/v1/tsiinvoice/idTsiinvoice/?sourceBranch=T1D MG 01&taxDocumentNumber=NTSAIDA
GETLIST ( pode retornar uma lista com paginação, tratar os parâmetros: HasNext, Page, PageSize, Do Código, Até Código, ordenação, etc... )
http://localhost:8080/rest/api/tsi/v1/tsiinvoice/?sourceBranch=T1M SP 03&Page=1&PageSize=50&invoiceOf= &invoiceUp=ZZZZ
http://localhost:8099/REST/api/tsi/v1/tsiCommonExternalTariff/?sourceBranch=T1D MG 01&commonExternalTariffOf=63013000&commonExternalTariffUp=63014000Bloco de código language java title ex: json no body collapse true { "invoice": [ { "stamp": "2020-11-19 13:44:42.480", "finalDocumentNumber": "0000000003", "AIDFNumber": "", "electronicKeyDocument": "", "identificationSituation": "00", "federativeUnitOrigin": "SP", "shippingIndicator": "1", "valueOfGoods": 9000, "valueOfServices": 0, "documentType": "00", "fiscalDocumentDate": "15/10/20", "insuranceAmount": 0, "documentValue": 9000, "placeOfDelivery": "", "freight": 0, "untaxedAllowanceAmount": 0, "taxDocumentIssuer": "0", "taxDocumentSeries": "1", "valueReducedISSMaterials": 0, "modelIdentificationCode": "55", "participatingCode": "CSP000101", "taxDocumentNumber": "00000000", "typeOfPayment": "1", "amountOfAccessoryExpenses": 0, "discountAmount": 0, "operationType": "1", "taxDocumentEntryAndExitDate": "15/10/20", "otherExpenses": 0, "fiscalDocumentItems": [ { "itemNumber": "0001", "cfopIndicator": "5933", "itemAdditions": 0, "originIdentCode": "1", "operationNature": "503", "accountingValue": 6000, "socialSecurityExemption": "2", "itemAmount": 1, "itemValue": 6000, "discountValue": 0, "physicalMovement": "", "itemTotalValue": 6000, "acessoryExpense": 0, "unitOfMeasurement": "UN", "itemCode": "ISS", "serviceCode": "", "cityServiceCode": "", "serviceType": "", "dipamCode":"" } ] } ] }
- Definimos que a tabela de log de erros será gravada nas integrações via REST para todas as validações necessárias, as mensagens precisam ser criadas a nível de usuário, sem nenhum detalhe técnico com relação ao erro encontrado.
- Criar o mecanismo de integração via REST para as linhas e via função para o Protheus (item deve ser alinhado com a etapa de integração do ERP Protheus).
- Layout Integrado na tabela específica do TAF.
OPEN API
Aqui serão catalogadas e disponibilizadas as APIS construídas para os nossos clientes.
Implementar a estrutura para a documentação do API.TOTVS.COM.BR. Utilizar o cost center como exemplo.
*Ainda não publicar mas ao final da entrega iremos sim publicar a API para uso dos clientes;
Poderá ser feito com o openAPI Preview in Browse ou com o swagger.
- Baixar o TTalk
https://github.com/totvs/ttalk-standard-message
cd C:\api
git clone https://github.com/totvs/ttalk-standard-message.git
- TTALK STANDARD MESSAGE
renomear para standard-message (constará uma pasta 1xAPI 1xSchemma) - instalar (no terminal --> npm install )
- Baixar tafintegrationservices_1-000j.json e TafIntegrationService_v1_000.json (estão anexos a issue de cada leiaute).
Importante renomear com "_1"
→ tafintegrationservices_1-000j.json em schemas → C:\api\standard-message\jsonschema\schemas
→ TafIntegrationService_v1_000.json em apis → C:\api\standard-message\jsonschema\apis
- baixar plugin x vs ( openapi-designer )
- Mudar referencia por causa do preview, alterar no v1
de ./jsonschema/schemas
para ../schemas
Salvar - ctrl + shift + P ( openApi Preview In Browse )
- Posicionar no V1
Voltar o v1 para ./jsonschema/schemas
de ../schemas
para ./jsonschema/schemas
Salvar - executar npm run test
de 32655 passing (2m)
para 32656 passing - Verificar se existe branch e subir, exemplo: oficial (master), homologação em definição*.
Dependência de Fontes
Aviso |
---|
Para gerar pacote no Jira por dependência automática é necessário fazer pelo menos 2 check-ins, |
TSI | ||
1 | TAF/Integração/TSI/TAFA573.PRW (13. dep. aut. extração ) | Schedule TSI |
2 | TAF/Integração/TSI/TSIXFUN.PRW (14. dep. aut. extração ) | Funções genéricas TSI |
TSI TAF ( api ) | ||
3 | TAF/Integração/TSI/TAF/TAFA564.PRW (15. dep. aut. extração ) | Log ( V5R ) |
4 | TAF/Integração/TSI/TAF/TAFA565.PRW (12. dep. aut. integração ) | Motor para os Cadastros |
5 | TAF/Integração/TSI/TAF/TAFA585.prw (13. dep. aut. integração ) | Motor Pai, Filho, Neto |
6 | TAF/Integração/TSI/ERP/TAFA599.PRW | Data Corte ( V80 ) |
7 | TAF/Integração/TSI/TAF/WSTAF025.prw | Natureza de Operação / TES |
8 | TAF/Integração/TSI/TAF/WSTAF026.prw (03. dep. aut. integração ) | Produto |
9 | TAF/Integração/TSI/TAF/WSTAF027.prw | Participante |
10 | TAF/Integração/TSI/TAF/WSTAF029.prw | Centro de Custo |
11 | TAF/Integração/TSI/TAF/WSTAF030.prw (02. dep. aut. integração ) | Unidade de Medida |
12 | TAF/Integração/TSI/TAF/WSTAF031.prw (05. dep. aut. integração ) | Inscrição do estabelecimento substituto (Inscrições Estaduais) |
13 | TAF/Integração/TSI/TAF/WSTAF032.prw (11. dep. aut. integração ) | Processos referenciados e suspensões. |
14 | TAF/Integração/TSI/TAF/WSTAF034.prw (08. dep. aut. integração ) | Nota Fiscal |
15 | TAF/Integração/TSI/TAF/WSTAF035.prw (06. dep. aut. integração ) | Informações Complementares |
16 | TAF/Integração/TSI/TAF/WSTAF036.prw | NCM |
17 | TAF/Integração/TSI/TAF/WSTAF039.prw (09. dep. aut. integração ) | Apuração ICMS |
18 | TAF/Integração/TSI/TAF/WSTAF040.prw (10. dep. aut. integração ) | Apuração ICMS ST |
19 | TAF/Integração/TSI/TAF/WSTAF042.prw | Cadastro de Obras |
20 | TAF/Integração/TSI/TAF/WSTAF043.PRW | CPRB |
TSI ERP ( extração ) | ||
21 | TAF/Integração/TSI/ERP/TAFA556.prw ( 01. dep. aut. extração ) | Participante |
22 | TAF/Integração/TSI/ERP/TAFA557.prw ( 02.dep. aut. extração ) | Unidade Medida |
23 | TAF/Integração/TSI/ERP/TAFA558.PRW ( 12. dep. aut. extração ) | Alteração Fake Cadastros |
24 | TAF/Integração/TSI/ERP/TAFA559.prw ( 03. dep. aut. extração ) | Item (Produto) |
25 | TAF/Integração/TSI/ERP/TAFA560.PRW ( 04. dep. aut. extração ) | Natureza de Operação \ TES |
26 | TAF/Integração/TSI/ERP/TAFA561.PRW ( 07 dep. aut. extração ) | NCM |
27 | TAF/Integração/TSI/ERP/TAFA562.PRW | Centro de Custo |
28 | TAF/Integração/TSI/ERP/TAFA563.PRW | Conta Contábil |
29 | TAF/Integração/TSI/ERP/TAFA566.PRW | CPRB |
30 | TAF/Integração/TSI/ERP/TAFA569.PRW ( 05. dep. aut. extração ) | Inscrição do estabelecimento substituto (Inscrições Estaduais) |
31 | TAF/Integração/TSI/ERP/TAFA572.PRW ( 11. dep. aut. extração ) | Processos referenciados e suspensões. |
32 | TAF/Integração/TSI/ERP/TAFA574.prw ( 08 dep. aut. extração ) | Nota Fiscal |
33 | TAF/Integração/TSI/ERP/TAFA575.prw ( 06. dep. aut. extração ) | Informações Complementares |
34 | TAF/Integração/TSI/ERP/TAFA584.prw ( 09 dep. aut. extração ) | Apuração ICMS |
35 | TAF/Integração/TSI/ERP/TAFA586.prw ( 10 dep. aut. extração ) | Apuração ICMS ST |
36 | TAF/Integração/TSI/ERP/TAFA596.PRW | Cadastro de Obras |
37 | TAF/Integração/TSI/ERP/TAFA600.PRW (15. dep. aut. integração ) | Alteração Fake SFT |
Auto Contidas | ||
38 | TAF/Tabelas Dinâmicas/TAFA010A.PRW | |
39 | TAF/Tabelas Dinâmicas/TAFA010.PRW | |
TAF PROCESSAMENTOS | ||
40 | TAF/Processamentos/TAFACONT.PRW | |
UPDATE | ||
41 | TAF/Update/RUPTAF.PRW | |
42 | TAF/Update/UPDTAF.PRW | |
GENÉRICOS | ||
43 | TAF/Genéricos/Bibliotecas/TAFXFUN.PRW | |
44 | TAF/Genéricos/Configuração/TAFINIT.PRW | |
45 | TAF/Genéricos/Configuração/TafLoad.PRW | |
EXTRATOR | ||
46 | Livros Fiscais/Extrator/ExtT013.PRW | |
47 | Livros Fiscais/Extrator/FisaExtWiz_Class.prw | |
48 | Livros Fiscais/Extrator/ExtT013XX.prw | |
49 | Livros Fiscais/Extrator/ExtT015.PRW | |
TAF CADASTROS FISCAIS | ||
50 | TAF/Cadastros Fiscais/TAFA062.PRW |
Lista dos fontes que não estão pasta $/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Integração/TSI do TFS mas foram alterados para o TSI.
Outros Fontes |
---|
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Genéricos/Configuração/TAFINIT.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/Livros Fiscais/Extrator/ExtT013.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/Livros Fiscais/Extrator/FisaExtWiz_Class.prw |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/Livros Fiscais/Extrator/ExtT013XX.prw |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/Livros Fiscais/Extrator/ExtT015.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Update/RUPTAF.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Update/UPDTAF.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Genéricos/Bibliotecas/TAFXFUN.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Cadastros Fiscais/TAFA062.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Tabelas Dinâmicas/TAFA010.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Tabelas Dinâmicas/TAFA010A.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Processamentos/TAFACONT.PRW |
$/Protheus_Padrao/Fontes_Doc/Master/Fontes/TAF/Genéricos/Configuração/TAFLOAD.PRW |
Processos
Fonte | Processo | Detalhamento da rotinas: | TAFA558 | Alteração FakeAlteração fake nos cadastros predecessores com base nas movimentações, |
TAFA573 | Schedule TSI | Mecanismo responsável por executar o JOB do TSI na seguinte ordem: | ||
TAFA564 | Log | Cadastro de Log de integração (MVC tabela V5R). | ||
TAFA565 | Motor para os Cadastros | Método responsável por persistir os dados enviados via JSON e gravar o MVC de cadastro básico (apenas uma tabela). | ||
TAFA585 | Motor Pai, Filho, Neto | TSIXFUN | Funções genéricas TSI | GetTafId Rertorna o _ID de cada consulta F3
Estrutura HashMap
O hash é montado nos fontes que constam na pasta TAF\Integração\TSI\TAF (API TSI).
Para cada pai, possuímos o hash com informações genéricas para auxiliar na gravação do modelo.
Para cada tabela possuímos um hash com o "de/para" ( Tag x Campo).
Todos os hashs são estáticos, ou seja a estrutura é montada apenas no início do chamado do programa.
- Exemplo de Informações Genéricas
HMSet( oHash, 'm_o_d_e_l_' , 'TAFA062' )
HMSet( oHash, 'm_o_d_e_l_C_2_0_', 'MODEL_C20' )
HMSet( oHash, 's_o_u_r_c_e_' , 'TAFA062' )
HMSet( oHash, 'a_r_e_a_' , 'C20' )
HMSet( oHash, 'o_r_d_e_r_' , 1 )
HMSet( oHash, 'k_e_y_' , cKey )
HMSet( oHash, 's_e_e_k_' , cSeek )
HMSet( oHash, 't_a_g_i_d_' , 'invoiceId' )
Para cadastros ou movimentos, na estrutura pai, filho e neto, existem as tags de o model, submodel e submodel2, exemplo na utilização da apuração de ICMS:
HMSet(oHash, 'm_o_d_e_l_' , 'MODEL_C2S')
HMSet(oHash, 's_u_b_m_o_d_e_l_' , {{'MODEL_C2T'/*model filho*/,'adjustmentApuration' /* tag filho*/, 'HashC2T()' /* hash filho*/ }} )
HMSet(oHash, 's_u_b_m_o_d_e_l_2' , {{'adjustmentApuration'/* tag filho*/,'MODEL_T02'/*model neto*/,'accumulatedAdjust'/*tag neto*/, 'HashT02()' /*hash neto*/}} ) - Exemplo com "de/para"
Apenas o campo: SetHashKey(oHashC20, "taxDocumentNumber" ,"C20_NUMDOC" )
Com consulta padrão: SetHashKey(oHashC20, "participatingCode" ,"C20_CODPAR#F3##F3#")
Tipo data: SetHashKey(oHashC20, "fiscalDocumentDate" ,"C20_DTDOC#DT##DT#" )