Menlo TechOperations & Finance
Case Clave

Tour de Algoritmos

Como a inteligência artificial está entrelaçada em tudo o que a Menlo Tech faz.

Role para começar o tour

Na Menlo Tech, a Clave transforma o pedido de financiamento de um imóvel em um processo que anda sozinho: confere os documentos, envia a proposta a três bancos ao mesmo tempo e acompanha cada passo até a entrega da chave. A clave confere; só o banco aprova.

Em vez de colocar inteligência artificial em cima de um processo manual, desenhamos o processo em torno dela. Agentes interpretam informações, executam tarefas e coordenam sistemas; pessoas intervêm onde há incerteza, sensibilidade ou necessidade de autorização. Os algoritmos decidem quem faz o quê — e deixam tudo registrado.

3
portas de entrada da proposta
5
etapas até a chave
3
bancos recebem a proposta em paralelo
200
propostas por analista, no máximo

Referências do desenho da fase 1. Arquitetura proposta: não são resultados medidos.

  • Resolução de entidades
  • Classificação de intenção
  • Visão computacional
  • Calibração de confiança
  • Decisão sensível a custo
  • Filas e novas tentativas
  • Matemática financeira
  • Máquinas de estado
  • Amostragem de auditoria
  • Eventos e workflow

Vamos acompanhar uma única proposta, da primeira conversa à chave, para ver alguns dos algoritmos que trabalham nos bastidores. Depois, vamos afastar a lente e olhar o sistema inteiro.

Capítulo 1

Entrada e identidade

Três portas, uma mesma pessoa: antes de qualquer análise, a clave precisa saber quem é quem.

Uma proposta nasce de três jeitos: o corretor salva o cliente no iList (o CRM da imobiliária), o corretor cria a proposta na clave em cinco perguntas, ou o comprador chega sozinho pelo site. Cada porta fala um dialeto diferente — campos, formatos e qualidade de dado.

Primeiro, normalizamos. CPF só com dígitos e com os dígitos verificadores conferidos, celular em formato internacional, endereço padronizado. O que não passa na validação não entra no processo: volta com o motivo.

d₁ = ((10 · Σi=1..9 ci·(11 − i)) mod 11) mod 10

Depois, resolvemos entidades. O mesmo comprador pode chegar por duas portas, e a mesma pessoa pode ser compradora e corretora. Comparamos atributo a atributo, com pesos, e decidimos: mesma pessoa, pessoa diferente ou dúvida para a Ops.

score(a, b) = Σk wk · simk(ak, bk)

Por fim, a confirmação. O celular é confirmado com um código de seis dígitos; os dados do CPF são conferidos com as fontes de identidade uma vez por pessoa. Se não baterem, uma pessoa ajuda — o algoritmo não insiste.

Evita propostas duplicadas para a mesma pessoa e o mesmo imóvel.

Resolva as entidades interativo
mesma pessoa
dúvida → Ops
diferentes
score(a, b) = Σk wk · simk(ak, bk)  ·  pesos: CPF 0,5 · celular 0,2 · nome 0,2 · imóvel 0,1
Porta 1 · iListCRM da imobiliáriaPorta 2 · corretor criacinco perguntas no appPorta 3 · compradorchega sozinho pelo siteUma propostaProposta → Documentos →Bancos → Contrato → Chave3 portas, 1 objetoCada porta fala um dialeto: campos, formatos e qualidade diferentes.brutonormalizadoresultado123.456.789-0912345678909✓ dígitos ok(21) 99999-0000+5521999990000✓ formato E.164123.456.789-00—✗ dígito inválidoR. da Passagem 12 ap3R. da Passagem, 12✓ padronizadod₁ = ((10 · Σ cᵢ·(11 − i)) mod 11) mod 10Dado inválido não entra: volta com o motivo.Registro AAna S.CPF …789-09cel …0000R. da Passagem 12Registro BAna SouzaCPF …789-09cel …0001R. da Passagem, 12nome 0,95cpf 1,00cel 0,00imóvel 1,00score = 0,5·cpf + 0,2·cel + 0,2·nome + 0,1·imóvel= 0,50 + 0,00 + 0,19 + 0,10 = 0,79diferentedúvida → Opsmesma pessoaCódigo de 6 dígitos no WhatsApp••••••reenvio só depois de 30 segundosSerasa ✓Receita ✓uma vez por pessoa✓ dados batem → segue para os documentos✗ não bate → uma pessoa da Ops ajudaA mesma pessoa pode ser compradora e corretora: uma conta, dois papéis.
Capítulo 2

