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. |
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.
Quando é necessário criar um novo leiaute no TSI, precisamos trabalhar em alguns pontos, são eles:
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:
Entender e elaborar a regra de extração.
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.
Aqui será construídas as APIS para substituir o layout TAF.
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=63014000
{ "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":"" } ] } ] } |
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.
Qtd Layout | Entidades | (C)ad. (M)ov. | JOB TSI? (S)im (N)ão | Tabelas ERP | Tabelas TAF | Layout TAF | Extração ERP | 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 | M | S | CDH | C2S\C2T | T020\T020AA\T020AG | TAFA584 | WSTAF039 | GIA |
13 | Apuração ICMS ST | M | S | CDH | C3J\C3K | T021\T021AA | TAFA586 | WSTAF040 | GIA |
14 | Cadastro de Obras | C | S | SON | T9C | T157 | TAFA596 | WSTAF042 | REINF |
15 | CPRB | M | S | CKX | C5M | T082 | TAFA566 | WSTAF043 | REINF |
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. |
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/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 |
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.
Os erros são aglutinados e gravados em uma única linha na V5R (por chave do cadastro), substituindo o erro anterior caso exista.
Incluir VLDDATA para tratamento nos mesmos moldes do que foi feito no cadastro de nota fiscal.
Filial sendo gravada no campo V5R_CODFIL e não na V5R_REGCHAVE.
Caso o ajuste seja realizado e chave do registro seja "comitado" no TAF, o log é apagado na sequência.
Caso o log gravado na V5R não possua algum campo de chave e depois o usuário corrigiu e refez a integração. |
As principais validações no TSI são por modelo do mvc (VldData) ou regras específicas: