Árvore de páginas

Versões comparadas

Chave

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

...

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 .

Aviso
titleAtenção

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.

...

Informações
titleInformação

Todos os tributo enviado tributos que terão os seus valores atribuídos 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.

...

Bloco de código
languagejs
themeMidnight
titleExemplo método new
usingUsing Namespace totvs.protheus.backoffice.fiscal.taxoperandintegrator   
 
Function Exemplo()
    Local oIntegrador as Json
     oIntegrador oIntegrador   := TaxOperandIntegrator():New()
Return

...

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

...

Bloco de código
languagejs
themeMidnight
titleExemplo método ProcessItemTaxJson
usingUsing Namespace 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": { ;
        "TRIB01000021": { ;
            "base_valor": 1000.00, ;
            "aliquota": 18.00, ;
            "valor": 180.00, ;
        } ;
    } }
    
    // Processa os tributos
    cRetorno := oIntegrador:ProcessItemTaxJson(jDadosTributo)
Return

...

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

Novos tributos

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

Estrutura JSON novos tributos

.

Aviso
titleAtenção

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.

A Estrutura é composta por:

  • Número do Item (nItem);
  • ID do Tributo (para mais informações sobre ID do Tributo consulte aqui);
  • Propriedades do Tributo (valores ou dados que serão atualizados nas referencias das tabelas F2D e CJ3).
Informações
titleInformação

A classe segue os mesmo princípios do motor de calculo, MATXFIS, sendo assim, os tributos são atualizados por item. Ou seja, cada item terá um tributo ou n tributos.

Novos tributos

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

Estrutura JSON novos tributos

Bloco de código
languagejs
themeMidnight
titleExemplo estrutura Json Novos Tributos
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_
Bloco de código
languagejs
themeMidnight
titleExemplo estrutura Json Novos Tributos
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor
        	|_esc_CST
        	|_esc_CCT
        	|_esc_vl_tributado
        	|_esc_vl_isento
        	|_esc_vl_outros
        	|_esc_vl_diferido
        	|_esc_pc_diferido
        	|_esc_pc_reducao_base
        	|_esc_base_original
        	|_esc_pc_reducao_aliq
        	|_esc_aliquota_original

Composição JSON

Bloco de código
languagejs
themeMidnight
titleExemplo JSON
 {
    "1": {
      "000062": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,
        "esc_CST": "000",
        "esc_CCT": "003",
        "esc_vl_tributado": 6.55,
        "esc_vl_isento": 0.00,
        "esc_vl_outros": 0.00,
        "esc_vl_diferido": 0.00,
        "esc_pc_diferido": 0,
        "esc_pc_reducao_base": 0,
        "esc_base_original": 0,
        "esc_pc_reducao_aliq": 0,
        "esc_aliquota_original": 0.00
      	}
   	}
}

...

Propriedades do Tributo (F2D)

PropriedadeDescriçãoTypeObrigatório?
base_valor

Valor da base do imposto

number

Sim

base_quantidadeValor da base quando é operação com quantidadenumberNão*
base_umUnidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade)characterNão*
aliquotaAlíquota do tributonumberSim
valorValor do impostonumberSim

Propriedades de escrituração (CJ3)

PropriedadeDescriçãoTypeObrigatório?
esc_CSTClassificação fiscalcharacterNão
esc_CCTCCT IBS/CBScharacterNão
esc_vl_tributadoValor tributadonumberSim
esc_vl_isentoValor isentonumberSim
esc_vl_outrosValor outrosnumberSim

esc_vl_diferido

Valor diferidonumberNão

esc_pc_diferido

Percentual do diferimentonumberNão

esc_pc_reducao_base

Percentual da reduçãonumberNão

esc_base_original

Base originalnumberNão

esc_pc_reducao_aliq

Percentual de redução de alíquotanumberNão

esc_aliquota_original

Alíquota originalnumber

...

Não

...

titleAtenção

...

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.

Tributos legados

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

...

Propriedades do Tributo (F2D)

PropriedadeDescriçãoTypeObrigatório?
base_valor

Valor da base do imposto

number

Sim

base_quantidadeValor da base quando é operação com quantidadenumberNão*
base_umUnidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade)characterNão*
aliquotaAlíquota do tributonumberSim
valorValor do impostonumberSim

mva

Propriedades de escrituração (CJ3)

...

tab_CST

...

vl_diferido

...

pc_diferido

...

pc_reducao_base