A assistente

Uma conversa de WhatsApp precisa ser entendida, respondida na hora certa e entregue a uma pessoa quando for preciso.

O comprador fala com a assistente por texto ou por áudio: manda a foto de um documento, pergunta “e aí?”, reclama, pede para falar com alguém. Cada mensagem é transcrita, se for áudio, e vira texto com o contexto da proposta.

Um classificador estima a intenção: documento, status, dúvida, pedido de uma pessoa, fora do escopo. A saída não é uma resposta, é uma distribuição de probabilidade — e é isso que permite saber quando duvidar.

P(c | x) = exp(zc) / Σj exp(zj)

O roteamento usa a confiança. Se a maior probabilidade passa do limiar e a margem sobre a segunda é grande, a assistente responde. Se não, a conversa vai para a Ops, com o contexto. Pedir uma pessoa leva sempre à Ops, por regra.

responde ⇔ maxc P(c|x) ≥ τ ∧ p₁ − p₂ ≥ δ

O que a assistente envia também é classificado. Mensagens A e B saem sozinhas; C — má notícia, terceira cobrança, qualquer frase fora dos modelos — só sai com aprovação de uma pessoa da Ops; D nunca sai. A classe vem de uma regra determinística, não do modelo.

Responder ou chamar uma pessoa? interativo
assistente responde
vão para a Ops
responde ⇔ maxc P(c|x) ≥ τ ∧ p₁ − p₂ ≥ δ ∧ intenção ≠ “pessoa”
“Mandei o holeriteagora”▶ áudio 0:12foto“Recebi! Estouconferindo.”Texto + contextotranscrição do áudiotipo do anexoestado da propostaquem é o remetente“Mandei o holerite agora”documento0.91status0.03dúvida0.02pessoa0.02fora do escopo0.02P(c | x) = exp(zc) / Σ exp(zj)uma probabilidade por intenção; somam 1maior probabilidade ≥ τ e margem ≥ δ ?assistente respondee registra o eventovai para a Opscom o contexto da conversaPediu uma pessoa? Sempre Ops: é regra, não probabilidade.margem = p₁ − p₂ evita decidir quando duas intenções disputam.Asai sozinhamensagem de rotinaBsai sozinhamensagem de rotinaCsó sai com aprovação da Opsmá notícia, 3ª cobrança, frase fora dos modelosDnunca saiproibida em qualquer casoQuem decide a classe é uma regra, não o modelo de linguagem.
Capítulo 3

Documentos em dados

A foto de um holerite vira campos conferidos em minutos — esse é o momento de verdade do comprador.

O comprador fotografa um documento e manda pela área web ou pelo WhatsApp. É o momento em que ele decide se confia na clave: ver o primeiro documento conferido em minutos, sem correr atrás de ninguém.

Primeiro, um modelo de visão reconhece o tipo de documento: holerite, extrato, comprovante de endereço. “Outro documento” é uma resposta legítima — melhor do que forçar um encaixe.

ŷ = argmaxc softmax(f(imagem))c

Depois, a leitura: OCR e modelos de visão e linguagem extraem os campos — nome, CPF, valores, datas, emissor. Cada campo vem com a sua própria confiança, porque um valor ilegível não deve contaminar um nome nítido.

A validação cruzada confronta o que foi lido com o que a proposta diz: o nome bate? o documento está dentro da validade? o valor é compatível? É aqui que um documento perfeitamente legível ainda pode ser recusado.

No fim, uma confiança combinada e um dos cinco desfechos: parece certo, ilegível, vencido, dado não bate ou outro documento. Acima do limiar o modelo confere sozinho; abaixo, o caso vai para a mesa da Ops.

