Pular para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt

Use this file to discover all available pages before exploring further.

A configuração do plugin Bank Transfer acontece em três níveis. A maioria das decisões de negócio pode ser alterada em tempo de execução sem reiniciar o serviço.

Níveis de configuração


NívelQuem gerenciaO que controlaRequer reinicialização?
Infraestrutura (variáveis de env)DevOpsURLs, credenciais, autenticação, timeoutsSim
Configurações do tenant (Admin API)Time de produtoLimites, política de tarifas, sobrescritas de horárioNão
Configurações de conta (Admin API)Time de produtoLimites e restrições por contaNão

Decisões de negócio que você pode configurar


Estas são as configurações que GPMs e times de produto se importam. Todas são gerenciadas via Admin API em tempo de execução — sem necessidade de deploy.

Limites de transferência

Defina tetos de volume diário e mensal em dois níveis:
  • Por tenant — aplica-se a todas as transferências da organização
  • Por conta — aplica-se a uma conta específica do usuário final (sobrescreve os padrões do tenant)
Os limites cobrem tanto o valor total quanto o número de transações. Defina-os para gerenciar riscos e atender aos requisitos do BACEN.

Política de tarifas

Controle se o plugin cobra tarifa em transferências TED OUT, TED IN e P2P. As regras de tarifa são definidas no Fees Engine e aplicadas por organização. Consulte Fees Engine para detalhes de configuração.

Fail-open vs. fail-closed

Se o serviço de cálculo de tarifas estiver indisponível no momento de uma transferência, você tem duas opções:
  • Fail-open — permite que a transferência prossiga sem cobrar tarifa
  • Fail-closed — bloqueia a transferência até que o serviço de tarifas esteja disponível novamente
O padrão é fail-closed. Altere isso por organização via Admin API.

Recebimento de TED IN

Transferências recebidas estão desabilitadas por padrão. Habilite o TED IN por organização assim que suas credenciais JD SPB estiverem configuradas e o worker de polling estiver ativo.

Sobrescritas de horários de funcionamento

O plugin aplica a janela de funcionamento do TED do BACEN por padrão. Você pode configurar janelas personalizadas por tenant — por exemplo, restringindo transferências apenas ao horário comercial — dentro dos limites do BACEN.

Configuração de infraestrutura


Esta seção é para times de DevOps. Essas variáveis são definidas no momento do deployment e requerem reinicialização do serviço para entrar em vigor.

Aplicação

VariávelPadrãoObrigatórioDescrição
ENV_NAMEdevelopmentNãoAmbiente (development, staging, production)
LOG_LEVELinfoNãoVerbosidade do log (debug, info, warn, error)
DEPLOYMENT_MODEbyocNãoSabor de deployment. byoc = Bring Your Own Cloud (single-tenant, gerenciado pelo operador). Aciona comportamentos internos SaaS vs. BYOC.
SERVER_ADDRESS:8080NãoEndereço e porta do servidor HTTP
HTTP_BODY_LIMIT_BYTES1048576NãoTamanho máximo do corpo da requisição HTTP em bytes
INFRA_CONNECT_TIMEOUT_SEC30NãoTimeout de conexão para serviços de infraestrutura em segundos
ALLOW_PRIVATE_UPSTREAMSfalseNão⚠️ Permite que adaptadores de saída (CRM, Fees, JD, Midaz) resolvam para IPs RFC1918/loopback. O padrão false é fail-closed: produção bloqueia pivot DNS para o espaço privado. Habilite em dev ou em BYOC in-cluster, onde upstreams legitimamente vivem em IPs privadas. Endpoints de metadados em cloud permanecem bloqueados independentemente desse flag.

TLS

VariávelPadrãoObrigatórioDescrição
SERVER_TLS_CERT_FILE-NãoCaminho para o arquivo de certificado TLS. Deve ser definido junto com SERVER_TLS_KEY_FILE.
SERVER_TLS_KEY_FILE-NãoCaminho para o arquivo de chave privada TLS. Deve ser definido junto com SERVER_TLS_CERT_FILE.
TLS_TERMINATED_UPSTREAMfalseNãoDefina como true quando o TLS é terminado por um load balancer ou proxy reverso.

Headers de proxy

Usados quando o serviço roda atrás de um load balancer ou proxy reverso. Necessários para extrair o IP real do cliente para rate limiting e logs de auditoria.
VariávelPadrãoObrigatórioDescrição
SERVER_PROXY_HEADER-NãoHeader HTTP que carrega o IP real do cliente (ex: X-Forwarded-For, X-Real-IP). Vazio desabilita o parsing do header de proxy.
SERVER_TRUSTED_PROXIES-Se proxy header definidoLista separada por vírgula de IPs/CIDRs de proxies confiáveis. Obrigatório quando SERVER_PROXY_HEADER está definido para evitar spoofing de IP.

