Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

01. Visão Geral

O simulador de cálculo de tributos oferece diversas possibilidades de simulações para operações de entrada e saída. Ele permite estimar os tributos envolvidos em compras e vendas, seguindo as regras fiscais previamente configuradas. Com essa ferramenta, é possível prever o impacto dos impostos sobre cada operação, identificar possíveis inconsistências tributárias e ajustar cenários fiscais para maior conformidade. Além disso, o simulador possibilita testar diferentes situações, como variações de alíquotas e regimes tributários, garantindo uma análise precisa e confiável dos tributos aplicáveis a cada transação.

Este projeto foi desenvolvido em POUI no front-end e utilizando api's para comunicação com os dados no backend. 

Foram utilizada as melhores práticas para o andamento do projetoA classe métodos.

02. Artefatos

BACKOFFICE.FISCAL.API.BRANCHES.TLPP 

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta de filiais do sistema de acordo com as permissões do usúario e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API..TLPP  

BACKOFFICE.FISCAL.API.CFGRULES.TLPP 

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta das Regras de Cálculo do configurador de tributos de acordo com a filial selecionada no front-end e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API. TLPP  

BACKOFFICE.FISCAL.API.CFOP.TLPP  

Objetivo e escopo:  Objetivo desta rotina é de realizar a consulta de todas as CFOP's e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API.

BACKOFFICE.FISCAL.API.CUSTOMER.TLPP 

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta da base de clientes de acordo com a filial selecionada no front-end e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API. 

BACKOFFICE.FISCAL.API.ORIGE.TLPP  

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta de todas as Origens de produto e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API.

BACKOFFICE.FISCAL.API.PRODUCTS.TLPP 

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta da base de Produtos de acordo com a filial selecionada no front-end e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API. 

BACKOFFICE.FISCAL.API.VENDOR.TLPP  

Objetivo e escopo: Objetivo desta rotina é de realizar a consulta da base de fornecedores de acordo com a filial selecionada no front-end e utiliza a arquitetura REST para trasmissão de informação entre o Front-end e back-end. Maiores informações estão na sessão API's com todos os detalhes acerca do contrato dessa API. 

BACKOFFICE.FISCAL.CALCULATION.SERVICE.TLPP 

Objetivo e escopo: Objetivo desta rotina é de realizar o processamento da requisição de simulação de cálculo proveniente do front-end, na qual são chamados métodos que tratam o JSON de requisição e ativam a MATXFIS para execução dos calculos.

BACKOFFICE.FISCAL.CALCULATION.SIMULATOR.CONTROLLER.TLPP  

Objetivo e escopo: Objetivo desta rotina é de recepcionar a requisição de simulação de cálculo e depois de passar pelos métodos do backoffice.fiscal.calculation.service , receber o JSON de resposta para ser disponibilizado o resultado na tela do FRONT-END. 

BACKOFFICE.FISCAL.SIMULATOR.DIAGNOSE.CONTROLLER.TLPP  

Objetivo e escopo: Objetivo desta rotina é de recepcionar a requisição de diagnóstico e depois de passar pelos métodos do backoffice.fiscal.simulator.diagnose.service , receber o JSON de resposta para ser disponibilizado o resultado na tela do FRONT-END. 

BACKOFFICE.FISCAL.SIMULATOR.DIAGNOSE.SERVICE.TLPP  

Objetivo e escopo: Objetivo desta rotina é de realizar o processamento da requisição de diagnóstico do tributo escolhido na tela do front-end, na qual são chamados métodos que tratam o JSON de requisição e realiza consultas nas tabelas F21, F22, F23, F24, F25 e F2B para devolver a resposta do diagnóstico

BACKOFFICE.FISCAL.TAXCONFIGURATORINTEGRATION.TCICLASS.TLPP 

Objetivo e escopo: Essa rotina está documentada no link : Classe TCIProcessing - Tax Configurator Integration Processing (Processamento de Integração do Configurador Fiscal) e nesse projeto houve alterações pontuais para atender a questão do código de lançamento.

CONFIGURADORFISCAL.APP

