Histórico da Página
Í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 projeto.
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.
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.
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
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
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:
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.
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:
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.
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:
Este componente somente possui as codificações necessarias para apresentação da tela.
Views/simulator - home
Componente responsável pela tela abaixo:
simulateOperation() → Função responsavel por chamar a rota que direciona para a pagina "simulador"
Views/simulator- simulatorstep
Componente responsável pela tela abaixo:
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:
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:
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:
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:
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.
app.routes.ts
Arquivo responsavél pelo direcionamento das rotas de navegação entre as páginas.
05. Automações
Nesta seção sera listado as automações que foram desenvolvidas para os fontes de backend: