CONTEÚDO


01. VISÃO GERAL

A Classe TaxOperandIntegrator foi desenvolvida para viabilizar a recepção de tributos com Operandos de integração no Configurador de Tributos (FISA170), permitindo que valores de tributos sejam recebidos via JSON e integrando dinamicamente à estrutura da do motor de calculo e por consequência, gravando os registros nas tabelas F2D e CJ3 .

A classe não tem a funcionalidade de gravar registros em tabelas, e por esse motivo é necessário que a classe seja instanciada no contexto onde a Matxfis esta inicializada, pois as funções internas do motor de calculo continuam com a responsabilidade de realizar a gravação. 

Este documento tem o objetivo de demonstrar o funcionamento da classe e seus métodos, e as condições para efetivação do processo.

02. COMO USAR

A Classe TaxOperandIntegrator possibilita receber e processar dados de tributos através de um JSON estruturado, integrando esses valores ao motor de calculo do módulo fiscal em tempo de execução. Para o funcionamento correto, é imprescindível que a classe seja utilizada após a inicialização da MATXFIS (após o carregamento da operação MafisIniLoad) e antes do seu encerramento.

Todos os tributo enviado pela classe precisam estar previamente cadastrados no Configurador de Tributos (FISA170) e em seu cadastro conter os Operandos de integração seguindo as Regras do Operando de Integração

03. MÉTODOS

New()

Método construtor da classe.

Exemplo de utilização


using totvs.protheus.backoffice.fiscal.taxoperandintegrator
 
Function Exemplo()
    Local oIntegrador as Json
     oIntegrador   := TaxOperandIntegrator():New()
Return

ProcessItemTaxJson()

Método principal que recepciona e processa o JSON de tributos do item, realizando todas as validações necessárias e integrando os valores ao motor de calculo e retornando o feedback após fim do processamento, podendo ser warning ou success.

O método ProcessItemTaxJson retorna uma string estruturada como JSON com o feedback do processamento

Exemplo de utilização

using totvs.protheus.backoffice.fiscal.taxoperandintegrator
 
Function Exemplo()
	Local oIntegrador   as Object
    Local jDadosTributo as Json
    Local cRetorno      as Character
    
    // Inicializa o integrador
    oIntegrador := TaxOperandIntegrator():New()
    
    // Monta o JSON com dados dos tributos
    jDadosTributo := { "1": { ;
        "TRIB01": { ;
            "base_valor": 1000.00, ;
            "aliquota": 18.00, ;
            "valor": 180.00, ;
        } ;
    } }
    
    // Processa os tributos
    cRetorno := oIntegrador:ProcessItemTaxJson(jDadosTributo)
Return


04. ESTRUTURA DO JSON

Para o funcionamento correto da classe, é necessário que o JSON contenha a estrutura pré-determinada:

A classe TaxOperandIntegrator tem  por objetivo preencher as referencias internas do configurador de tributos, sendo assim, mesmo que a propriedade tenha o conteúdo zero ou vazio precisa ser informado, pois se tratando de uma integração para recepção dos tributos e seus respectivos valores não é possível presumir o valor.

Novos tributos

Os novos tributos (tributos da reforma), obrigatoriamente precisam conter a seguinte estrutura:

Estrutura JSON novos tributos

    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor
        	|_CST
        	|_CCT
        	|_vl_tributado
        	|_vl_isento
        	|_vl_outros
        	|_vl_diferido
        	|_pc_diferido
        	|_pc_reducao_base
        	|_base_original
        	|_pc_reducao_aliq
        	|_aliquota_original

Composição JSON

 {
    "1": {
      "000062": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,
        "CST": "000",
        "CCT": "003",
        "vl_tributado": 6.55,
        "vl_isento": 0.00,
        "vl_outros": 0.00,
        "vl_diferido": 0.00,
        "pc_diferido": 0,
        "pc_reducao_base": 0,
        "base_original": 0,
        "pc_reducao_aliq": 0,
        "aliquota_original": 0.00
      	}
   	}
}


Caso a estrutura não seja respeitada o método retornará um warning e o processamento será interrompido