Objetivo e escopo: Esse fonte é a aplicação do fornt-end encapsulada no RPO do Protheus

FISA160.PRW 

Objetivo e escopo: Essa rotina está documentada no link FIS002 - Documentação Técnica Configurador de Tributos e nesse projeto houve alterações pontuais para melhoria de performance.

FISA170A.PRW  

Objetivo e escopo: Objetivo desta rotina é a chamada no Menu do módulo de livros fiscais, na qual é chamada a função CALLCONFIG que irá iniciar a aplicação em POUI.

FISCOMPFOR.PRW 

Objetivo e escopo: Essa rotina está documentada no link FIS002 - Documentação Técnica Configurador de Tributos e nesse projeto houve alterações pontuais para melhoria de performance.

03. Api's

Ao inicializar a MATXFIS usando a função MafisIni na rotina de inclusão de documentos de entrada ou saída, é necessário informar que a rotina está apta a processar o configurador de tributos. Essa informação deve ser passada no parâmetro 33.O projeto foi desenvolvimento em POUI, portanto foi necessario o desenvolvimento de API Rest para comunicação com o banco de dados. Abaixo estão os links com toda a documentação relacionada ao contrato de API e todo o detalhamento acerca de seu funcionamento:

https://code.engpro.totvs.com.br/totvs-fiscal/configuradorfiscal

https://code.engpro.totvs.com.br/totvs-fiscal/configuradorfiscal/wiki/%2Fsimulator-API%27s-do-Projeto

Por exemplo:

04. Estrutura Front-End

Nesta seção será abordado os detalhes com relação a estrutura e detalhes do FRONT-END

O projeto encontra-se no link : https://code.engpro.totvs.com.br/totvs-fiscal/configuradorfiscal

No arquivo README.rd do projeto tem detalhes sobre a instalação do Angular e outras ferramentas que utilizamos no projeto.

INFORMAÇÕES BÁSICAS

           Nesse projeto estamos utilizando a versão 17 do Angular e conjunto com a versão 17 do protheus Lib-core, abaixo o retrato das dependências utilizadas:

           Image Added

           Demais dependências podem ser vistas no arquivo "package.json" do projeto.

ESTRUTURA DE PASTAS

          O projeto foi idealizado para que seja escalável, portanto dentro da pasta "Views, há uma pasta chamada "simulator" na qual tem os componentes referente ao projeto de simulador de cálculo.

          Como estamos utilizando a versão 17 do angular na modo standalone, nesse projeto não há "Modules" como é visto em projetos de versões anteriores.

          Image Added

          Image Added

Models

No componente "simulatorresult" houve a necessidade de utilzar os models para poder separar as informações recebidas no JSON de resposta.

Ao todo são 6 models: 

Image Added


AdjustmentsDeclaratory→  Interface para mapear os campos para a tabela de Ajustes Declaratórios na pagina de resultados.

  item: string;
  sequencia: string;
  codigo: string;
  base_calculo: number;
  aliquota: number;
  valor: number;
  sistema: string;
  outros_valores: number;
  observacao: string;
  cod_regra: string;

AdjustmentsLaunch → Interface que mapeia os campos para a tabela de Ajuste de Código de Lançamento na pagina de resultados.

  item: string;
  sequencia: string;
  codigo: string;
  base_calculo: number;
  aliquota: number;
  valor: number;
  sistema: string;
  outros_valores: number;
  observacao: string;
  cod_regra: string;

SimulatorApiResponse → Interface que agrupa as outras interfaces como SpreadSheet, TaxesPerItem, AdjustmentsLaunch, AdjustmentsDeclaratory

 tributos: { [key: string]: SpreadSheet };
  tributos_por_item: { [key: string]: { [key: string]: TaxesPerItem } };
  lancamentos_por_item: {
    [key: string]: {
      ajustes: AdjustmentsLaunch[];
      declaratorios: AdjustmentsDeclaratory[];
    };
  };

SpreadSheet → Interface que mapeia os campos da tabela com o resumo dos impostos calculados na pagina de resultados.

  codigo: string;
  descricao: string;
  base: number;
  aliquota: number;
  valor: number;
  nome: string;

