Análise de Arquitetura

Venda de Sucesso · revisão de arquitetura

O que a plataforma já sustenta, o que vai rachar, e onde a automação realmente paga

Análise da CARTA-MESTRA v3.1 contra o que o produto promete entregar. Medida por contagem no próprio documento, não por impressão — e com as correções de leitura que fiz no caminho.

Base353 KB · 22 seções
Agentes declarados13 + orquestrador
Canais de entrada14
Decisões abertas26
01

O que já está bem resolvido, e é mais do que parece

Comeco por aqui porque é raro. A maior parte das especificações que chegam a esta densidade erra nas coisas estruturais e acerta nas visíveis. Esta faz o contrário.

DecisãoEstadoPor que importa
RAW imutável com SHA-256temO original nunca se perde. Corrigir não sobrescreve.
Proibição de last-write-winstemConflito abre reconciliação em vez de escolher sozinho. Isto normalmente só se aprende depois de perder dados.
outbox transacionaltemDeclarado em segurança. É o que impede divergência entre gravar no banco e chamar o fornecedor.
Idempotênciameia25 menções, e nenhuma diz sobre que chave. Ver §3.
Auditoria append-onlytemAtravessa todos os motores. É o que torna a plataforma defensável.
Lock otimista por versãotemUPDATE … WHERE id=? AND versao=? — a trava certa contra venda dupla.
Direitos de produto separadostemDIVULGAVEL ≠ RESERVAVEL ≠ CONTRATAVEL. Três direitos, não um estado.
Tradutor de linguagemtem175 conceitos canónicos e 160 equivalências proibidas. Declarar o que não é sinónimo é mais difícil e mais valioso que declarar o que é.
Autonomia L0–L4 por agentetemNenhum agente ganha alçada implícita.
Gates humanos nos pontos certostemCrédito, contrato, liberação de produto e desconto ficam com gente. Está certo — ver §4.
Uma correção minha, para o registo Eu tinha reportado ausência de outbox e de contrato de adaptador. Ambos existem na v3.1 — eu estava a medir a v1.2, que era o que tinha em mão. A leitura errada foi minha, não uma falha do documento.
02

A lacuna estrutural: falta a espinha de eventos

Esta é a única observação deste documento que eu classificaria como arquitetural, e não como detalhe. Todo o resto é preenchimento.

A contagem no documento:

PadrãoOcorrênciasLeitura
event bus · barramento · pub/sub0 · 0 · 0ausente
CQRS · read model0 · 0ausente
dead letter · circuit breaker0 · 0ausente
rate limit · backpressure0 · 0ausente
webhook20presente
jobs agendados10presente

O sistema integra-se por webhook de entrada e job agendado de saída. Isso funciona, e é como muita gente começa. O problema aparece quando se lê o que a plataforma promete em termos de tempo:

«Acolhimento em 5 segundos, qualquer canal, 24/7»

Um job que corre a cada minuto não acolhe em cinco segundos. Nem a cada dez segundos, porque aí é o job que vira o problema.

«Lead sem resposta em 5 minutos volta à fila»

Isto exige um temporizador por lead, não uma varredura da tabela. Com dez mil leads a varredura passa a custar mais que o atendimento.

Os dez jobs declarados são todos varreduras: expirar reservas, redistribuir leads ociosos, monitorar SLA, monitorar proposta vencendo, atualizar aging. Cada um é um SELECT … WHERE periódico sobre tabela que cresce.

O que eu proponho, e é pequeno O outbox transacional já está declarado. Falta o outro lado: um barramento de eventos de domínio com consumidores. O outbox publica, o barramento entrega, os consumidores reagem. Os dez jobs continuam a existir — mas como rede de segurança que apanha o que o evento perdeu, não como mecanismo principal.
evento de domínio          quem reage
──────────────────────────────────────────────────────────
LeadRecebido            →  Concierge (acolhe em 5 s)
                        →  Temporizador de SLA (agenda +5 min)
SlaEstourado            →  Redistribuidor (devolve à fila com trilha)
ReservaCriada           →  Espelho (projeta indisponível)
                        →  Temporizador de trava (agenda +24 h)
PixConfirmado           →  Reserva (confirma), Dossiê (abre)
PrecoAlterado           →  Fila de qualidade (peça publicada → EM_DUVIDA)
LoteLiberado            →  Fila de interesse (avisa por posição)
EntregaAceita           →  Financeiro (libera emissão de nota)

Repare na quarta linha de baixo: PrecoAlterado → peça em dúvida. É a ligação entre recertificação N3 e fila de qualidade que eu propus antes e que não é implementável sem eventos. Com job, alguém tem de se lembrar de varrer as peças depois de mudar um preço. Com evento, é automático e não se esquece.

03

Seis buracos de engenharia que vão aparecer em produção

Ordenados por quando doem. Os três primeiros doem no primeiro mês.