Propriedades do Tributo (F2D)

PropriedadeDescriçãoType
base_valor

Valor da base do imposto

number

base_quantidadeValor da base quando é operação com quantidadenumber
base_umUnidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade)character
aliquotaAlíquota do tributonumber
valorValor do impostonumber

Propriedades de escrituração (CJ3)

PropriedadeDescriçãoType
CSTClassificação fiscalcharacter
CCTCCT IBS/CBScharacter
vl_tributadoValor tributadonumber
vl_isentoValor isentonumber
vl_outrosValor outrosnumber

vl_diferido

Valor diferidonumber

pc_diferido

Percentual do diferimentonumber

pc_reducao_base

Percentual da reduçãonumber

base_original

Base originalnumber

pc_reducao_aliq

Percentual de redução de alíquotanumber

aliquota_original

Alíquota originalnumber


Tributos legados

Para o funcionamento correto, os tributos legados (tributos correntes atualmente, antes da reforma) precisam ter pelo menos a seguinte estrutura:

Estrutura JSON tributos legados

    numero_item
		|_id_tributo
			|_base_valor
        	|_aliquota
        	|_valor

 Composição JSON

{
    "1": {
      "000021": {
        "base_valor": 10000,
        "aliquota": 10,
        "valor": 500,
       	}
   	}
}

Propriedades do Tributo (F2D)

PropriedadeDescriçãoType
base_valor

Valor da base do imposto

number

base_quantidadeValor da base quando é operação com quantidadenumber
base_umUnidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade)character
aliquotaAlíquota do tributonumber
valorValor do impostonumber
Base quantidade

Em casos onde é necessário enviar o valor da base por quantidade é obrigatório o envio de todas as propriedades do tributo, sendo necessário também o preenchimento da propriedade base_um, exemplo:

    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor 


Composição JSON
 {
    "1": {
      "000062": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,            
		}
    }
}

Propriedades de escrituração (CJ3)

PropriedadeDescriçãotype

tab_CST

Tabela CSTcharacter
CSTCSTcharacter
vl_tributadoValor tributadonumber
vl_isentoValor isentonumber
vl_outrosValor outrosnumber

vl_diferido

Valor diferidonumber

pc_diferido

Percentual do diferimentonumber

pc_reducao_base

Percentual da reduçãonumber

base_original

Base originalnumber

pc_reducao_aliq

Percentual de redução de alíquotanumber

aliquota_original

Alíquota originalnumber

Escrituração

Em casos onde é necessário enviar a escrituração é obrigatório que todas as propriedades de escrituração estejam no JSON:

Estrutura JSON tributos legados completa
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor
        	|_tab_CST
        	|_CST
        	|_vl_tributado
        	|_vl_isento
        	|_vl_outros
        	|_vl_diferido
        	|_pc_diferido
        	|_pc_reducao_base
        	|_base_original
        	|_pc_reducao_aliq
        	|_aliquota_original
Composição JSON
 {
    "1": {
      "000062": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,
        "tab_CST": "000001",
        "CST": "001",
        "vl_tributado": 6.55,
        "vl_isento": 0.00,
        "vl_outros": 0.00,
        "vl_diferido": 0.00,
        "pc_diferido": 0,
        "pc_reducao_base": 0,
        "base_original": 0,
        "pc_reducao_aliq": 0,
        "aliquota_original": 0.00
      	}
   	}
} 

05. REGRAS OPERANDOS DE INTEGRAÇAO

Novos tributos

Para que a integração funcione é necessário que o Operandos de integração esteja configurado nas seguintes regras:

Caso alguma dessas configurações não esteja de acordo será retornada uma mensagem de warning e o processamento será interrompido.

Tributos legados

Para que a integração funcione é necessário que o Operando de integração esteja configurado nas seguintes regras:

No caso da Regra de Escrituração ela só será necessária, caso no JSON, seja informada alguma propriedade de escrituração. Caso o contrário a classe respeitará a regra de escrituração amarrada ao tributo, se houver.

Caso alguma dessas configurações não esteja de acordo será retornada uma mensagem de warning e o processamento será interrompido.