tax-calculation → Nesse arquivo reune diversas interfaces referentes aos tributos calculados.

TaxCalculationResult → Interface agrupadora das outras interfaces listadas acima.

TaxesPerItem → Interface que mapeia os campos da tabela com os tributos por item na pagina de resultados.

  cod_regra: string;
  desc_regra: string;
  base_trib: number;
  aliq_trib: number;
  val_trib: number;
  cst: string;
  valor_tributado: number;
  valor_isento: number;
  valor_outros: number;
  valor_nao_tribut: number;
  valor_diferido: number;
  valor_majorado: number;


Services

Nesta pasta está concentrada as classes relacionadas a comunicação das API's do backend com os componentes do Front-end.

Obs.: os arquivos .spec são referente as automações do componente.

Image Added


brancheslookup.service.ts→  Serviço responsável para realizar o GET com as informações sobre filial , que está sendo utilizada no lookup do campo filial no componente "simulatorHeader.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


cfoplookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre CFOP, que está sendo utilizada no lookup do campo CFOP no componente "simulatorItens.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


customerlookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre clientes , que está sendo utilizada no lookup do campo Participante no componente "simulatorHeader.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


diagnostic.service.ts→ Serviço responsável por realizar o POST com os parametros para o processamento do diagnostico, na qual será retornado um json com a resposta da requisição com o resultado do diagnostico.

Dentro desse serviços há funções de SET e GET para resgatar informações dos formularios das telas anteriores.

runDiagnosisEngine(bodyParams: string) → Função responsável de enviar o POST para o backend.


generateoperation.service.ts→ Serviço responsável por agrupar em Json os valores dos formularios de cabeçalho e itens.

setHeader() → Resgata as informações do formulário contido no componente "simulatorHeader.component" em formato Json

setItems() →  Resgata as informações do formulário contido no componente "simulatorItens.component" em formato Json

generate() → cria um Json com a junção dos Json's das funções setHeader e setItems, para ser utilizado como insumo na tela de resultado.


operationService.service.ts→ Serviço responsável pelo controle de filial nas chamada das API's utilizadas nos demais serviços. Também controla o parâmetro de tipo de operação.

setTenantID e getTenantID → funções de SET e GET para alimentar o campo de TENANTID

setOperation e getOperation →  funções de SET e GET para alimentar o campo de tipo de Operação

setFilial e getFilial →  funções de SET e GET para alimentar o campo de Filial.


origlookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre Origem do Produto , que está sendo utilizada no lookup do campo Origem no componente "simulatorItens.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


productlookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre Produtos , que está sendo utilizada no lookup do campo produto no componente "simulatorItens.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


ruleslookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre Regra de Cálculo, que está sendo utilizada no lookup do campo Regra de Cálculo no componente "simulatorDiagnostic.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.


tax-calculation.service.ts→ Serviço responsável para realizar o POST da API "calculate" , na qual retornará os dados que serão mostrados na tela de resultados.

getTaxCalculation()→ Função que chama a API calculate e envia o POST com as informações necessárias para processar o calculo da simulação.

dividirRetornoAPI()→ Função para dividir o retorno da API.

getTaxPerItem() → Função que separa os tributos por item.

getItems() → Lista itens calculados no retorno da api - considerando response.tributos_por_item.

getAdjustmentsPerItem() → Separa os ajustes por item adjustmentsPerItem - Considerando a chave ajustes.

getDeclaratoryPerItem() → Separa os ajustes por item declaratoryPerItem - Considerando a chave declaratorios.

getSpreadSheetColumns() → Array com a estrutura do resultado da tabela de resumo dos tributos

getTaxesPerItemColumns() → Array com a estrutura do resultado dos tributos por item.

getBookPerItemColumns() → Array com a estrutura do resultado da escrituração por item.

getAdjustmentsColumns()→ Array com a estutura do resultado do lançamentos de ajuste e declaratorios


tax-processor.service.ts→ Serviço responsável pela validação da tela de resultados caso o retorno seja vazio.

processTaxPerItem() → Valida o retorno dos tributos por item e caso seja vazio apresenta mensagem especifica.