conf = Πf confcampo f × conftipo × confvalidação
Combine as confianças interativo
confiança combinada
decisão
rótulo provável
conf = confleitura × conftipo × confvalidação  ·  confere sozinho ⇔ conf ≥ τ
FotoTipoCamposCruzarConfiançaHOLERITEpela área webou pelo WhatsAppmeta: o primeiro documentoconferido em minutosQue documento é este?holerite0.93extrato bancário0.04comprovante de endereço0.02outro documento0.01ŷ = argmax softmax(f(imagem))“outro documento” também é uma resposta válidaCampos lidos, cada um com sua confiançanomeAna Souza0.99CPF***.456.789-**0.98valor líquidoR$ 8.420,000.91competência09/20260.96emissorEmpresa X0.88Validação cruzada com a proposta✓ nome = nome da proposta✓ CPF = CPF do cadastro✓ competência dentro da validade✗ renda incompatível com a declaradadesfecho: dado não bateCinco desfechos possíveisparece certoilegívelvencidodado não bateoutro documentoconf = Π conf(campo) × conf(tipo) × conf(validação)conf ≥ τ → confere sozinho · senão → mesa da Ops
Capítulo 4

Confiança e política

O modelo estima; a política decide. Onde fica a linha entre o que a máquina resolve e o que vai para uma pessoa?

O modelo é probabilístico; a política é determinística. O motor de decisão confronta a evidência com um limiar: acima dele o modelo confere sozinho, abaixo o documento vai para a mesa da Ops. É por isso que a mesa só vê o que ficou incerto — e que pode, um dia, ficar vazia.

Para o limiar valer, a probabilidade precisa estar calibrada: quando o modelo diz 90%, ele deve acertar cerca de 90% das vezes. Medimos isso comparando confiança e acerto por faixa.

ECE = Σb (nb/N) · |acertob − confiançab|

E onde pôr o limiar? Revisar custa cr; aceitar um erro custa cf. Aceitar vale a pena enquanto o custo esperado do erro for menor que o da revisão. O mínimo da curva de custo total sai direto dessa conta.

aceitar ⇔ (1 − p) · cf < cr ⇔ p ≥ 1 − cr/cf

O limiar não é um número eterno. Ele muda por tipo de documento, por banco e por versão do modelo — e a auditoria por amostragem, no capítulo 8, verifica se ele ainda se sustenta.

Mexa nos controles ao final deste capítulo e veja o limiar ótimo se deslocar.

Onde fica o limiar? interativo
limiar ótimo τ*
confere sozinho
erro entre aceitos
custo vs. revisar tudo
τ* = 1 − cr/cf  ·  confiança ~ Beta(20, 1), calibrada (ilustrativo)  ·  custo(τ) = cr·P(p<τ) + cf·P(erro, p≥τ)
distribuição da confiança (ilustrativa)0,500,600,700,800,901,00limiar τ = 0,90decide sozinho →← mesa da Opsa mesa só recebe o que ficou abaixo do limiarconfiançaacerto observadocalibrado: quando diz 90%, acerta ≈ 90%ECE = Σb (nb/N) · |acertob − confiançab|limiar τcusto esperado por documentorevisar (c_r)aceitar errado (c_f)custo total · mínimo em τ*aceitar ⇔ p ≥ 1 − c_r / c_fLimiar por tipo de documento (ilustrativo)holeriteτ = 0,93extrato bancárioτ = 0,95comprovante de endereçoτ = 0,90documento com fotoτ = 0,97muda por tipo, por banco e por versão do modelonova versão → recalibrar antes de liberare conferir na auditoria se ainda se sustenta (cap. 8)
Capítulo 5

Envio aos bancos

A mesma proposta, três bancos ao mesmo tempo, sem nunca duplicar um pedido.

Com o consentimento do comprador, a clave envia a proposta aos três bancos escolhidos ao mesmo tempo. Cada envio é uma tarefa independente, com estado próprio: criado, em análise, pediu documento, respondido, atrasado.

Integrações falham: o portal do banco cai, a resposta demora. A política é tentar de novo com espera crescente e um pouco de aleatoriedade, para que milhares de propostas não batam à porta do banco no mesmo segundo.

esperan = min(C, B · 2n) + jitter

Reenviar não pode duplicar. Cada envio carrega uma chave de idempotência derivada da proposta e do banco: se o mesmo pedido chegar duas vezes, o banco enxerga um só.

chave = hash(proposta, banco, versão dos dados)

