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 .
Este documento tem o objetivo de demonstrar o funcionamento da classe e seus métodos, e as condições para efetivação do processo.
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.
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 |
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 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 |
Para o funcionamento correto da classe, é necessário que o JSON contenha a estrutura pré-determinada:
Os novos tributos (tributos da reforma), obrigatoriamente precisam conter a seguinte estrutura:
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 |
{
"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 |
| Propriedade | Descrição | Type |
|---|---|---|
| base_valor | Valor da base do imposto | number |
| base_quantidade | Valor da base quando é operação com quantidade | number |
| base_um | Unidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade) | character |
| aliquota | Alíquota do tributo | number |
| valor | Valor do imposto | number |
| Propriedade | Descrição | Type |
|---|---|---|
| CST | Classificação fiscal | character |
| CCT | CCT IBS/CBS | character |
| vl_tributado | Valor tributado | number |
| vl_isento | Valor isento | number |
| vl_outros | Valor outros | number |
vl_diferido | Valor diferido | number |
pc_diferido | Percentual do diferimento | number |
pc_reducao_base | Percentual da redução | number |
base_original | Base original | number |
pc_reducao_aliq | Percentual de redução de alíquota | number |
aliquota_original | Alíquota original | number |
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. |
Para o funcionamento correto, os tributos legados (tributos correntes atualmente, antes da reforma) precisam ter pelo menos a seguinte estrutura:
numero_item |_id_tributo |_base_valor |_aliquota |_valor |
{
"1": {
"000021": {
"base_valor": 10000,
"aliquota": 10,
"valor": 500,
}
}
} |
| Propriedade | Descrição | Type |
|---|---|---|
| base_valor | Valor da base do imposto | number |
| base_quantidade | Valor da base quando é operação com quantidade | number |
| base_um | Unidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade) | character |
| aliquota | Alíquota do tributo | number |
| valor | Valor do imposto | number |
| Propriedade | Descrição | type |
|---|---|---|
tab_CST | Tabela CST | character |
| CST | CST | character |
| vl_tributado | Valor tributado | number |
| vl_isento | Valor isento | number |
| vl_outros | Valor outros | number |
vl_diferido | Valor diferido | number |
pc_diferido | Percentual do diferimento | number |
pc_reducao_base | Percentual da redução | number |
base_original | Base original | number |
pc_reducao_aliq | Percentual de redução de alíquota | number |
aliquota_original | Alíquota original | number |
Em casos onde é necessário enviar a escrituração é obrigatório que todas as propriedades de escrituração estejam no JSON:
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 |
{
"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
}
}
} |
Para que a integração funcione é necessário que o operando 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.
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.