1. Projete pacotes de taxas com nomes claros e segmentação
Os pacotes de taxas são a base da sua lógica de tarifação. Uma estrutura de pacotes bem organizada facilita a manutenção, depuração e auditoria da sua configuração de taxas ao longo do tempo.
- Use nomes descritivos que reflitam o contexto de negócio (ex.: “pix-transfer-standard”, “wire-premium-segment”).
- Segmente por produto e grupo de clientes usando
segmentId. Isso permite aplicar diferentes regras de taxas a diferentes níveis de clientes sem criar pacotes conflitantes. - Mantenha os pacotes focados. Um pacote que tenta cobrir muitos cenários se torna difícil de testar e manter. Prefira múltiplos pacotes focados em vez de um que faça tudo.
- Documente a estrutura dos seus pacotes internamente. À medida que a quantidade de pacotes cresce, uma referência clara de qual pacote se aplica onde previne erros de configuração.
2. Configure as prioridades de taxas com cuidado
Quando um pacote contém múltiplas taxas, o campo
priority determina a ordem de execução. Errar nisso pode produzir cálculos incorretos.
- A prioridade 1 deve sempre usar
referenceAmount: originalAmount. Isso é aplicado pelo motor. - Taxas com
isDeductibleFrom: truetambém devem usarreferenceAmount: originalAmount. Isso garante que taxas dedutíveis sejam sempre calculadas contra o valor total da transação. - A prioridade deve ser única dentro de um pacote. Prioridades duplicadas serão rejeitadas.
- Pense nas dependências de taxas. Se uma taxa ajusta o valor da transação e outra taxa deve ser calculada sobre o valor ajustado, use
referenceAmount: afterFeesAmountcom um número de prioridade maior. Se a segunda taxa deve referenciar o valor original, useoriginalAmount.
3. Sempre simule antes de aplicar taxas em produção
O Fees Engine fornece um endpoint de simulação que permite previsualizar os cálculos de taxas sem escrever nada no ledger. Use a simulação para:
- Validar novos pacotes antes de ativá-los. Confirme que os valores calculados correspondem aos seus resultados esperados em diferentes valores de transação.
- Testar casos limite: transações de valor zero, valores de fronteira nos limites de
minimumAmountemaximumAmount, e contas isentas. - Previsualizar taxas para usuários. Se seu produto exibe taxas antes da confirmação, use o endpoint de simulação para fornecer previsualizações precisas.
- Depurar resultados inesperados. Se uma taxa calculada não corresponde às expectativas, simule a mesma transação com um
packageIdespecífico para isolar o problema.
O endpoint de cálculo seleciona automaticamente o pacote que melhor corresponde. O endpoint de simulação requer um
packageId específico, dando a você controle total sobre qual pacote testar.4. Gerencie as isenções de forma explícita
O Fees Engine suporta dois tipos de isenções: por faixa de valor de transação e por conta.
- Faixas de valor (
minimumAmount,maximumAmount): Definem a janela de valor de transação na qual as taxas se aplicam. Transações fora dessa faixa estão isentas. Use isso para limites promocionais ou preços escalonados. - Contas isentas (
waivedAccounts): Contas específicas isentas de taxas dentro de um pacote. Use isso para contas internas, contas de funcionários ou acordos de parceria.
- Mantenha as listas de contas isentas curtas e revisadas. Listas grandes se tornam difíceis de auditar. Revise periodicamente quais contas estão isentas e por quê.
- Documente a razão de negócio de cada isenção nos seus registros internos.
- Teste os limites de isenção. Se sua faixa é R 300 e R$ 301 se comportem como esperado.
5. Habilite e ajuste o cache para desempenho
O Fees Engine armazena pacotes de taxas em cache na memória para reduzir consultas ao banco de dados durante alto tráfego. Configure o cache através de variáveis de ambiente:
PACKAGE_CACHE_ENABLED(padrão:true): Habilita ou desabilita o cache de pacotes.PACKAGE_CACHE_TTL_SECONDS(padrão:600): Tempo de vida em segundos antes que os pacotes em cache sejam atualizados a partir do banco de dados.
- Mantenha o cache habilitado em produção. Ele reduz significativamente a latência para processamento de transações de alto volume.
- Ajuste o TTL com base na sua frequência de mudanças. Se você atualiza pacotes frequentemente, use um TTL mais curto (ex.: 60–120 segundos). Se os pacotes são estáveis, o padrão de 600 segundos é apropriado.
- Esteja ciente do atraso do cache. Após atualizar um pacote, a mudança pode levar até o TTL configurado para se propagar. Se você precisa de efeito imediato, reinicie o serviço ou reduza temporariamente o TTL.
6. Use valores numéricos corretos
Todos os valores financeiros no Fees Engine devem ser expressos como strings usando o tipo
numeric. Isso previne erros de precisão de ponto flutuante que são comuns com aritmética decimal.
- Sempre envie valores como strings, inclusive números inteiros (ex.:
"100"e não100). - Nunca use tipos de ponto flutuante para cálculos monetários na sua camada de integração.
- Esteja ciente de que divisões de taxas envolvendo dízimas periódicas (ex.: dividir R$ 10 entre 3 contas) são automaticamente ajustadas pelo motor para manter os totais do ledger exatos.
7. Use soft delete para auditabilidade
Quando você exclui um pacote de taxas, o Fees Engine o marca com um timestamp
deletedAt em vez de removê-lo do banco de dados. Isso preserva a trilha de auditoria para transações históricas que referenciaram esse pacote.
- Não dependa do hard delete para pacotes de taxas em produção. Transações históricas podem referenciar pacotes excluídos para conciliação.
- Revise periodicamente os pacotes excluídos se seu banco de dados crescer significativamente. Estratégias de arquivamento podem ajudar a gerenciar o armazenamento sem perder capacidade de auditoria.
8. Monitore o Fees Engine em produção
O Fees Engine suporta OpenTelemetry para traces e métricas. Habilite-o para obter visibilidade do desempenho e comportamento dos cálculos de taxas.
- Monitore os endpoints de saúde. O Fees Engine expõe
/healthpara verificações de readiness e liveness (porta padrão: 4002). - Configure alertas para latência alta sustentada nos cálculos de taxas, o que pode indicar contenção no banco de dados ou configuração incorreta do cache.
- Monitore o MongoDB: uso do pool de conexões, espaço em disco e saúde da replicação. O valor padrão de
MONGO_MAX_POOL_SIZEé 1000. - Revise o uso de recursos dos pods. Os limites padrão são 200m CPU / 256Mi de memória. Ajuste com base nos seus padrões de tráfego e comportamento de autoescalamento.
9. Mantenha as versões compatíveis
Antes de atualizar o Fees Engine:
- Consulte a tabela de compatibilidade de versões para confirmar compatibilidade com sua versão do Midaz Core.
- Sempre atualize o Midaz Core primeiro, depois o Fees Engine.
- Faça backup dos seus dados do MongoDB e valores de Helm antes de qualquer atualização maior.
- Teste a atualização em um ambiente de staging antes de aplicá-la em produção.
10. Revise as recomendações de segurança
O Fees Engine processa dados financeiros e integra com operações do ledger do Midaz. Certifique-se de que seu deploy siga as Recomendações de segurança da plataforma, que cobrem:
- Segmentação de rede e Arquitetura Zero Trust
- Gerenciamento e rotação de secrets (incluindo
LICENSE_KEYe credenciais do banco de dados) - Aplicação de TLS 1.2+ para todas as comunicações
- Configuração de RBAC via Access Manager
- Gerenciamento de patches e varredura de vulnerabilidades

