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 MATXFIS.
Este documento tem o objetivo de demonstrar o funcionamento da classe e seus métodos, facilitando a integração de tributos.
A Classe TaxOperandIntegrator possibilita receber e processar dados de tributos através de um JSON estruturado, integrando esses valores à MATXFIS 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 alguma dessas configurações não esteja de acordo será retornada uma mensagem de warning e o processamento será interrompido.