Histórico da Página
...
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.
02. COMO USAR
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.
03. MÉTODOS
New()
Método construtor da classe.
Exemplo de utilização
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 à MATXFIS e retornando o feedback após fim do processamento, podendo ser warning ou success.
...
| title | Informação |
|---|
do motor de calculo e por consequência, gravando os registros nas tabelas F2D e CJ3 .
| Aviso | ||
|---|---|---|
| ||
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.
| Informações | ||
|---|---|---|
| ||
Todos os 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.
...
Exemplo de utilização
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
usingUsing Namespace totvs.protheus.backoffice.fiscal.taxoperandintegrator Function Exemplo() Local oIntegrador as Object Local jDadosTributooIntegrador as Json Local cRetorno oIntegrador as Character // Inicializa o integrador oIntegrador := TaxOperandIntegrator():New() // Monta o JSON com dados dos tributos jDadosTributo := { "1": { ;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.
| Informações | ||
|---|---|---|
| ||
O método ProcessItemTaxJson retorna uma string estruturada como JSON com o feedback do processamento |
Exemplo de utilização
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
Using 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": { ;
"000021": { ;
"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.
| Aviso | ||
|---|---|---|
| ||
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 | ||
|---|---|---|
| ||
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
{ "1": { "000062": { "base_valor": 0, "base_quantidade": 10000, "base_um": "UM", "aliquota": 10, "valor": 500, "esc_CST": "000", "esc_CCT": "003", "TRIB01esc_vl_tributado": { ;6.55, "base_valor"esc_vl_isento": 10000.00, ; "aliquotaesc_vl_outros": 180.00, ; "valoresc_vl_diferido": 1800.00, ; } ;"esc_pc_diferido": 0, } } "esc_pc_reducao_base": 0, // Processa os tributos "esc_base_original": 0, 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:
Novos tributos
Os novos tributos (tributos da reforma), obrigatoriamente precisam conter a seguinte estrutura:
Estrutura JSON novos tributos
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
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
"esc_pc_reducao_aliq": 0,
"esc_aliquota_original": 0.00
}
}
}
|
| Aviso | ||
|---|---|---|
| ||
Caso a estrutura não seja respeitada o método retornará um warning e o processamento será interrompido |
Propriedades do Tributo (F2D)
| Propriedade | Descrição | Type | Obrigatório? |
|---|---|---|---|
| base_valor | Valor da base do imposto | number | Sim |
| base_quantidade | Valor da base quando é operação com quantidade | number | Não* |
| base_um | Unidade de medida | character | Não* |
| aliquota | Alíquota do tributo | number | Sim |
| valor | Valor do imposto | number | Sim |
Propriedades de escrituração (CJ3)
| Propriedade | Descrição | Type | Obrigatório? |
|---|---|---|---|
| esc_CST | Classificação fiscal | character | Não |
| esc_CCT | CCT IBS/CBS | character | Não |
| esc_vl_tributado | Valor tributado | number | Sim |
| esc_vl_isento | Valor isento | number | Sim |
| esc_vl_outros | Valor outros | number | Sim |
esc_vl_diferido | Valor diferido | number | Não |
esc_pc_diferido | Percentual do diferimento | number | Não |
esc_pc_reducao_base | Percentual da redução | number | Não |
esc_base_original | Base original | number | Não |
esc_pc_reducao_aliq | Percentual de redução de alíquota | number | Não |
esc_aliquota_original | Alíquota original | number | Nã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:
Estrutura JSON tributos legados
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
numero_item
|_id_tributo
|_base_valor
|_aliquota
|_valor |
Composição JSON
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"1": {
"000021": { | ||||||
| Bloco de código | ||||||
| ||||||
{ "1": { "000062": { "base_valor": 0, "base_quantidade": 10000, "base_um": "UM", "aliquota": 10, "valor": 500, "CST": "000", "CCT": "003", "vlbase_tributadovalor": 6.5510000, "vl_isentoaliquota": 0.0010, "vl_outrosvalor": 0.00500, "vl_diferido": 0.00, "pc_diferido": 0, "pc_reducao_base": 0, "base_original": 0, "pc_reducao_aliq": 0, "aliquota_original": 0.00 } } } |
| Aviso | ||
|---|---|---|
| ||
Caso a estrutura não seja respeitada o método retornará um warning e o processamento será interrompido |
Propriedades do Tributo (F2D)
...
Valor da base do imposto
...
number
...
Propriedades de escrituração (CJ3)
...
vl_diferido
...
pc_diferido
...
pc_reducao_base
...
base_original
...
pc_reducao_aliq
...
aliquota_original
...
}
}
} |
Propriedades do Tributo (F2D)
| Propriedade | Descrição | Type | Obrigatório? |
|---|---|---|---|
| base_valor | Valor da base do imposto | number | Sim |
| base_quantidade | Valor da base quando é operação com quantidade | number | Não* |
| base_um | Unidade de medida (preenchimento obrigatório caso haja valor na propriedade base_quantidade) | character | Não* |
| aliquota | Alíquota do tributo | number | Sim |
| valor | Valor do imposto | number | Sim |
mva | Índice de cálculo MVA | number | Não |
aux_mva | Índice de cálculo auxiliar do MVA | number | Não |
pauta | Pauta | number | Não |
vl_majorado | Percentual de Majoração | number | Não |
aux_majoracao | Indice auxiliar do percentual de majorção | number | Não |
vl_majoracao | Valor Majoração | number | Não |
pc_majorcao | Alíquota Majoração | number | Não |
aliquota_tribut | Alíquota do Tributo por regra de NCM | number | Não |
ded_dep | Dedução por dependentes | number | Nã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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
numero_item
|_id_tributo
|_base_valor
|_base_quantidade
|_base_um
|_aliquota
|_valor
|
Composição JSON
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
{
"1": {
"000021": {
"base_valor": 0,
"base_quantidade": 10000,
"base_um": "UM",
"aliquota": 10,
"valor": 500,
}
}
} |
Propriedades de escrituração (CJ3)
| Propriedade | Descrição | type | Obrigatório? |
|---|---|---|---|
esc_tab_CST | Tabela CST | character | Não |
| esc_CST | CST | character | Não |
| esc_vl_tributado | Valor tributado | number | Sim |
| esc_vl_isento | Valor isento | number | Sim |
| esc_vl_outros | Valor outros | number | Sim |
esc_vl_diferido | Valor diferido | number | Não |
esc_pc_diferido | Percentual do diferimento | number | Não |
esc_pc_reducao_base | Percentual da redução | number | Não |
esc_base_original | Base original | number | Não |
esc_pc_reducao_aliq | Percentual de redução de alíquota | number | Não |
esc_aliquota_original | Alíquota original | number | Nã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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 |
| Aviso | ||
|---|---|---|
| ||
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. |
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
| Bloco de código | ||||||
|---|---|---|---|---|---|---|
| ||||||
numero_item
|_id_tributo
|_base_valor
|_aliquota
|_valor |
Composição JSON
| Bloco de código | ||||
|---|---|---|---|---|
| ||||
{
"1": {
"000021": {
"base_valor": 10000,
"aliquota": 10,
"valor": 500,
}
}
} |
Propriedades do Tributo (F2D)
...
Valor da base do imposto
...
number
...
Propriedades de escrituração (CJ3)
...
tab_CST
...
vl_diferido
...
pc_diferido
...
pc_reducao_base
...
base_original
...
pc_reducao_aliq
...
aliquota_original
...
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"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 | ||||||
| ||||||
{ "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.