AprovAI análise cadastral de locação entrada WhatsApp score 0–100 corte 70 / 40 ROI Labs

Locação imobiliária

A ficha chega às 22h. O parecer também.

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.

Análise · exemplo aguardando documentos…

100score de risco

40 · revisão 70 · aprova
cada regra tira pontos de 100 — o motivo vai junto
     
    Candidatos ilustrativos, escritos à mão com as regras reais de scoring.ts. nenhum dado real

    O caminho de uma análise

    Nove passos entre a foto do RG e o parecer no celular do corretor

    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.

    1. Documentos

      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.

    2. Download

      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.

    3. Extração

      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.

    4. Identidade

      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.

    5. Consistência

      worker · dataConsistent

      Nome e CPF precisam bater entre os documentos. Divergência é o sinal mais caro do modelo — sozinha, tira 40 pontos.

    6. Processos

      services/datajud

      Consulta ao DataJud do CNJ, separando processos cíveis de criminais, porque eles pesam de forma muito diferente no score.

    7. Crédito

      services/credit-check

      Bureau de crédito para score e pendências financeiras — valor e quantidade, não só o "tem restrição".

    8. Score

      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.

    9. Resposta

      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

    Por que um score determinístico, e não um palpite do modelo

    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.

    Descontos sobre a base 100, de src/lib/services/scoring.ts
    RegraDescontoCritério
    Renda × aluguel−50 / −25Renda 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 cadaDez 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 cadaVinte e cinco por processo, com teto de 50: dois já derrubam metade do score.
    Score de crédito−30 / −15Abaixo de 300 pontos (de 1000) tira 30; abaixo de 500, tira 15.
    Pendências−10 cadaDez por pendência financeira, com teto de 25. O valor total entra na observação enviada ao corretor.
    Dados inconsistentes−40Nome ou CPF divergindo entre os documentos. É o desconto isolado mais pesado do modelo.
    Sem residência−10Comprovante 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

    Um MVP com as partes caras já resolvidas

    Multi-inquilino

    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.

    Fila, não requisição

    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.

    Feito para EasyPanel

    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 que esta página é, e o que ela não é

    Leia antes de pedir acesso

    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ão
    Ler o código no GitHub