processBookEntries()→Valida o retorno do resultado da escrituração do item e caso seja vazio apresenta mensagem especifica.

processAdjustments() →Valida o retorno dos ajustes de lançamento por item e caso seja vazio apresenta mensagem especifica.

processDeclarative() → Valida o retorno dos valores declaratorios por item e caso seja vazio apresenta mensagem especifica.


vendorlookup.service.ts→ Serviço responsável para realizar o GET com as informações sobre fornecedores, que está sendo utilizada no lookup do campo Participante no componente "simulatorHeader.component"

getFilteredItems() - Função padrão do PO-Lookup que busca todos os dados de determinado serviço rest. 

getObjectByValue() - Função padrão do PO-Lookup que busca o dado filtrando por ID.

environments

Nesta pasta está os arquivos com as configurações de ambiente oficial e homologação.

Views - Home

Componente responsável pela tela abaixo:

Image Added

Este componente somente possui as codificações necessarias para apresentação da tela.


Views/simulator - home

Componente responsável pela tela abaixo:

Image Added


simulateOperation() → Função responsavel por chamar a rota que direciona para a pagina "simulador"

Views/simulator- simulatorstep

Componente responsável pela tela abaixo:

Image Added


A maioria das funções do componente acima são de direcionamento de rota de navegação com as validações necessarias para que os formularios não fiquem incompletos.

changeStep() → função que controla o passo para a tela de resultado.

simulatehome() → volta para a tela inicial.

simulateItemNext() →Valida os dados do formulario de cabeçalho e vai para o proximo step da tela.

simulateOperation() → volta para a tela anterior

diagnostic() → vai para o proximo step

diagnosticar() → Função que chama funções de outros componentes para montagem do JSON de requisição POST e ativa a função que vai para a pagina de Diagnostico.

simulateitempreviews() → volta o step anterior

isTableEmpty()→ Validação da tela de itens. 

isFieldEmpty()→ Validação da tela de cabeçalho.

nextStep() → Usado na pagina html para chamar a proxima pagina do step

calculate() → Função que chama funções de outros componentes para montagem do JSON de requisição POST e ativa a função que calcula o resultado


Views/simulator - simulatorheader

Componente responsável pela tela abaixo:

Image Added

validateFields() → Função que valida os campos obrigatórios do formulário e impede que o usuario passe para a proxima tela caso não atenda os requisitos.

setLabelParticipante() → Função que é ativada no momento em que usuario muda o tipo de movimento, para que no container "Participante" apareça Cliente ou Fornecedor.

onSelectedParticipante() → Função que ativa os gatilhos de preenchimento de outros campos no momento em que preencho a informação no lookup de participante.

onChangeParticipante() → Valida a existência do participante e exibe mensagem na tela.

onSelectedFilial() → Função ativada no momento em que o usuário preenche o campo de filial, na qual ativa gatilhos de campos ocultos para serem utilizados nos demais formularios da aplicação.

onChangeFilial() → Função que limpa os campos do formulario caso o campo filial seja alterado.

validateFilial() → Valida a existência da filial e exibe mensagem na tela.

onChangeFrete() → Validação do campo Frete para que não seja preenchido valor negativo.

onChangeDesconto()→ Validação do campo Desconto para que não seja preenchido valor negativo.

onChangeSeguro() → Validação do campo Seguro para que não seja preenchido valor negativo.

onChangeDespesa() → Validação do campo Despesa para que não seja preenchido valor negativo.

headerJson() → Função responsável pela montagem do Json com as informações da tela de cabeçalho.

setdiagHeaderJson()→ Função responsável pela montagem do Json com as informações da tela de cabeçalho para serem utilizadas na funcionalidade de diagnóstico.

clearFields()→ Limpa os campos do formulário.

setHeaderJson() → Envia o Json da tela do cabeçalho para o serviço de generateOperation, que trata da junção do Json para a tela de resultados.



Views/simulator - simulatoritems

Componente responsável pela tela abaixo:

           Image Added

Image Added


validToNextStep() → Função que valida as informações do formulário para que seja possivel ir para o próximo passo do stepper.

setItemsOperations() → chama o serviço "generateOperations" para que chama a função setItems.

