Pular para o conteúdo principal

Valores numéricos (string)


Todos os valores financeiros no Fees Engine devem ser expressos como string, usando o tipo numeric. Isso garante o manuseio decimal de alta precisão para ativos como BRL ou BTC, e previne erros de arredondamento durante cálculos, divisões ou isenções.
Importante
  • Requerido: Midaz v3.x.x (usa numeric).
  • Incompatível: Midaz v2.x.x (formato amount + scale descontinuado).
Clientes usando Midaz v2.x.x devem atualizar para v3.x.x para garantir integração e funcionalidade adequadas com o Fees Engine.
Exemplo:
"value": "12.50"

Regras de cálculo de taxas


Cada taxa usa uma applicationRule para definir como é calculada. Você pode escolher entre três tipos de regra: Você pode combinar diferentes regras em um único pacote para atender ao seu caso de uso. Outros campos importantes:
  • isDeductibleFrom: define se a taxa é deduzida do remetente ou do destinatário.
  • referenceAmount: pode ser originalAmount ou afterFeesAmount.
  • priority: define a ordem de aplicação. A prioridade 1 deve sempre usar originalAmount.

maxBetweenTypes

Aplica o que for maior: uma taxa fixa ou uma taxa baseada em percentual. Exemplo
  • Valor da taxa fixa: R$5.
  • Taxa percentual: 2%.
  • Valor de referência: R$1.000.
rate = 1000 * 0.02 = R$ 20,00
Como R$ 20 > R$ 5, a taxa baseada em percentual é aplicada.

flatFee

Aplica um valor fixo de taxa. O comportamento depende do isDeductibleFrom. Exemplo
  • Taxa fixa: R$15.
  • Valor de referência: R$115.
isDeductibleFromFórmulaTaxa Total
falsereferenceAmount + feeR$ 130,00
truereferenceAmount - feeR$ 100,00

percentual

Aplica uma taxa como percentual do valor de referência. Exemplo
  • Valor: 30%.
  • Valor de referência: R$ 389,50.
isDeductibleFromFórmulaTaxa Total
falsereferenceAmount * valueR$ 116,85
truereferenceAmount - (referenceAmount * value)R$ 272,65

Divisão de taxas


Quando uma transação tem múltiplas contas de origem, o Fees Engine divide as taxas proporcionalmente.

Exemplo

  • Valor total: R$4.000,00
  • Taxa fixa: R$15,00
  • Imposto: 4%
  • isDeductibleFrom: false

Participação %

Fórmula: (Valor da Conta ÷ Valor Total) × 100
ContaParticipaçãoValor
@account125%R$ 1.000
@account225%R$ 1.000
@account340%R$ 1.600
@account410%R$ 400

Distribuição da taxa fixa

Fórmula: taxa fixa × participação %
ContaParcela da TaxaTotal
@account1R$ 3,75R$ 1.003,75
@account2R$ 3,75R$ 1.003,75
@account3R$ 6,00R$ 1.606,00
@account4R$ 1,50R$ 401,50

Imposto proporcional

Fórmula: valor da conta × % do imposto
ContaImpostoTotal c/ Imposto
@account1R$ 40,00R$ 1.040,00
@account2R$ 40,00R$ 1.040,00
@account3R$ 64,00R$ 1.664,00
@account4R$ 16,00R$ 416,00

Valor final por conta

Fórmula: principal + taxa + imposto
ContaTaxaImpostoTotal Final
@account1R$ 3,75R$ 40,00R$ 1.043,75
@account2R$ 3,75R$ 40,00R$ 1.043,75
@account3R$ 6,00R$ 64,00R$ 1.670,00
@account4R$ 1,50R$ 16,00R$ 417,50

Validações

  • Total das participações = 100%
  • Divisão da taxa corresponde à taxa fixa
  • Divisão do imposto = 4%
  • Total enviado = R$ 4.175,00

Isenções de taxas: regras e hierarquia


Por valor da transação

Use minimumAmount e maximumAmount para definir quando as taxas devem ser aplicadas.
Por exemplo: Se a faixa é R$ 0–300, uma transação de R$ 301 não acionará taxas.

Por conta

O sistema verifica waivedAccounts. Se a origem está listada, ela é isenta de taxas.
Hierarquia: Verificação da faixa de valor > depois isenção por conta

Exemplo misto: isenções de taxas e divisão proporcional de taxas


Vamos ver um exemplo de um pacote que inclui contas com isenções de taxas e requer divisão proporcional das taxas.

Cenário

Estamos processando uma transação de R$ 4.000, que inclui:
  • Uma taxa fixa de R$ 16.
  • Apenas algumas contas estão sujeitas à taxa fixa.
  • Um IOF de 6% a ser deduzido.

Divisão no lado da origem

Conta de Origem%Valor Proporcional
@account115%R$ 600
@account235%R$ 1.400
@account340%R$ 1.600
@account410%R$ 400
Taxa fixa aplicada apenas a @account3 e @account4.

Resultado após Taxa Administrativa (proporcional)

ContaTaxa AdminTotal
@account1IsentaR$ 600
@account2IsentaR$ 1.400
@account3R$ 12,80R$ 1.612,80
@account4R$ 3,20R$ 403,20
O valor total enviado aumenta para R$4.016.

Dedução de IOF (destinatário)

Destinatário%BrutoIOF (6%)Líquido
@donation125%R$ 1.000R$ 60R$ 940
@donation225%R$ 1.000R$ 60R$ 940
@donation325%R$ 1.000R$ 60R$ 940
@donation425%R$ 1.000R$ 60R$ 940
As taxas são creditadas nas contas definidas no creditAccount de cada taxa.

Dízimas periódicas


Quando uma divisão de taxa resulta em dízimas periódicas (ex.: 0,3333…), o Fees Engine ajusta automaticamente o primeiro ou maior valor em um centavo para garantir que o total permaneça exato. Isso evita desvios de arredondamento e mantém seu ledger consistente.