Pular para o conteúdo
← TODOS OS PROJETOS
Financeiro e riscoAssociação Recreativa dos Tangarás · set/2026 — hojeEm curso

Cadastro, cobrança e portaria de um clube num sistema só

Cerca de 2.400 pessoas frequentam a associação, e toda a operação passava por uma pessoa só e oito ferramentas soltas — o cadastro num sistema de terceiro, o livro-caixa num programa descontinuado, a cobrança num WhatsApp pessoal. Nenhuma delas era da associação.

8 → 1
ferramentas soltas mapeadas no diagnóstico — sistema desktop, livro-caixa, planilha, WhatsApp, papel — que o sistema novo foi desenhado para unificar
17 dias
do primeiro commit até as passagens reais da portaria chegarem ao sistema, em paralelo ao sistema antigo
460+
testes automatizados rodando em todo pull request, num projeto com um mantenedor só

O CLIENTE

Um clube de 1964 operado por uma pessoa

A Associação Recreativa dos Tangarás é o clube de Potirendaba, no interior de São Paulo — a cidade onde eu moro. Fundada em 1964, tem piscina, natação e karatê, cerca de 2.400 pessoas com direito de uso entre titulares e dependentes, e um histórico de quase dez mil cadastros acumulados em seis décadas.

Tudo isso passava por uma pessoa só: a secretaria. Ela cadastrava, cobrava, dava baixa nos pagamentos, conferia o caixa e atendia o sócio. E fazia isso em oito lugares diferentes.

A associação me procurou para trocar o sistema financeiro. O que ela precisava era maior do que isso.

DIAGNÓSTICO OPERACIONAL

Como era antes

O levantamento começou com uma entrevista longa com a secretaria e dezesseis prints de tela. O mapa que saiu dali:

  • Um sistema desktop antigo para cadastro, parcelas e boletos, que dependia de ligar um “servidor” local e passava por várias telas a cada operação.
  • Um segundo módulo do mesmo fornecedor só para o débito automático e para dar baixa, à mão, nos boletos emitidos em outro banco.
  • Um livro-caixa num programa descontinuado, instalado numa máquina só — de onde o contador tirava o relatório da prestação de contas.
  • Uma planilha paralela, porque ninguém confiava no livro-caixa.
  • O WhatsApp pessoal da secretaria para cobrança, avisos e inscrição em torneio.
  • Papel para ficha de sócio, contrato (um arquivo de Word por vez) e inscrição de evento.
  • O Pix, que tinha sido cortado porque não dava para saber quem pagou — a esposa pagava o título do marido e o dinheiro chegava sem dono.
  • A portaria, com catraca e leitores faciais amarrados ao sistema antigo.

Lançar e corrigir uma parcela levava cerca de um minuto. Duas fontes de boleto geravam baixa manual todo dia. Advertência e suspensão de sócio não ficavam registradas em lugar nenhum.

Mas a dor de verdade não era a quantidade de telas. O clube não era dono da própria informação. O banco de dados ficava com o fornecedor, o caixa num programa sem suporte, a cobrança no celular de uma pessoa. Isso não era falha de quem operava — era uma pessoa segurando sozinha o que uma instituição de seis décadas deveria ter estruturado.

O MÉTODO

Entrevista primeiro, especificação depois, código por último

Eu não conhecia gestão de clube. Por isso o projeto começou ao contrário do que costuma começar: antes da primeira linha de código, oito documentos — diagnóstico do sistema atual, requisitos por módulo com identificador e prioridade, arquitetura com as decisões registradas, roteiro por etapas, perguntas abertas com dono, plano de qualidade, um briefing jurídico sobre biometria e um red team de segurança e LGPD feito sobre o desenho, antes de existir sistema para atacar. Quase cinquenta riscos mapeados ali viraram requisitos do módulo de segurança.

Depois vieram outros seis, conforme o projeto andou — entre eles uma leitura do estatuto social confrontada com o que o software antigo fazia, e o levantamento em campo dos equipamentos da portaria.

Cada funcionalidade nova segue o mesmo trilho: uma conversa para fechar o desenho, uma spec escrita e aprovada, um plano quebrado em tarefas pequenas, e a execução por agentes de IA — cada tarefa implementada, revisada e só então integrada. O que a revisão encontra e não é corrigido na hora fica registrado como pendência consciente, com o custo de estar errado escrito ao lado.

ENGENHARIA E ARQUITETURA

O que eu fiz

Um sistema web único, em TypeScript de ponta a ponta — API em NestJS, front em React, PostgreSQL —, organizado em módulos.

Cadastro. Titular e dependente vivem na mesma tabela de pessoa: transferir a titularidade (por falecimento, por exemplo) é trocar o papel do vínculo, não mover a pessoa de lugar. A regra de dependência segue o estatuto, e o que foge dela só entra como exceção justificada e auditada. Ciclo de vida completo do título: desligar, reativar, transferir.

Atualização cadastral por link. O sócio recebe um link único, revisa os próprios dados, anexa documentos e envia a foto para o reconhecimento facial pelo celular. Nada vai direto para o cadastro: tudo cai numa fila, e a secretaria aprova.