CORS

VariávelPadrãoObrigatórioDescrição
CORS_ALLOWED_ORIGINShttp://localhost:3000NãoLista de origens permitidas separadas por vírgula. Wildcards (*) e origens localhost são rejeitados em produção.
CORS_ALLOWED_METHODSGET,POST,PUT,PATCH,DELETE,OPTIONSNãoMétodos HTTP permitidos.
CORS_ALLOWED_HEADERSOrigin,Content-Type,Accept,Authorization,X-Request-ID,X-Organization-Id,X-IdempotencyNãoHeaders de requisição permitidos.

Autenticação

Este plugin delega a autorização ao plugin-auth. Configure a conexão com as variáveis abaixo.
VariávelPadrãoObrigatórioDescrição
PLUGIN_AUTH_ENABLEDfalseNãoHabilita a autorização via plugin-auth. Defina como true em produção.
PLUGIN_AUTH_ADDRESS-Se habilitadoURL do serviço plugin-auth. Deve usar HTTPS em produção.
PLUGIN_AUTH_CLIENT_IDplugin-br-bank-transferSe habilitadoOAuth client ID usado por este plugin.
PLUGIN_AUTH_CLIENT_SECRET-Se habilitadoOAuth client secret usado por este plugin.
AUTH_CACHE_TTL_SEC60NãoDuração (em segundos) para armazenar em cache as decisões de autorização. Decisões negadas ficam em cache por TTL/4.
Quando PLUGIN_AUTH_ENABLED=true, PLUGIN_AUTH_ADDRESS deve usar HTTPS em ambientes de produção. Endereços HTTP são rejeitados na inicialização.

Test admin (apenas não-produção)

BTF_TEST_ADMIN_ENABLED deve permanecer false em produção. Expõe endpoints administrativos apenas de teste (ex: POST /admin/test/circuit-breakers/reset) que não têm tenant e burlam a autenticação de produção. Habilitado apenas pelo mock-lane do docker-compose para testes E2E; qualquer deployment com esse flag em true fora de uma rede de testes isolada é uma má configuração.
VariávelPadrãoObrigatórioDescrição
BTF_TEST_ADMIN_ENABLEDfalseNão⚠️ Expõe endpoints administrativos apenas de teste. Deve permanecer false em produção.
BTF_TEST_ADMIN_TOKEN-Se admin habilitadoToken requerido quando BTF_TEST_ADMIN_ENABLED=true. Enviado no header X-Test-Admin-Token. Intencionalmente separado da auth de produção (superfície apenas de teste, sem tenant).

Rate limiting

VariávelPadrãoObrigatórioDescrição
RATE_LIMIT_ENABLEDtrueNãoHabilita rate limiting por cliente. Forçado para true em produção.
RATE_LIMIT_MAX100NãoMáximo de requisições por janela por cliente.
RATE_LIMIT_EXPIRY_SEC60NãoDuração da janela deslizante em segundos.

Idempotência

VariávelPadrãoObrigatórioDescrição
IDEMPOTENCY_RETRY_WINDOW_SEC300NãoJanela de tempo (em segundos) durante a qual uma chave de idempotência é válida.
IDEMPOTENCY_REQUIRE_REDISfalseNãoQuando true, rejeita requisições se o Redis estiver indisponível em vez de usar fallback.
DUPLICATE_GUARD_TTL_SEC300NãoTTL (em segundos) para a janela de duplicate-guard no Redis. Complementa IDEMPOTENCY_RETRY_WINDOW_SEC; este TTL controla o tempo de vida da entrada do duplicate-guard.

Multi-tenancy