Quando um banco pede um documento, só aquele envio para; os outros seguem. Cada banco tem um prazo típico de resposta: passado o prazo, o envio vira “atrasado” e a clave cobra o banco, de forma visível para quem espera.

P(entrega em até n tentativas) = 1 − pn+1
Tente de novo — até quando? interativo
envio entregue
os 3 entregues
espera máxima
caem na Ops
P(entrega) = 1 − pn+1  ·  espera = Σk<n min(C, B·2k), C = 120 min
Propostaconsentimento ✓Banco Aem análiseBanco Bem análiseBanco Cem análiseMesma proposta, três bancos ao mesmo tempo.✕✕✕✓#1#2#3#45 min10 min20 minespera(n) = min(C, B · 2ⁿ) + jittera espera cresce; o jitter evita todos tentando juntoschave = hash(proposta, banco, versão)envio #1reenvioBancoum pedido sómesma chave → o banco vê um pedido sóreenviar é seguro: a operação é idempotenteBanco Arespondeu ✓Banco Bpediu documento · só este envio paraBanco Catrasado → a clave cobra o bancoUma recusa não é má notícia enquanto outro banco avalia.
Capítulo 6

Ofertas e matemática financeira

Cada banco responde do seu jeito. A clave transforma as respostas em números comparáveis e confere a conta.

Os bancos respondem em PDF, e-mail, portal ou telefone. A clave transforma cada resposta em campos comparáveis — valor financiado, prazo, taxa, parcela, CET, total pago — sempre como o banco mandou. Ela não inventa condição e não escolhe o banco pelo comprador.

Antes de mostrar qualquer oferta, uma validação aritmética: a parcela informada bate com a taxa e o prazo? Se diverge além da tolerância, a resposta vai para a Ops classificar em vez de chegar ao comprador.

PMT = P · i / (1 − (1 + i)−n)

No sistema Price, a parcela é constante, mas a composição muda: no começo, quase tudo é juro; com o tempo, a amortização cresce. O total pago e o CET — a taxa que iguala o valor líquido recebido ao fluxo de parcelas — saem dessa conta e são resolvidos numericamente.

CET: P − tarifas = Σt=1..n PMT / (1 + CETm)t

O comprador compara as ofertas lado a lado e escolhe. A clave mostra o que cada banco mandou, retira os envios não escolhidos e, se a avaliação do imóvel vier abaixo, oferece voltar a outro banco.

Os valores exibidos são fictícios, como no restante do exemplo.

Confira a conta do banco interativo
parcela calculada
total pago
CET a.a.
validação
PMT = P · i / (1 − (1+i)−n)  ·  i = (1 + taxa)1/12 − 1  ·  P − tarifas = Σ PMT/(1+CETm)t  ·  condições fictícias
Banco Aresposta em PDFBanco Bresposta por e-mailBanco Cresposta no portalcampos normalizadosvalor financiadoprazo (meses)taxa a.a.parcelaCET a.a.total pagoAs condições aparecem como cada banco mandou.A clave não recomenda banco.PMT = P · i / (1 − (1 + i)^(−n))informada R$ 5.690 · calculada R$ 5.684 · Δ 0,1%✓ dentro da tolerância → mostrar ao compradorinformada R$ 5.980 · calculada R$ 5.684 · Δ 5,2%✗ diverge → a Ops classifica antes de mostrartolerância de 0,5% (ilustrativa)■ juros■ amortizaçãomesesparcela constante: a parte de juros cai e a de amortização sobeBancoParcelaCET a.a.Total pagoBanco AR$ 5.68412,1%R$ 2,05 miBanco BR$ 5.79012,4%R$ 2,08 miBanco CR$ 5.61012,0%R$ 2,02 mivalores fictícios · o comprador escolhea clave retira os outros enviostotal pago = parcela × n + custosCET: taxa que iguala o valor líquido ao fluxo de parcelas
Capítulo 7

Do contrato à chave

Vistoria, assinatura, ITBI, cartório: um grafo de dependências em que o caminho mais longo define o prazo.

Escolhido o banco, começa a etapa Contrato: vistoria, assinatura pelo link do banco, ITBI, exigências do cartório, registro e entrega da chave. Quase nada disso acontece dentro da clave — o banco decide no portal dele, o cartório tem o próprio ritmo.

