Locação imobiliária
Analisar um candidato a inquilino é ler três documentos, conferir se o nome bate, procurar processos, consultar o bureau e decidir. É meia hora de corretor, por candidato, e ninguém faz isso no sábado à noite.
O AprovAI recebe os documentos no WhatsApp, extrai os dados com visão computacional, consulta processos e crédito, aplica sete regras de risco e devolve o parecer para o corretor — com o motivo de cada ponto perdido.
100score de risco
scoring.ts.
nenhum dado real
O caminho de uma análise
A ordem importa: cada passo só existe porque o anterior entregou alguma coisa. Se qualquer um falhar, a análise termina em revisão manual — nunca em aprovação.
webhook · Evolution API
O candidato manda RG, comprovante de renda e comprovante de residência na conversa. Cada mídia vira um Document com o tipo e o mime type registrados.
services/media
A mídia fica gravada como pending:<messageId> até ser baixada de fato — o arquivo só existe depois que a análise começa, e o registro é atualizado com o caminho real.
services/document-analysis
Claude Vision lê cada documento e devolve estrutura: nome, CPF, renda, endereço. O que sai daqui é o insumo de tudo o que vem depois.
worker · extractedCpf
Sem CPF legível não há consulta possível: a análise para aqui e vira revisão manual, em vez de seguir com um chute.
worker · dataConsistent
Nome e CPF precisam bater entre os documentos. Divergência é o sinal mais caro do modelo — sozinha, tira 40 pontos.
services/datajud
Consulta ao DataJud do CNJ, separando processos cíveis de criminais, porque eles pesam de forma muito diferente no score.
services/credit-check
Bureau de crédito para score e pendências financeiras — valor e quantidade, não só o "tem restrição".
services/scoring
Sete regras determinísticas partem de 100 e descontam. O resultado é gravado com a lista de motivos, não só o número.
evolution · sendMessage
O candidato recebe o aviso de conclusão; o corretor recebe nome, CPF, renda estimada, score e as observações. E a organização perde um crédito.
As sete regras
O modelo faz o que modelo faz bem: ler um documento amassado e devolver campos. Quem decide é uma função pura, com pesos escritos e auditáveis — porque uma recusa de locação precisa de motivo, e "a IA achou" não é motivo.
| Regra | Desconto | Critério |
|---|---|---|
| Renda × aluguel | −50 / −25 | Renda abaixo de 2× o aluguel tira 50; entre 2× e 3×, tira 25. Não conseguir estimar renda alguma custa 20. |
| Processos cíveis | −10 cada | Dez pontos por processo, com teto de 30 — três processos e vinte processos não são a mesma coisa, mas também não são infinitamente diferentes. |
| Processos criminais | −25 cada | Vinte e cinco por processo, com teto de 50: dois já derrubam metade do score. |
| Score de crédito | −30 / −15 | Abaixo de 300 pontos (de 1000) tira 30; abaixo de 500, tira 15. |
| Pendências | −10 cada | Dez por pendência financeira, com teto de 25. O valor total entra na observação enviada ao corretor. |
| Dados inconsistentes | −40 | Nome ou CPF divergindo entre os documentos. É o desconto isolado mais pesado do modelo. |
| Sem residência | −10 | Comprovante de residência não confirmado. |
O score é limitado à faixa de 0 a 100 e cai em uma das três decisões: 70 ou mais aprova, de 40 a 69 vai para revisão manual, abaixo de 40 reprova. A faixa do meio é a que faz o produto ser usável: ela devolve a decisão difícil para o humano em vez de fingir certeza.
Por dentro
Cada imobiliária é uma Organization com seus usuários, sua instância de WhatsApp e seus créditos — o plano trial nasce com 5 análises.
ConsequênciaUma instância de WhatsApp por organização: subir um cliente novo é provisionar uma instância, não só criar um login.
A análise roda em worker sobre Redis. Uma cadeia com download de mídia, visão computacional e duas APIs externas não cabe no tempo de uma requisição HTTP.
ConsequênciaTodo erro no meio do caminho cai no mesmo lugar: status manual_review, motivo gravado e mensagem honesta para o candidato.
Traz Dockerfile, docker-compose.prod.yml e start.sh. O app espera Postgres, Redis e uma Evolution API ao lado.
ConsequênciaNão é um deploy de um clique: sem ANTHROPIC_API_KEY, DATAJUD_API_KEY, a chave do bureau e o JWT_SECRET, o app sobe e não analisa nada.
Status
O AprovAI é um MVP escrito em um único dia (23 de março de 2026) e não está rodando em produção. Não há cadastro aberto, não há teste grátis e nenhuma análise real foi processada.
Esta página existe porque o código existe: o fluxo completo — WhatsApp, extração, DataJud, bureau, score, resposta — está escrito e é público. É uma peça de portfólio e uma base pronta para quem quiser levá-la a sério, não um produto à venda.
Se você é do mercado imobiliário e quer isso funcionando de verdade na sua carteira, o caminho é conversar — o que falta não é código, é infraestrutura e as chaves das APIs.
# o que precisa existir ao lado do app DATABASE_URL # postgres REDIS_URL # fila da análise EVOLUTION_API_URL # instância de whatsapp por organização ANTHROPIC_API_KEY # leitura dos documentos DATAJUD_API_KEY # processos, chave pública do CNJ CREDIT_API_KEY # bureau de crédito JWT_SECRET # sessãoLer o código no GitHub