Financeiro e tesouraria. Dinheiro guardado em centavos inteiros, nunca em número quebrado. Nada financeiro é apagado: parcela se cancela com motivo, pagamento se estorna, e o próprio banco de dados recusa a exclusão. Geração de mensalidade e de planos em lote, e idempotente — rodar duas vezes não cobra duas vezes. E a importação do retorno bancário nos dois formatos que o clube usa — CNAB 400 do boleto e Febraban 150 do débito automático — no mesmo botão: o sistema reconhece o arquivo e dá a baixa.

Portaria. Um agente de campo — um executável que roda como serviço do Windows na rede do clube, com instalador próprio — conversa com os leitores faciais e com a API. Quando a secretaria aprova uma foto, dá baixa numa parcela ou desliga um título, o leitor é atualizado sozinho. O painel da portaria mostra as passagens em tempo real, avisa quando um leitor sai do ar, e o histórico de acesso de cada pessoa junta o sistema novo aos anos do antigo.

Auditoria e segurança. Toda ação sensível grava autor, data e motivo numa trilha que só aceita inserção — não existe apagar, nem para o administrador. Toda rota exige sessão por padrão, o acesso é por perfil, o monitoramento de erro não leva nenhum dado pessoal para o log, e a foto facial fica cifrada no banco.

Por baixo de tudo, um CI que roda formatação, tipos, testes unitários e de integração com Postgres, checagem de migration, varredura de segredos e auditoria de dependências em todo pull request. A demonstração inteira usa dado fictício — dado real de sócio nunca entra em ambiente de desenvolvimento, de teste ou em ferramenta de IA.

REGRAS QUE NÃO SE NEGOCIAM

O que nenhum agente pode simplificar

Construir com IA nessa velocidade só funciona se existir um chão que não se mexe. Neste projeto, ele é uma lista curta, escrita no próprio repositório, que todo agente lê antes de qualquer tarefa:

  • Regra de negócio fica na API, nunca no front nem em ferramenta de automação.
  • Dinheiro é inteiro, em centavos.
  • Nada financeiro é excluído.
  • A trilha de auditoria só aceita inserção.
  • Toda rota nega por padrão; rota pública exige justificativa no pull request.
  • A baixa de pagamento nunca sai do corpo de um webhook: o sistema reconsulta o banco por um canal autenticado e só baixa o que a reconsulta confirmar.
  • A mensagem de bloqueio na portaria é neutra — “procure a secretaria”. O motivo só aparece para quem tem perfil para ver.
  • Só dado fictício fora de produção.

A regra da portaria parece detalhe e não é: numa cidade pequena, a catraca anunciar que alguém está com a mensalidade atrasada é cobrança vexatória, na frente de quem estiver na fila.

RESULTADOS

Onde está hoje

Em quatro semanas, com um mantenedor: cadastro completo, financeiro, tesouraria, relatórios, auditoria, atualização cadastral por link e o controle de acesso integrado aos leitores da portaria.

A gestão roda em demonstração, com dado fictício, enquanto a migração é preparada. A portaria já está em campo: as passagens reais chegam ao sistema desde o 17º dia de projeto, em operação paralela — o sistema antigo continua decidindo a catraca até o novo provar que acerta.

O que ainda não está resolvido, e eu não vou chamar de pronto:

  • A migração do legado depende de decisões que são da diretoria, não do código — a principal é o que fazer com os cadastros que não cabem na regra do estatuto.
  • A cobrança por API direta com os bancos depende de liberação externa, que demora.
  • O app nativo do associado está especificado, não construído.
  • Nada do sistema antigo é desligado antes de um ciclo inteiro de cobrança batendo com o banco e com o contador.

DINÂMICA DE OPERAÇÃO

Uma coisa que só o dado mostrou

No diagnóstico, a pergunta “quem tem acesso ao clube?” tinha resposta simples: sócio e dependente. O banco antigo contava outra história. Os funcionários estavam cadastrados como dependentes da diretoria — o único jeito que existia de fazer alguém passar na catraca.

Funcionou por anos, e quebraria no primeiro dia do sistema novo: a regra de dependência do estatuto recusaria todos eles na portaria. E misturar as duas coisas contamina o resto — funcionário não paga mensalidade, demissão não é o mesmo fluxo que a saída de um dependente, e a base legal para tratar o dado dele é o contrato de trabalho, não a relação associativa.

Funcionário virou entidade própria, com vínculo, ponto informativo de entrada e saída e uma regra de acesso que o reconhece antes de procurar um título. O remendo que dá certo no sistema antigo é exatamente o que derruba a virada para o novo.

O QUE EU APRENDI

A regra que todo mundo no clube dava como certa — filho é dependente até 21 anos — não estava no estatuto. Estava num parâmetro gravado no banco do software antigo, e a prática passou anos seguindo o programa. Antes de migrar qualquer dado, eu pergunto de onde veio cada número que todo mundo sabe. Às vezes a resposta é: de uma tela de configuração.

OUTROS PROJETOS DA MESMA DOR

PRÓXIMO PASSO

Tem um problema parecido na sua operação?