Cada passo é um estado numa máquina de estados, com dependências: a assinatura só vem depois da vistoria, e o registro só depois do ITBI e das exigências. Toda mudança de estado emite um evento, e é o evento que avisa cada ator.

O prazo da etapa é o caminho crítico: o caminho mais longo no grafo. Saber qual ramo está no caminho crítico diz onde gastar atenção — atrasar o ITBI dentro da folga não muda a data da chave; atrasar o cartório muda.

EF(t) = dt + máxu ∈ pred(t) EF(u)

O que a clave faz fora da tela é transformar cada exigência do cartório em uma tarefa com dono e prazo, cobrar o banco de forma visível e deixar pronta, em cada lugar, a mensagem certa para quem precisa agir.

Qual é o caminho crítico? interativo
prazo até a chave
folga do ramo paralelo
ramo crítico
EF(t) = dt + máxu ∈ pred(t) EF(u)  ·  assinatura 3 d · chave 2 d (fixos)
PropostaDocumentosBancosContratoChaveagora · vistoria do imóvelFora da telao banco decide no portal deleo cartório tem o próprio ritmoo vendedor assina com link próprioa chave é entregue em mãosA clave não controla nada disso:deixa algo pronto em cada lugar.VistoriaAssinaturaITBIExigênciasRegistroChavecada passo é um estado; cada mudança emite um eventoVistoriaAssinaturaITBIExigênciasRegistroChave5 dEF 53 dEF 84 dEF 127 dEF 1510 dEF 252 dEF 27prazo = 27 dias · o ITBI tem 3 dias de folgaEF(t) = dₜ + máx EF(predecessores de t)Exigência do cartóriotarefa: certidão atualizada do imóveldono: vendedorprazo: 7 diasestado: aberta → com o cartório → resolvidaa cobrança ao banco é visível a quem esperatoda exigência vira tarefa com dono e prazo
Capítulo 8

Humano no ciclo

Pessoas decidem o que o modelo não decidiu — e cada decisão vira exemplo para o modelo aprender.

A Ops é um time pequeno de analistas, cada um com até 200 propostas. A mesa mostra só o que o modelo e a assistente não decidiram sozinhos. O analista vê o que o modelo leu, escolhe um de cinco rótulos e confirma. Sem texto livre.

Cada rótulo faz duas coisas: dispara a consequência — um pedido ao comprador, uma proposta parada — e vira exemplo de treino, depois de validado. Quando há mais casos que gente, os mais incertos vêm primeiro.

u(x) = 1 − maxc P(c | x)  ·  H(x) = − Σc P(c|x) log P(c|x)

Acima do limiar o modelo decide sozinho — então, como saber se ele continua certo? Por amostragem: a Ops revê uma amostra do dia das decisões automáticas. Discordância vira rótulo, e a taxa de discordância é a métrica que precisa cair.

n = ln(1 − C) / ln(1 − p)

Tamanho da amostra para ver, com confiança C, ao menos um erro de taxa p.

No fim, o que importa é a economia da operação: quantas intervenções por 100 propostas, quantos falsos aceites, quanto custa cada contrato concluído. Medimos por banco, por tipo de documento, por versão do modelo e por faixa de confiança.

Referências de desenho, não resultados medidos: o ganho de produtividade ainda precisa ser demonstrado.

Dimensione a mesa da Ops interativo
analistas (até 200 propostas cada)
ocupação do time
intervenções por 100 propostas
custo de Ops por proposta
analistas = ⌈N / 200⌉  ·  horas = N · 5 · (1 − STP) · t / 60  ·  ocupação = horas / (analistas · 140 h)  ·  5 documentos por proposta (ilustrativo)
Um cartão por documento incertocompradorAna S.documentoholeritemodelo viuvalor líquido ?se confirmar→ conferidoesperando1 diaDocumentos 12 · Propostas 4 · Conversas 2só chega à mesa o que ficou abaixo do limiarmesa vazia = o modelo decidiu tudoparece certoilegívelvencidodado não bateoutro documentoConsequênciapedido ao compradorou proposta paradaExemplo de treinorótulo → dado supervisionadotexto livre não treina nada; rótulo, simu(x) = 1 − máx P(c|x): o mais incerto primeirodecisões automáticas, acima do limiarcírculo = amostra do dia · vermelho = discordâncian = ln(1 − C) / ln(1 − p)discordância vira rótulo; por semana, deve cairIntervenções por 100 propostasquanto a mesa ainda decideFalsos aceitesaceitos que não deviam serCusto por contratoOps + infraestrutura ÷ contratosDiscordância na auditoriadeve cair semana a semanarecortes: banco · tipo de documento · versão do modelo · faixa de confiança
Capítulo 9