canActivateNextStep() → Função de validação que avalia se a tabela tem ao menos um item cadastrado.

calcularValorTotal() → Função que realiza a multiplicação automatica dos campos quantidade x precounitario.

getNextItemNumber() →Função que controle a numeração dos items cadastrados no formulário.

reorderItems() → Função que faz a ordenação dos itens na tabela.

validarCamposObrigatorios() → Faz validação do preenchimento dos campos obrigatórios e caso tenha alguma pendência é apresentado mensagem.

openAddModal()→ Função que abre o formulário PO-modal.

addItem() → Função que grava os itens no PO-Table.

closeModal() →Função que fecha a tela do PO-Modal

resetForm() → Função que limpa os campos do formulário.

onQuantidadeChange() → Validação do campo Quantidade para que não seja preenchido valor negativo.

onPrecoUnitarioChange() → Validação do campo Preço unitário para que não seja preenchido valor negativo.

onProdutoChange() → Validação do campo Produto e caso não exista apresenta mensagem na tela.

edit() → Função padrão do PO-Modal para edição do formulário.

remove() → Função padrão do PO-Modal para remoção de itens do formulário

itemsJson() → Função responsável pela montagem do Json com as informações da tela de itens.

setdiagItemsJson() → Função responsável pela montagem do Json com as informações da tela de itens para serem utilizadas na funcionalidade de diagnóstico.

onCfopChange() →  Validação do campo CFOP e caso não exista apresenta mensagem na tela.

onOrigemChange() →  Validação do campo Origem do Produto e caso não exista apresenta mensagem na tela.

onDescontoChange() → Validação do campo Desconto para que não seja preenchido valor negativo.

onFreteChange() → Validação do campo Frete para que não seja preenchido valor negativo.

onDespesasChange() → Validação do campo Despesa para que não seja preenchido valor negativo.

onSeguroChange() → Validação do campo Seguro para que não seja preenchido valor negativo.


Views/simulator - simulatorresult

Componente responsável pela tela abaixo:

Image Added


calculateTaxes() → função que chama o serviço de processamento do resultado da simulação.

onChangeItem() → Validação na alteração de item.

isValidItem() → Validação do tipo de item.

processItemData() → Função que recebe o resultado do calculo e separa em objetos para serem exibidos na tela.

setLoading() → Função que faz o timing do componente Load do POUI.

resetState() → Limpa as informações do formulário da tela de resultado.

isValidResponse() → Verifica se a resposta da API é válida.

processSuccessfulResponse() → Função que faz a atribuição do resultado da API que já foi segregado pela rotina "processItemData" nos respectivos componentes PO-Table na tela de resultados.

handleEmptyResponse() → Função que apresenta a mensagem quando não há resultado calculado.

handleError() →Função que apresenta mensagem de erro durante o processamento do resultado.

updateViewWithProcessedData()→ Função que faz atualização das informações da tela quando há troca de items para visualização no formulário.

Views/simulator - simulatordiagnostic

Componente responsável pela tela abaixo:

Image Added

preencherTabela()→ função que faz o preechimento do PO-Table com o resultado do retorno da API de diagnóstico.

simulateoperation() → volta para a tela de simulador de cálculo

clearTable() → limpa os dados da tabela de diagnostico.

onTributoChange() → Função de validação do lookup de regra de calculo, para verificar se o codigo existe ou não.

diagnostic() → função chamada no clique do botão "diagnostico" , na qual cria um json e chama o serviço de diagnostic para enviar a requisição POST.


Demais Arquivos

app.component.ts

Arquivo responsavel pela montagem do menu principal.

Image Added


app.routes.ts

Arquivo responsavél pelo direcionamento das rotas de navegação entre as páginas.

Image Added


05. Automações

Nesta seção sera listado as automações que foram desenvolvidas para os fontes de backend:

Image AddedPara utilizar a classe, instancie um objeto da classe TCIWritten, utilizando namespace totvs.protheus.backoffice.fiscal.tciclass e utilize os métodos disponíveis para informar o ID (ou IDs) dos registros que deseja obter. Os dados serão retornados no formato JSON.