#BuracoComo se manifestaCusto de arrumar depois
1Chave natural não declaradaReimportar duplica o lote ou sobrescreve o errado. matricula aparece zero vezes em 353 KB.alto — dado sujo em estoque não se limpa sozinho
2Sem separação leitura/escrita no espelhoO espelho é a página mais lida do portal e a tabela mais travada pela reserva. Vão competir.alto — refazer sob carga é o pior momento
3Sem limite de chamada nos adaptadoresMeta, Google e WhatsApp têm limite por minuto. Agente de Tráfego sem freio esgota a cota e a conta cai inteira, não só a campanha.médio
4Sem fila de mortosWebhook de PIX que falha três vezes desaparece. O cliente pagou e o sistema não sabe.alto — é dinheiro perdido silenciosamente
5Sem contrato de SLO«Acolhimento em 5 s» é promessa sem medição. Quando falhar, ninguém sabe que falhou.médio
6Superfície de API menor que a declarada32 caminhos em apis_minimas, 9 operações no contrato executável. O resto está por especificar.médio — é trabalho, não retrabalho
O número 4 é o que eu arrumaria hoje Reserva só existe com PIX confirmado por webhook. Se o webhook falha e não há fila de mortos nem reprocessamento, o cliente pagou, o lote continua livre, e outra pessoa reserva o mesmo lote. A trava otimista impede a venda dupla no banco — não impede a promessa dupla ao cliente. Isso não é bug de software, é conversa difícil ao telefone.
04

Onde a automação realmente poupa gente

Aqui preciso de discordar de uma premissa antes de responder ao pedido. «Precisar de humanos ao mínimo» é a meta certa, mas o alvo está no lugar errado.

O spec mantém humanos em cinco pontos, e mantém bem: gate de publicação das cinco cadeiras, crédito, contrato, liberação de produto e exceção económica. Automatizar esses cinco não reduz custo — transfere risco. Um agente que aprova crédito ou libera lote é um passivo, não uma economia.

O tempo humano não se gasta a decidir. Gasta-se a juntar contexto antes de decidir e a executar depois. É aí que está a poupança, e ela é grande.

OndeHojeCom agenteNível
Primeira respostaSLA de 5 min, e o lead esfriaAcolhimento em 5 s, qualifica e agendaL3
Montagem do kit D-140 min por ativo, à mãoAgente monta, humano aceita num cliqueL2
Dossiê de créditoconferir checklist item a itemAgente aponta faltas; humano decideL2
Cadência de follow-uplembrete manual, esquecidoRégua 5 min / 48 h / 30 d no mesmo canalL3
Adaptação de peçauma peça por canal, à mãoUm master → 20 canais, com aceiteL2
Operação de tráfegoajuste manual diárioOpera dentro de teto homologadoL3
Cobrança suaveligação uma a umaAviso e link de pagamento na régua C9L3
Diagnóstico de gargaloreunião para descobrirKaizen aponta com evidênciaL1
A conta que vale fazer Dos dez ciclos diários de 45 minutos, a maior parte é contacto e preparação. Se o agente monta o contexto e o humano só decide, o mesmo corretor cobre mais ativos sem trabalhar mais horas. A automação não substitui o corretor: aumenta a carteira que ele consegue segurar. É isso que escala, e é isso que o modelo de plataforma exige — mais fornecedores atendidos pela mesma estrutura.
05

O motor de alçada — a peça que falta para automatizar com segurança

Os 13 agentes têm nível de autonomia. O que não têm é orçamento e limite por ação. Hoje só o Agente de Tráfego tem teto declarado; os outros doze operam com «dentro de parâmetros homologados», que é intenção e não contrato.

Sem isso, automatizar mais é aumentar exposição. Com isso, dá para soltar bastante.

alçada por agente e por ação
────────────────────────────────────────────────────────
agente            ação                 limite            excedeu →
Concierge         mensagem enviada     N por pessoa/dia   silencia e escala
Concierge         agendamento          agenda do titular  pede ao humano
Tráfego           alterar verba        teto diário R$ X   pausa e avisa
Tráfego           criar campanha       N por praça/dia    fila para aceite
Publicação        publicar peça        só HOMOLOGADO      recusa e explica
Vídeo             gerar corte          N minutos/mês      fila
Carteira          contato de cobrança  N por parcela      para e escala
SDR               ligação              horário permitido  agenda
qualquer          erro consecutivo     3                  desliga o agente

A última linha é a mais importante e não existe em nenhum lugar do spec: interruptor por agente. Um agente que começa a errar precisa de ser desligado por quem está de plantão, sem deploy e sem esperar por engenharia. Nada no documento permite isso hoje.

O risco concreto Agente de Tráfego com acesso à Marketing API e sem interruptor é a definição de exposição a orçamento. O teto diário protege o valor; não protege contra criar cem conjuntos de anúncio errados dentro do teto, nem contra pausar as campanhas boas. Teto de gasto e interruptor de operação são coisas diferentes.
06

Canais que não existem e deviam

Os 14 canais de entrada declarados cobrem bem o próprio e o pago. Faltam três famílias, e a primeira é onde o comprador brasileiro de imóvel realmente procura.