Plataforma de eventos

Toda mudança de estado emite um evento. É o evento que avisa cada ator e que torna tudo rastreável.

Cada mudança de estado de uma proposta emite um evento: documento.enviado, documento.conferido, proposta.documentos_conferidos, consentimento.registrado, envio.criado, envio.respondido, chave.entregue. Nenhuma tela sincroniza outra — é o evento que avisa corretor, comprador, Ops e imobiliária.

O coração do sistema é um motor de workflow durável, não o modelo de linguagem. Ele guarda o estado da proposta, controla o que pode acontecer e retoma de onde parou quando um serviço externo falha. Os agentes são trabalhadores especializados, com ferramentas e limites próprios.

Em volta, camadas: experiência, agentes, workflow, inteligência, integração, confiança e dados. A regra de quem vê o quê — o corretor e a imobiliária nunca veem o conteúdo dos documentos, o CPF completo nem as ofertas — vive em código, não em tela.

O estado de uma proposta é uma função dos seus eventos: reproduzir a história reconstrói qualquer momento. É isso que dá rastreabilidade de ponta a ponta — e permite, depois, auditar e aprender.

st = δ(st−1, et)
Reproduza os eventos interativo
etapa
documentos conferidos
bancos que responderam
eventos aplicados
estado(p, n) = dobra(δ, s₀, [e₁ … eₙ])  ·  a mesma história sempre gera o mesmo estado
documento.enviadodocumento.conferidoproposta.documentos_conferidosconsentimento.registradoenvio.criadoenvio.respondidochave.entregueWorkflow durávelestado · prazos · retomadaDocumentosConversaBancosContratoso modelo de linguagem é um trabalhador, não o coraçãoExperiênciaWhatsApp · web · mesa da OpsAgentesferramentas e limites própriosWorkflowtransições, prazos, tarefas duráveisInteligênciadocumentos, extração, classificaçãoIntegraçãoCRM, identidade, bancosConfiança e dadoseventos, permissões, auditoriaquem vê o quê vive em código, não em telas₀e₁s₁e₂s₂e₃s₃e₄s₄sₜ = δ(sₜ₋₁, eₜ)estado(proposta) = dobra dos eventos da propostareproduzir os eventos reconstrói qualquer momentoauditoria = reler a história

Há muita coisa acontecendo

Para recapitular o caminho de uma proposta: ela entra por uma de três portas e tem a identidade resolvida; a assistente conversa e chama uma pessoa quando precisa; os documentos viram dados e só os incertos chegam à mesa da Ops; a proposta segue em paralelo para três bancos, sem duplicar nada; as ofertas voltam como números conferidos; o contrato anda por um grafo de dependências até a chave — e cada passo vira um evento que pode ser reproduzido e auditado.

Esse trabalho está dividido em quatro equipes, três delas alinhadas a uma parte do fluxo e uma transversal a todas.

  • Algoritmos de Entrada e ConversaResolução de entidades, identidade, assistente e roteamento por intenção. Decidem quem é a pessoa e o que ela precisa.
  • Algoritmos de Documentos e DecisãoLeitura de documentos, calibração, limiares sensíveis a custo e auditoria. Decidem o que o modelo resolve e o que vai para uma pessoa.
  • Algoritmos de Bancos e ContratosFilas, novas tentativas, matemática financeira e máquinas de estado. Decidem como a proposta anda até a chave.
  • Plataforma de Eventos e ConfiançaEventos, workflow durável, permissões e auditoria. Não carregam lógica de negócio: constroem a base para que as outras três trabalhem de ponta a ponta.

A pergunta que atravessa tudo isso é sempre a mesma: entre o que uma máquina faz bem e o que uma pessoa faz melhor, onde fica a linha — e como medir se ela está no lugar certo? A resposta que não muda: a IA executa e coordena, as pessoas supervisionam as exceções, e os bancos decidem o crédito.