VariávelPadrãoObrigatórioDescrição
MULTI_TENANT_ENABLEDfalseNãoHabilita multi-tenancy em nível de infraestrutura com bancos de dados isolados por tenant.
DEFAULT_TENANT_ID11111111-1111-1111-1111-111111111111NãoUUID de tenant de fallback quando auth está desabilitado. Deve ser um UUID válido.
DEFAULT_TENANT_SLUGdefaultNãoIdentificador slug do tenant padrão.
DEFAULT_ORGANIZATION_ID-NãoID de organização usado em modo single-tenant (quando MULTI_TENANT_ENABLED=false). Complementa DEFAULT_TENANT_ID.
AWS_REGION-Se backend de secretos AWSRegião AWS para leituras de secretos por tenant no Secrets Manager. Obrigatório quando MULTI_TENANT_ENABLED=true e o backend de secretos é AWS.
MULTI_TENANT_INTEGRATION_SECRET_NAME_TEMPLATEtenants/{env}/{tenantId}/{applicationName}/integration/configurationNãoTemplate do nome do secret no AWS Secrets Manager. Placeholders: {env}, {tenantId}, {applicationName}.
TENANT_IDS-NãoLista de UUIDs de tenant permitidos, separados por vírgula. Esta variável tem dupla função: (1) allowlisting de requisições — requisições de tenants fora desta lista são rejeitadas, e (2) escopo de licenciamento — somente estes tenants são considerados licenciados. Deixe sem definir para permitir todos os tenants configurados. Também referenciada em Licença.
MULTI_TENANT_URL-Sim (quando habilitado)URL da API HTTP do Tenant Manager.
MULTI_TENANT_REDIS_HOST-NãoHost Redis para descoberta de tenants via Pub/Sub.
MULTI_TENANT_REDIS_PORT6379NãoPorta do Redis para Pub/Sub.
MULTI_TENANT_REDIS_PASSWORD-NãoSenha do Redis para Pub/Sub.
MULTI_TENANT_REDIS_TLSfalseNãoHabilita TLS para conexão Redis Pub/Sub.
MULTI_TENANT_TIMEOUT30NãoTimeout HTTP em segundos para chamadas à API do Tenant Manager.
MULTI_TENANT_MAX_TENANT_POOLS100NãoMáximo de pools de conexão simultâneos por tenant.
MULTI_TENANT_IDLE_TIMEOUT_SEC300NãoTimeout de inatividade em segundos antes de descartar um pool de tenant.
MULTI_TENANT_CIRCUIT_BREAKER_THRESHOLD5NãoNúmero de falhas antes do circuit breaker abrir.
MULTI_TENANT_CIRCUIT_BREAKER_TIMEOUT_SEC30NãoTimeout de recuperação em segundos do circuit breaker.
MULTI_TENANT_SERVICE_API_KEY-Sim (quando habilitado)Chave de API para o endpoint /settings do Tenant Manager.
MULTI_TENANT_CACHE_TTL_SEC120NãoTTL em segundos do cache in-memory de configuração de tenant. Recarregável via systemplane API.
MULTI_TENANT_CONNECTIONS_CHECK_INTERVAL_SEC30NãoIntervalo em segundos para revalidação assíncrona de configurações de pool. Somente bootstrap (não recarregável).
BYOC single-tenant:
DEFAULT_TENANT_ID=<seu-tenant-uuid>
# Opcional: restringir a UUIDs de tenant específicos
TENANT_IDS=<uuid1>,<uuid2>
SaaS multi-tenant:
MULTI_TENANT_ENABLED=true
MULTI_TENANT_URL=http://tenant-manager:4003
MULTI_TENANT_SERVICE_API_KEY=sua-api-key
MULTI_TENANT_REDIS_HOST=redis.example.com

PostgreSQL

VariávelPadrãoObrigatórioDescrição
POSTGRES_HOSTlocalhostSimHost primário do PostgreSQL.
POSTGRES_PORT5432NãoPorta primária do PostgreSQL.
POSTGRES_USERplugin-br-bank-transferSimUsuário do banco de dados.
POSTGRES_PASSWORD-SimSenha do banco de dados. Obrigatório em produção.
POSTGRES_DBplugin-br-bank-transferSimNome do banco de dados.
POSTGRES_SSLMODErequireNãoModo SSL. disable é rejeitado em produção.
POSTGRES_MAX_OPEN_CONNS25NãoMáximo de conexões abertas.
POSTGRES_MAX_IDLE_CONNS5NãoMáximo de conexões ociosas.
POSTGRES_CONN_MAX_LIFETIME_MINS30NãoTempo máximo de vida da conexão em minutos.
POSTGRES_CONN_MAX_IDLE_TIME_MINS5NãoTempo máximo ocioso da conexão em minutos.
POSTGRES_CONNECT_TIMEOUT_SEC10NãoTimeout de conexão em segundos.
MIGRATIONS_PATHmigrationsNãoCaminho para arquivos de migração.

Réplica PostgreSQL

Configure uma réplica de leitura para descarregamento de consultas. Todos os campos usam valores primários como fallback quando não definidos.
VariávelPadrãoObrigatórioDescrição
POSTGRES_REPLICA_HOST-NãoHost da réplica. Não definido = sem réplica.
POSTGRES_REPLICA_PORT-NãoPorta da réplica.
POSTGRES_REPLICA_USER-NãoUsuário da réplica.
POSTGRES_REPLICA_PASSWORD-NãoSenha da réplica.
POSTGRES_REPLICA_DB-NãoNome do banco da réplica.
POSTGRES_REPLICA_SSLMODE-NãoModo SSL da réplica.