CanalNo specPor que muda o jogo
Portais imobiliários
ZAP, VivaReal, OLX, Imovelweb
ausenteÉ a primeira parada de quem procura imóvel no Brasil. Nenhum termo aparece nos 353 KB. Sindicação por feed é trabalho conhecido e o retorno é imediato.
Páginas programáticascitadoUma página por praça × natureza × faixa gera centenas de portas orgânicas do catálogo que já existe. Está mencionado em Organic Discovery e não desenvolvido.
Perfil local por empreendimento
Google Business Profile
ausenteLoteamento tem endereço físico. Busca local com foto, avaliação e rota é aquisição gratuita que ninguém está a usar.
Fila de interesseconstruídoAudiência própria, com posição declarada. Cada avanço do produto é um aviso — a melhoria é o anúncio.
Indicadores e influênciaconstruídoNovo canal, medido do clique ao contrato.
Sobre os portais, uma ressalva honesta Sindicar para portal traz volume e traz um problema: o lead chega sem UTM e a atribuição financeira é single_immutable_origin_channel. Antes de ligar o feed é preciso decidir como o canal portal entra na atribuição, senão ele rouba origem de tudo ou não recebe crédito de nada. É decisão de negócio, não de engenharia.
07

Tráfego e atendimento com regra por agente

O Concierge é a parte melhor especificada do documento — dez funções, cinco regras, cinco gatilhos de escalonamento. Não preciso de propor nada; preciso de apontar as três regras que fazem a diferença entre um agente que ajuda e um que estraga.

«Consulta o espelho em tempo real e apresenta só unidades compatíveis»

A invariante do agente: nunca oferece lote indisponível. Isto obriga o agente a ler a projeção do espelho, e é a razão técnica de precisar de separação leitura/escrita — o agente não pode travar a tabela da reserva para conversar.

«Simulação via simulador oficial, nunca calcula por conta própria»

Um modelo de linguagem calcula parcela errada com convicção total. Proibir o cálculo próprio é a decisão mais importante do documento sobre IA, e ela está lá.

«Fora do horário humano, agenda em vez de prometer retorno»

Impede a promessa que ninguém cumpre. É a regra que salva a reputação do canal.

«Identifica-se como assistente virtual na primeira mensagem»

Além de correto, é o que permite o handoff sem atrito: quem sabe que falava com um robô não se sente enganado quando entra um humano.

O que eu acrescentaria ao atendimento, e é só uma coisa: medir a taxa de escalonamento como indicador de qualidade, não de falha. Um Concierge que escala 40% das conversas pode estar a funcionar perfeitamente — se as 40% eram casos de alçada. O que interessa medir é escalonamento fora dos cinco gatilhos declarados, porque isso sim é o agente a não dar conta.

No tráfego, a regra que falta é a inversa da que existe. Há teto de gasto; falta piso de aprendizagem: um agente que pausa criativo com 200 impressões está a decidir com ruído. Antes de pausar ou promover, o volume mínimo tem de ser declarado — senão o agente otimiza para o azar.

08

Plano em cinco ondas

Ordenado por dependência, não por vontade. Cada onda entrega valor sozinha e nenhuma exige a seguinte para valer a pena.

Onda A · Fundação segura Chave natural por entidade. Fila de mortos e reprocessamento no webhook de PIX. Limite de chamada nos adaptadores. Interruptor por agente. sem isto, tudo o resto herda dado sujo e exposição
Onda B · Espinha de eventos Barramento de eventos de domínio sobre o outbox que já existe. Os dez jobs passam a rede de segurança. Temporizadores por lead e por reserva em vez de varredura. destranca o acolhimento em 5 s e o SLA de 5 min de verdade
Onda C · Espelho como projeção Separar leitura de escrita. O espelho passa a ler projeção; a reserva escreve no domínio. Fila de reserva com posição, que já está declarada como fila_opcional. é o que permite o Concierge consultar sem travar a venda
Onda D · Alçada e agentes Motor de alçada por agente e por ação, com piso de aprendizagem no tráfego. Concierge em produção com os cinco gatilhos. Métrica de escalonamento fora de gatilho. aqui é onde a poupança de gente aparece de facto
Onda E · Canais novos Sindicação para portais imobiliários, depois de decidir a atribuição. Páginas programáticas do catálogo. Perfil local por empreendimento. último porque multiplica volume — e volume sobre fundação torta multiplica problema
O que fazer antes da Onda A Vincular as cinco cadeiras a utilizadores reais. Não é engenharia, é meia hora de configuração — e sem isso nenhuma peça de material chega ao site, o que torna as cinco ondas invisíveis para quem compra.

Método. Cada afirmação deste documento foi medida por contagem no JSON da carta mestra, e não por leitura de memória. Onde digo «zero ocorrências», contei. Onde uma leitura minha anterior estava errada — o outbox e o contrato de adaptador — está corrigido no §1 com o motivo. As decisões abertas citadas são as do decision_registry_v3, com o código original, para poderem ser rastreadas até à fonte.

← Todas as peças