1 Isolamento multi-tenant em nível de linha
Todos os dados carregam tenantId, e o acesso passa por um
guard central em vez de cada consulta repetir o filtro.
Por quê: num SaaS contábil, uma falha de isolamento significa
mostrar o dado fiscal de uma empresa para outra — o pior defeito
possível nesse domínio. Centralizar o filtro faz o esquecimento
acidental deixar de ser uma opção, e há testes de integração que
tentam ativamente cruzar a fronteira entre tenants
para provar que ela segura.
2 OCR assíncrono em worker dedicado
O upload apenas enfileira; um worker separado consome a fila
BullMQ/Redis, extrai o texto e grava o resultado.
Por quê: OCR de um PDF grande leva de segundos a minutos. Fazer
isso dentro da requisição significaria travar o upload, estourar
timeout do proxy e derrubar a experiência justamente quando o usuário
está enviando vários arquivos. Com fila, a resposta é imediata, o
processamento ganha retry automático e o pico de trabalho não
contamina o tempo de resposta do site.
3 Importação OFX com conciliação bancária
O extrato do banco entra como arquivo OFX e as transações são casadas
com os lançamentos do sistema, uma a uma.
Por quê: digitar extrato é o gargalo real do escritório e a
maior fonte de erro humano. Ler o formato que o banco já exporta
elimina a digitação e transforma conferência em decisão: o sistema
propõe o casamento, a pessoa confirma ou ignora.
4 Operação pensada como parte do produto
Duas réplicas da aplicação atrás do Nginx, pgbouncer na frente
do banco, seis rotinas agendadas de negócio e backup diário.
Por quê: aplicações Next.js abrem muitas conexões e o Postgres
não gosta disso — o pgbouncer concentra tudo num pool. Duas
réplicas permitem publicar versão nova sem janela de indisponibilidade.
E o backup roda todo dia às 02:00 porque sistema sem backup
testado é sistema que ainda não caiu.