MongoDB

O MongoDB é necessário para a persistência de eventos de auditoria de transferências. O serviço não iniciará sem uma conexão MongoDB válida.
VariávelPadrãoObrigatórioDescrição
MONGO_ENABLEDtrueSimHabilita a conexão MongoDB. Deve ser true em todos os ambientes.
MONGO_URI-SimString de conexão MongoDB (ex: mongodb://user:pass@host:27017). Deve incluir credenciais e TLS em produção.
MONGO_DATABASE-SimNome do banco de dados MongoDB.
MONGO_MAX_POOL_SIZE25NãoTamanho máximo do pool de conexões.
MONGO_SERVER_SELECTION_TIMEOUT_MS3000NãoTimeout de seleção de servidor em milissegundos.
MONGO_HEARTBEAT_INTERVAL_MS10000NãoIntervalo de heartbeat em milissegundos.
MONGO_TLS_CA_CERT-NãoCertificado CA codificado em base64 para TLS do MongoDB. Use quando o MongoDB exigir TLS com CA personalizado (ex: Atlas, instâncias privadas com certs autoassinados).

Redis

VariávelPadrãoObrigatórioDescrição
REDIS_HOSTlocalhost:6379SimHost e porta do Redis.
REDIS_MASTER_NAME-NãoNome do master Redis Sentinel (se usando Sentinel).
REDIS_PASSWORD-NãoSenha do Redis (se autenticação habilitada).
REDIS_DB0NãoNúmero do banco de dados Redis.
REDIS_PROTOCOL3NãoVersão do protocolo Redis (2 ou 3).
REDIS_TLSfalseNãoHabilita TLS para conexões Redis.
REDIS_CA_CERT-NãoCertificado CA para TLS Redis.
REDIS_POOL_SIZE10NãoTamanho do pool de conexões.
REDIS_MIN_IDLE_CONNS2NãoMínimo de conexões ociosas.
REDIS_READ_TIMEOUT_MS3000NãoTimeout de leitura em milissegundos.
REDIS_WRITE_TIMEOUT_MS3000NãoTimeout de escrita em milissegundos.
REDIS_DIAL_TIMEOUT_MS5000NãoTimeout de conexão em milissegundos.
Redis é uma dependência obrigatória. Se o Redis estiver indisponível na inicialização ou se tornar inacessível em tempo de execução, o serviço reportará como DOWN para o probe de readiness da orquestração e parará de aceitar requisições. O Redis é necessário para o cache de chaves de idempotência e detecção de duplicatas.

Conexão JD SPB

Essas variáveis são obrigatórias para deployments BYOC. No modo SaaS, a Lerian gerencia a conexão com o JD.
VariávelPadrãoObrigatórioDescrição
JD_BASE_URL-Se BYOCURL base da API JD SPB.
JD_SOAP_PATH/soapNãoCaminho do endpoint SOAP JD.
JD_ORIGIN_ISPB-Se BYOCCódigo ISPB de origem.
JD_LEGACY_CODE-Se BYOCCódigo legado JD (máx. 10 chars).
JD_USER_CODE-Se BYOCCódigo de usuário JD (máx. 10 chars).
JD_PASSWORD-Se BYOCSenha JD (criptografada em repouso).
JD_PRIVATE_KEY_PEM-Se BYOCConteúdo PEM da chave privada RSA para assinatura XML.
JD_PUBLIC_KEY_PEM-NãoPEM de chave pública para validar assinaturas em respostas do JD. Obrigatório quando JD_VALIDATE_EXTERNAL_SIGNATURE=true.
JD_PRIVATE_KEY_KEYINFO-NãoBloco XML <KeyInfo> embutido na assinatura SOAP (ex: cert X509 codificado em base64). Obrigatório para o envelope WS-Security quando o JD demanda identificação por certificado.
JD_SIGNING_MODElocal_pemNãoModo de assinatura SOAP. local_pem assina localmente com JD_PRIVATE_KEY_PEM; external_signer delega a um serviço remoto via JD_EXTERNAL_SIGNER_URL.
JD_VALIDATE_EXTERNAL_SIGNATUREtrueNãoValida assinaturas em respostas do JD (ou do assinador externo). O padrão true mantém a validação ativa. Defina como false apenas para debug/sandbox sem PKI configurado.
JD_EXTERNAL_SIGNER_URL-Se JD_SIGNING_MODE=external_signerURL base do serviço de assinatura externo.
JD_EXTERNAL_SIGNER_AUTH_TOKEN-NãoBearer token enviado no header Authorization para chamadas ao assinador externo.
JD_EXTERNAL_SIGNER_TIMEOUT_MS5000NãoTimeout (em milissegundos) para chamadas ao assinador externo.
JD_BACEN_ROUTING_ISPB00038166NãoISPB de roteamento do BACEN (o ISPB do JD/JDSPB). O padrão 00038166 é o ISPB do banco JD. Altere apenas se o operador rotear por um PSP diferente.
JD_TIMEOUT_MS8000NãoTimeout de requisições SOAP em milissegundos.
JD_MAX_RETRIES3NãoMáximo de tentativas de retry para requisições JD.
JD_SANDBOX_MODEfalseNãoHabilita modo sandbox JD. Rejeitado em produção.

Polling JD

VariávelPadrãoObrigatórioDescrição
JD_POLLING_ENABLEDfalseNãoHabilita worker de polling TED IN.
JD_POLL_INTERVAL_SECONDS30NãoFrequência (em segundos) de verificação de TEDs recebidos.
JD_POLL_MAX_MESSAGES_PER_CYCLE50NãoMáximo de mensagens processadas por ciclo de polling.
JD_POLL_MAX_RETRIES3NãoMáximo de tentativas de retry por ciclo de polling.
JD_POLL_RECOVERY_BATCH_SIZE200NãoTamanho do lote para polling de recuperação.
JD_POLL_DISABLE_OPERATING_HOURS_WINDOWtrueNãoQuando true, o poller RecebeMensagem ignora a janela de horário de funcionamento (TRANSFER_OPERATING_OPEN/CLOSE) e roda continuamente. O padrão é true porque o JD pode entregar mensagens fora da janela de transferência do operador.
BTF_TED_IN_RETORNO_FILTER-NãoFiltro TpRetorno separado por vírgula aplicado server-side pelo RecebeMensagem. Vazio = sem filtro (busca P/R/E/C). Nota: a spec do JD codifica TpRetorno como um único elemento, então apenas o primeiro valor é honrado hoje.
JD_POLLING_ENABLED é desabilitado por padrão para deployments mais seguros. Antes de habilitá-lo, certifique-se de que DEFAULT_TENANT_ID (ou Pool Manager) esteja configurado com um UUID válido. O polling JD não é suportado quando MULTI_TENANT_ENABLED=true.

Serviços externos (Midaz)

VariávelPadrãoObrigatórioDescrição
MIDAZ_BASE_URL-SimURL base do serviço Midaz.
MIDAZ_TRANSACTION_URL-SimURL do serviço de transações Midaz.
MIDAZ_TIMEOUT_MS3000NãoTimeout de requisições Midaz em milissegundos.
MIDAZ_MAX_RETRIES3NãoTentativas de retry em falha do Midaz.
MIDAZ_OTEL_ENABLEDtrueNãoHabilita tracing OpenTelemetry para chamadas Midaz.
MIDAZ_DEBUGfalseNãoHabilita logging de debug para chamadas Midaz. Rejeitado em produção.
MIDAZ_AUTH_ENABLEDfalseNãoHabilita autenticação M2M para Midaz.
MIDAZ_AUTH_ADDRESS-Se authURL do serviço de autenticação para tokens M2M Midaz.
MIDAZ_CLIENT_ID-Se authOAuth client ID para M2M Midaz.
MIDAZ_CLIENT_SECRET-Se authOAuth client secret para M2M Midaz.
MIDAZ_BREAKER_FAILURES3NãoThreshold de falhas do circuit breaker.
MIDAZ_BREAKER_TIMEOUT_SECONDS30NãoTimeout de recuperação do circuit breaker em segundos.
BTF_MIDAZ_CB_ENABLEDtrueNãoKill switch para o circuit breaker do client Midaz. Quando false, chamadas ao Midaz pulam o breaker (timeouts e retries permanecem ativos). Útil quando flakes intermitentes estão amplificando para 500s sustentados.

Serviços externos (CRM)

VariávelPadrãoObrigatórioDescrição
CRM_BASE_URL-SimURL do serviço CRM.
CRM_TIMEOUT_MS2000NãoTimeout de requisições CRM em milissegundos.
CRM_MAX_RETRIES2NãoTentativas de retry em falha do CRM.
CRM_AUTH_ENABLEDfalseNãoHabilita autenticação M2M para CRM.
CRM_CLIENT_ID-Se authOAuth client ID para M2M CRM.
CRM_CLIENT_SECRET-Se authOAuth client secret para M2M CRM.
CRM_SENDER_LOOKUP_PATH_TEMPLATE-NãoTemplate de path para lookup do remetente no CRM (ex: /api/v1/accounts/{accountId}). Os placeholders são definidos pelo CRM do operador.
CRM_RECIPIENT_LOOKUP_PATH_TEMPLATE-NãoTemplate de path para lookup do destinatário no CRM.
CRM_HOLDER_LOOKUP_PATH_TEMPLATE-NãoTemplate de path para lookup do titular da conta no CRM.

Serviços externos (Fees)

BTF_FEE_ENABLED é a chave mestra. Quando false (padrão), nenhum adaptador de Fees é construído e cada transferência segue com tarifa=0 sem chamada HTTP. As demais variáveis FEES_* só têm efeito quando BTF_FEE_ENABLED=true.
VariávelPadrãoObrigatórioDescrição
BTF_FEE_ENABLEDfalseNãoChave mestra para a integração com plugin-fees. Quando false, nenhum adaptador de Fees é construído e todas as transferências rodam com tarifa=0 sem chamadas HTTP. Operadores que rodam plugin-fees devem setar como true explicitamente.
FEES_BASE_URL-Se habilitadoURL do serviço Fees Engine.
FEES_TIMEOUT_MS2000NãoTimeout de requisições de tarifas em milissegundos.
FEES_MAX_RETRIES2NãoTentativas de retry em falha do serviço de tarifas.
FEES_FAIL_CLOSED_DEFAULTfalseNãoModo de falha padrão. true = bloqueia transferência quando tarifas indisponível.
FEES_MAX_FEE_AMOUNT_CENTS99999999NãoValor máximo de tarifa em centavos. Respostas que excedem esse valor são rejeitadas.
FEES_REFUND_ON_DEVOLUCAOfalseNãoQuando true, tarifas cobradas são reembolsadas em devoluções/reversões de TED. O padrão false mantém a tarifa retida mesmo na devolução.
FEES_AUTH_ENABLEDfalseNãoHabilita autenticação M2M para Fees.
FEES_CLIENT_ID-Se authOAuth client ID para M2M Fees.
FEES_CLIENT_SECRET-Se authOAuth client secret para M2M Fees.

Resiliência de Fees

BTF_FEES_TED_IN_FAIL_OPEN é true por padrão. Quando o plugin-fees está indisponível, TEDs recebidos são creditados com tarifa=0 (fail-open) para que os fundos cheguem ao cliente. Operadores com SLA que exige cobrança em todo crédito de entrada devem setar como false (fail-closed). TED OUT é incondicionalmente fail-closed independentemente desse flag — o débito do remetente é autoritativo.
VariávelPadrãoObrigatórioDescrição
BTF_FEES_TED_IN_FAIL_OPENtrueNão⚠️ Quando true, TED IN segue com tarifa=0 se o plugin-fees estiver inalcançável. Quando false, TED IN é bloqueado até que tarifas se recupere. TED OUT é sempre fail-closed.

Reconciliação

O worker de reconciliação coleta transferências pendentes que nunca receberam retorno do JD e as reconcilia contra o ledger.
VariávelPadrãoObrigatórioDescrição
BTF_RECONCILIATION_ENABLEDtrueNãoHabilita o motor de reconciliação interno. Quando false, transferências sem retorno do JD nunca são reconciliadas automaticamente.
BTF_RECONCILIATION_INTERVAL_SEC30NãoIntervalo (em segundos) entre ciclos de reconciliação.
BTF_RECONCILIATION_BATCH_SIZE20NãoNúmero máximo de transferências processadas por ciclo de reconciliação.
BTF_RECONCILIATION_MAX_ATTEMPTS10NãoMáximo de tentativas de reconciliação antes de marcar uma transferência como permanentemente falha.
BTF_RECONCILIATION_STALE_AFTER_SEC60NãoTempo (em segundos) após o qual uma transferência pendente é considerada obsoleta e elegível para reconciliação.
BTF_DLQ_ENABLEDtrueNãoPersiste mensagens JD não-parseáveis na tabela dead-letter jd_incoming_parse_failures. O padrão true é assim porque descartar mensagens silenciosamente nunca é seguro sob entrega at-most-once.

Calendário de feriados (BACEN/ANBIMA)

Alimenta o calendário de feriados bancários do BACEN usado pelo gate de horário de funcionamento e pelo clamp do TTL de iniciação. O banco de dados é a fonte da verdade; estas variáveis governam apenas o refresher agendado.
VariávelPadrãoObrigatórioDescrição
ANBIMA_HOLIDAY_SOURCE_URLhttps://www.anbima.com.br/feriados/arqs/feriados_nacionais.xlsNãoURL upstream para feriados BACEN/ANBIMA. O fetcher em tempo real ainda não está cabeado (uma seed estática para 2026–2028 é usada); operadores podem repontar para um mirror interno.
ANBIMA_FETCHER_ENABLEDtrueNãoLiga o refresher de feriados agendado. Quando false, o plugin se apoia em uma tabela bacen_holidays pré-populada.
ANBIMA_FETCHER_SCHEDULE03:00NãoHorário diário de disparo (HH:MM) do refresher. 03:00 fica fora do horário do BACEN e antes da janela das 06:30 abrir, evitando snapshots no meio de um refresh.
HOLIDAY_CACHE_TTL1hNãoTTL do cache in-process do calendário de feriados (formato time.ParseDuration: 1h, 30m, etc.). Reduza esse valor quando UPSERTs manuais precisarem se propagar mais rápido.

RabbitMQ

Eventos de ciclo de vida de transferência podem ser publicados no RabbitMQ para consumidores downstream.
VariávelPadrãoObrigatórioDescrição
RABBITMQ_ENABLEDfalseNãoHabilita publicação de eventos de ciclo de vida de transferência.
RABBITMQ_URL-Se habilitadoURL de conexão AMQP. Deve usar amqps:// fora de desenvolvimento.
RABBITMQ_EXCHANGEbank_transfer.lifecycleNãoNome do exchange para eventos de ciclo de vida.
RABBITMQ_ROUTING_KEY_PREFIXtransferNãoPrefixo da routing key para eventos publicados.
RABBITMQ_EVENT_SIGNING_SECRET-Se habilitadoSegredo HMAC para assinatura de eventos publicados. Mínimo 32 caracteres.
RABBITMQ_PUBLISH_TIMEOUT_MS5000NãoTimeout de publicação em milissegundos.
RABBITMQ_MAX_RETRIES3NãoMáximo de tentativas de republicação.
RABBITMQ_RETRY_BACKOFF_MS200NãoBackoff entre republicações em milissegundos.

Entrega de webhooks

A entrega de webhooks requer que o RabbitMQ esteja habilitado. O worker de webhook consome eventos de uma fila RabbitMQ e os entrega ao endpoint configurado.
VariávelPadrãoObrigatórioDescrição
WEBHOOK_ENABLEDfalseNãoHabilita entrega de webhooks. Requer RABBITMQ_ENABLED=true.
WEBHOOK_ENDPOINT_URL-Se habilitadoURL de destino. Deve usar HTTPS; IPs loopback/privados são rejeitados.
WEBHOOK_SIGNING_SECRET-Se habilitadoSegredo HMAC para assinar payloads de webhook. Mínimo 32 caracteres.
WEBHOOK_BROKER_EVENT_SIGNING_SECRET-NãoSegredo HMAC separado para verificar eventos do broker. Usa WEBHOOK_SIGNING_SECRET como fallback.
WEBHOOK_ALLOW_UNSIGNED_BROKER_EVENTSfalseNãoAceita temporariamente eventos não assinados do broker durante migração.
WEBHOOK_UNSIGNED_BROKER_EVENTS_GRACE_SEC0NãoPeríodo de graça (em segundos) para eventos não assinados. Deve ser > 0 quando eventos não assinados são permitidos.
WEBHOOK_QUEUE_NAMEtransfer.webhook.deliveryNãoNome da fila RabbitMQ para eventos de webhook.
WEBHOOK_DLQ_NAMEtransfer.webhook.dlqNãoFila de dead-letter para entregas de webhook falhas.
WEBHOOK_CONSUMER_TAGplugin-br-bank-transfer-webhookNãoTag de consumidor RabbitMQ.
WEBHOOK_PREFETCH_COUNT20NãoContagem de prefetch RabbitMQ.
WEBHOOK_DELIVERY_CONCURRENCY8NãoMáximo de entregas de webhook concorrentes por worker.
WEBHOOK_TIMEOUT_MS5000NãoTimeout de entrega HTTP em milissegundos.
WEBHOOK_MAX_RETRIES3NãoMáximo de tentativas de reentrega.
WEBHOOK_RETRY_BACKOFF_MS500NãoBackoff entre reentregas em milissegundos.

Limites de uso

VariávelPadrãoObrigatórioDescrição
USAGE_LIMITS_ENABLEDfalseNãoHabilita imposição de limites de uso por conta.
USAGE_LIMIT_DAILY_CENTS0NãoLimite diário padrão de transferência em centavos. Ao menos um limite deve ser > 0 quando habilitado.
USAGE_LIMIT_MONTHLY_CENTS0NãoLimite mensal padrão de transferência em centavos.

Horários de funcionamento

VariávelPadrãoObrigatórioDescrição
TRANSFER_OPERATING_OPEN06:30NãoHorário de abertura da janela de aceitação de transferências (HH:MM).
TRANSFER_OPERATING_CLOSE17:00NãoHorário de fechamento da janela de aceitação de transferências (HH:MM).
TRANSFER_OPERATING_TIMEZONEAmerica/Sao_PauloNãoFuso horário para avaliação dos horários de funcionamento.

Telemetria (OpenTelemetry)

VariávelPadrãoObrigatórioDescrição
ENABLE_TELEMETRYfalseNãoHabilita tracing e métricas OpenTelemetry.
OTEL_RESOURCE_SERVICE_NAMEplugin-br-bank-transferNãoNome do serviço OTel.
OTEL_LIBRARY_NAMEgithub.com/LerianStudio/plugin-br-bank-transferNãoNome da biblioteca de instrumentação OTel.
OTEL_RESOURCE_SERVICE_VERSION1.0.0NãoVersão do serviço OTel.
OTEL_RESOURCE_DEPLOYMENT_ENVIRONMENTdevelopmentNãoAmbiente de deployment OTel.
OTEL_EXPORTER_OTLP_ENDPOINTlocalhost:4317NãoEndpoint gRPC do coletor OTel.
DB_METRICS_INTERVAL_SEC15NãoIntervalo de coleta de métricas do banco em segundos.
RECONCILIATION_PENDING_ALERT_THRESHOLD5NãoThreshold de alerta para itens de reconciliação pendentes.
OTEL_TRACES_SAMPLER_ARG-NãoRazão de amostragem de traces (0.0–1.0). Sem definir usa o sampler padrão resolvido na inicialização da telemetria: 0.1 em produção, 1.0 em outros ambientes. Valores fora de (0,1] são clampeados para 1.0 para que uma má configuração não desabilite silenciosamente o tracing em produção.
BTF_METRICS_PROMETHEUS_ENABLEDfalseNãoExpõe um endpoint dedicado de scrape do Prometheus para as métricas btf.*. Quando true, o listener em BTF_METRICS_PROMETHEUS_ADDRESS é iniciado.
BTF_METRICS_PROMETHEUS_ADDRESS127.0.0.1:9090NãoEndereço de escuta do endpoint Prometheus /metrics. O padrão se vincula ao loopback para que um pod mal configurado não exponha métricas não autenticadas para a rede do cluster. Sobrescreva (ex: 0.0.0.0:9090) apenas atrás de uma NetworkPolicy ou sidecar.

Licença

VariávelPadrãoObrigatórioDescrição
LICENSE_KEY-Em produçãoChave de licença. Obrigatório em ambientes de produção.
LICENSE_SERVICE_ADDRESS-NãoURL do serviço de validação de licença.
TENANT_IDS-NãoMesma variável de Multi-tenancy. Lista de UUIDs de tenant separados por vírgula, usada tanto para allowlisting de requisições quanto para escopo de licenciamento.

Criptografia

Criptografia em nível de campo para dados sensíveis em repouso. Cada chave deve ser uma chave AES-256 de 32 bytes codificada em base64. Deixe em branco para desabilitar a criptografia do campo.
VariávelPadrãoObrigatórioDescrição
JD_INCOMING_RAW_XML_ENCRYPTION_KEY-NãoChave AES-256 para criptografia de payloads XML JD recebidos.
RECIPIENT_DETAILS_ENCRYPTION_KEY-NãoChave AES-256 para criptografia de detalhes do destinatário em repouso.

Configuração em tempo de execução (Admin API)


As configurações de nível de tenant e de conta são gerenciadas via Admin API — sem necessidade de reinicialização. As alterações entram em vigor imediatamente (sujeito ao TTL do cache para configurações de tenant). As configurações disponíveis incluem:
  • Limites de transferência (diário e mensal, por tenant e por conta)
  • Comportamento de tarifas (fail-open ou fail-closed quando o serviço de tarifas está indisponível)
  • Recebimento de TED IN (habilitado ou desabilitado por organização)
  • Sobrescritas de horários de funcionamento (janelas personalizadas dentro dos limites do BACEN)
Consulte a referência da Admin API para a lista completa de campos configuráveis e o formato das requisições.