...

base_original

...

pc_reducao_aliq

...

aliquota_original

...

Índice de cálculo MVAnumberNão

aux_mva

Índice de cálculo auxiliar do MVAnumberNão

pauta

PautanumberNão

vl_majorado

Percentual de MajoraçãonumberNão

aux_majoracao

Indice auxiliar do percentual de majorçãonumberNão

vl_majoracao

Valor MajoraçãonumberNão

pc_majorcao

Alíquota MajoraçãonumberNão

aliquota_tribut

Alíquota do Tributo por regra de NCMnumberNão

ded_dep

Dedução por dependentesnumberNão
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:

Bloco de código
languagejs
themeMidnight
titleEstrutura com base_valor, base_quantidade e base um
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor 


Composição JSON
Bloco de código
languagejs
themeMidnight
 {
    "1": {
      "000021": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,            
		}
    }
}

Propriedades de escrituração (CJ3)

PropriedadeDescriçãotypeObrigatório?

esc_tab_CST

Tabela CSTcharacterNão
esc_CSTCSTcharacterNão
esc_vl_tributadoValor tributadonumberSim
esc_vl_isentoValor isentonumberSim
esc_vl_outrosValor outrosnumberSim

esc_vl_diferido

Valor diferidonumberNão

esc_pc_diferido

Percentual do diferimentonumberNão

esc_pc_reducao_base

Percentual da reduçãonumberNão

esc_base_original

Base originalnumberNão

esc_pc_reducao_aliq

Percentual de redução de alíquotanumberNão

esc_aliquota_original

Alíquota originalnumberNão

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
Bloco de código
languagejs
themeMidnight
titleEstrutura completa JSON Tributo legado
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_base_um
        	|_aliquota
        	|_valor
 		 	|_mva
			|_aux_mva
			|_pauta
			|_vl_majorado
			|_aux_majoracao
			|_vl_majoracao
			|_pc_majorcao
			|_aliquota_tribut
			|_ded_dep 
            |_esc_tab_CST
        	|_esc_CST
        	|_esc_vl_tributado
        	|_esc_vl_isento

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

Bloco de código
languagejs
themeMidnight
titleEstrutura completa JSON Tributo legado
    numero_item
		|_id_tributo
			|_base_valor
		 	|_base_quantidade
        	|_esc_basevl_umoutros
        	|_esc_vl_aliquotadiferido
        	|_esc_pc_valordiferido
        	|_esc_tabpc_reducao_CSTbase
        	|_esc_base_CSToriginal
        	|_esc_vlpc_reducao_tributadoaliq
        	|_esc_vl_isento
        	|_vl_outros
        	|_vl_diferido
        	|_pc_diferido
        	|_pc_reducao_base
        	|_base_original
        	|_pc_reducao_aliq
        	|_aliquota_original

Composição JSON

aliquota_original
Composição JSON
Bloco de código
languagejs
themeMidnight
titleExemplo
 {
    "1": {
      "000021": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,
		"mva": 0,
		"aux_mva": 0,
		"pauta" : 0,
		"vl_majorado": 0,
		"aux_majoracao": 0,
		"vl_majoracao": 0,
		"pc_majorcao": 0,
		"aliquota_tribut": 0,
		"ded_dep": 0
Bloco de código
languagejs
themeMidnight
titleExemplo
 {
    "1": {
      "000062": {
        "base_valor": 0,
        "base_quantidade": 10000,
        "base_um": "UM",
        "aliquota": 10,
        "valor": 500,
        "esc_tab_CST": "000001",
        "esc_CST": "001",
        "esc_vl_tributado": 6.55,
        "esc_vl_isento": 0.00,
        "esc_vl_outros": 0.00,
        "esc_vl_diferido": 0.00,
        "esc_pc_diferido": 0,
        "esc_pc_reducao_base": 0,
        "esc_base_original": 0,
        "esc_pc_reducao_aliq": 0,
        ""esc_aliquota_original": 0.00
      	}
   	}
} 

05. REGRAS OPERANDOS DE INTEGRAÇAO

Novos tributos

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

  • Regra de Base
  • Regra de Alíquota
  • Regra de Escrituração
  • Regra de Cálculo

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

...

   	}
   	}
} 

05. REGRAS OPERANDOS DE INTEGRAÇAO

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

  • Regra de Base
  • Regra de Alíquota
  • Regra de Cálculo

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.


06. DOCUMENTOS RELACIONADOS