Last updated: 2026-04-30 — 🧹 Cleanup KANBAN: removido item #5 (Migração Hetzner — DONE 30/04 manhã); item #4 atualizado pra refletir tamanho real do
index.ts(16.156 linhas, era 11.120 no audit 8/abr — cresceu +45% em 22 dias); eliminado bloco "Blocked" (Bradesco CNAB 240 cancelado); 8 crons financeiros migrados pro cloudvero ou desativados (commit0cdbd94— Phase A/A.5/B + 3 obsoletos). Renumeração P1: Impulsionamento #5, Marketing #6, Recrutamento #7, Lead Bot #8, CRM Próprio #9, ERP Próprio #10. Antes (29/04 noite): 🚚 MIGRAÇÃO COMPLETA: bots no Hetzner cloudvero (CPX31 Ashburn, webhookhttps://studio76.duckdns.org/webhook, DuckDNS+nginx+Let's Encrypt). Auto-deploygit pushpreservado via cron 1min cloudvero. Audit semanal silent-on-success. studio76-server: bots stopped+disabled. Antes (28/04): 🤖 Studio Lead Bot — plano v2 congelado com Yara (item #8): wizard atual era monocaso, substituído por intent-classifier com 9 buckets cobrindo todos os cenários reais que Yara atendia manualmente (compra/aluguel/captação/placa/recrutamento/verificação corretor/reclamação/B2B/atendimento humano). Rodízio de captação backfilled da planilha Yara (38 corretores), timeout 15min, recrutamento 100% automatizado com relatório diário pra Suzana, verificação de corretor expõe nome+CRECI+telefone+pings Samuel. 5 templates HSM novos a submeter. Workflow YouTube/Fotos da captação delegado pro botjuridico — kickoff emwhatsappbot/docs/planning/captacao-midia-workflow-kickoff.md. Antes (26/04): 🎯 CRM próprio (StudioImob/SmartyDeed) substituindo Pipeimob elevado a P1 estratégico (item #9) — consolida itens #28 e #32 sob direção única, meta: Mês 3 cancelar Pipeimob. 🤖 Bot pré-atendimento leads adicionado ao backlog P1 (WhatsApp +55 11 97345-7166). 📊 Operations Dashboard ao vivo em/dashboardcom KPIs de pipeline, leads por portal, anúncios com melhor desempenho, tempo de resposta por corretor. 📋 KANBAN live em/kanban. Git hookspost-commit+pre-pushsincronizam KANBAN.md com servidor automaticamente. Antes (25/04 noite, 2ª rodada): 🛠️ /cobrar — 3 fixes commit324a815(a) tag#parcela:Ncorreto agora — parcela persistia perdida ao passar pelo seletor de pagador; (b) consolidação de transfers no webhook (debounce 30s — 1 mensagem com checklist em vez de N isoladas); (c) tabelasupplierscriada no payments.db (zera 6 stacks ruidosas por/cobrar). Antes (25/04 noite, 1ª rodada): 🔌 Stark Bank webhook ressuscitado — apontava pra hostname Tailscale antigo (rab2b6aa, HTTP 000); reapontado pratail92b8aa(HTTP 200, mesmo do Meta). Handler/webhook/starkbankcompleto desde antes mas nunca rodou em prod por isso. Cronmonitor_split_1080_21.py(12h+18h seg 28/04) instalado como rede de proteção independente. Backlog P2 derivado: consolidar 7 msgs de transfer em 1 + corrigir tag#parcela:N. Antes (25/04 manhã): 🛠️ /cobrar — 3 fixes deploy + commitdc58545: (a) Drive duplicatas —findDealFoldersByCodeplural + iter-all emensureCCVExtractedNow(deals legados podem ter 2-3 pastas com mesmo prefixo, bot agora varre todas); (b) Extractor enriquecido — Haiku cospe endereço completo + valor de venda do imóvel, persiste emdeal_property+deal_values.property_value; (c) UX pagador interativa — 2 candidatos vira 3 botões, 3-10 vira lista interativa, separador+retrocompat com,. Validado e2e em 1079-12. Antes (24/04): 🔌 Assertiva creds plumbed + 🆕 Hetzner VPS provisionada. Antes (23/04): 🔧 Estoque Vivo — fix pré-piloto (chown logs, dedup MIN(id), HSM APPROVED). Antes (18/04): 🚀 Sprint 1+2 deployed +/ddAssertiva A+B em produção (v29).
WIP Limit: 2 (max items in "In Progress" at once)
Rule: Open this file every morning before writing code
| Level | Criteria | Response Time |
|---|---|---|
| P0 | Production down, data loss, money at risk, bot crash loop | Same day |
| P1 | Feature blocking business operations (deals, payments, contracts) | This week |
| P2 | Approved feature improving efficiency, no urgent deadline | Next 1-2 weeks |
| P3 | Nice to have, research, future planning | When P0-P2 are clear |
Full repo audit: bot UX, proactivity, logs, Pipeimob sync, StudioImob, production readiness.
Server inspected via SSH — bot is UP and healthy.
| Metric | Value |
|---|---|
| Bot status | active (running) since Apr 7 18:19 BRT (16h+ uptime) |
| Server uptime | 22 days |
| Memory | 173MB (peak 704MB) |
| DB size | 3.2MB, WAL mode, healthy |
| Schema version | v22 (fully migrated) |
| Deals | 348 (196 CREATED, 128 COLLECTING_DOCS, 16 REGISTRATION, 3 SIGNING, 3 CCV_DRAFT, 2 DD_COMPLETE) |
| Corretores | 57 |
| Checklist items | 3,574 |
| Deal parties | 616 |
| Extracted data (OCR) | 40 party records, 12 matrícula entries |
| Engagement | 291 log entries, digests running daily at 11:00 UTC (8h BRT) |
| Pipeimob sync | 350 deals synced (336 matched, 14 errors) |
| Webhook | Tailscale Funnel active (https://studio76-server.tail92b8aa.ts.net) |
| Backup | Rotating, latest: Apr 8 02:00 (3.2MB) |
| Active users (last 48h) | Elie, Wilton Lee, Samuel Chen, Carine, Marcelo, Karina Mustafa |
| Dimension | Score | Key Gap |
|---|---|---|
| Proactivity | 6.5/10 | Morning digests + proactive greeting context working; no post-action buttons |
| UX | 5.5/10 | Powerful but text-heavy; needs tap-to-act buttons/lists |
| "Mind Reading" | 5/10 | Proactive greeting context injection works (verified in logs); no state-transition nudges yet |
| Production Readiness | 8/10 | Running in prod, 348 deals, sync working. Tech debt: monolith + no tests |
| Pipeimob Sync | ~75% | 348/350 deals synced, one-way; no write-back |
| CEO Vision Alignment | ~60% | Defense (legal/compliance) strong; Offense (funnel/ads/SDR) absent |
| # | Issue | Severity | Status |
|---|---|---|---|
| ~~BUG-001~~ | ~~Bot down~~ | ~~CRITICAL~~ | RESOLVED — Bot is UP, running since Apr 7 18:19 |
| ~~BUG-002~~ | ~~DB empty~~ | ~~CRITICAL~~ | RESOLVED — 348 deals, 3574 checklist items, data healthy |
| ~~BUG-005~~ | ~~Migrations pending~~ | ~~HIGH~~ | RESOLVED — Schema at v22, all tables present |
| BUG-003 | OBA request failing for 16+ days (HTTP 500) | HIGH | Meta Graph API issue — check Meta Business Manager |
| BUG-006 | Adoption gap — 6 active users out of 57 corretores (~90% unused) | HIGH | Need onboarding campaign |
| BUG-007 | No external health monitoring | MEDIUM | Add Uptime Robot or equivalent |
| ~~BUG-008~~ | ~~Wizard sessions in memory (lost on restart)~~ | ~~MEDIUM~~ | RESOLVED 16/abr — Migration v23: wizard_sessions table + WizardManager 100% SQLite-backed |
| BUG-009 | index.ts is 11,120 lines — monolithic God File | MEDIUM | Maintenance risk |
| BUG-010 | 3 disconnected data islands (Pipeimob, Bot SQLite, SmartyDeed MySQL) — /status mostra "documentos faltando" mesmo quando docs existem (dados desatualizados entre sistemas). Corretores reclamam frequentemente. |
HIGH | Causa raiz: cada sistema tem sua verdade parcial. Solução: BD próprio como fonte única → backlog #32 |
| BUG-011 | Pipeimob sync: 14 errors (deals not found via API) | LOW | Likely permission/code format issues |
/checklist → [Run DD] button)whatsappbot/docs/Fase-2.5-Engajamento-Proativo-StudioImob.pdfoperations/quintoandar-tech-competitive-analysis.md/agendar)/financiamento [valor] [entrada] [prazo])/buscar, /proposta, /agendar commands working end-to-endMatrícula 398.899 — 1 proprietário, 3 registros, 0 ônus (deal_id=137)BUTTERFLY EVEN EMPREENDIMENTOS → VENDEDOR (matrícula-based)1 divergência CRÍTICA automatically flaggeddestaque.py reescrito com pesos halo effect: BELOW_MARKET 40→65, HIGH_CTR=25 (≥4%, mín 30 views), HIGH_VOLUME=10 (≥5 leads). Política por tier: PREMIERE_1 e top-16 SUPER_PREMIUM = mérito puro; bottom-4 SUPER_PREMIUM e PREMIUM = mixed (mérito + fairness). Backup: destaque.db.bak-20260427-*.cnm_generator.py + registrar T0Canal Pro — Integração Própria via API ⚡ PRIORIDADE MÁXIMA
- Motivo: A integração atual via iList/iConnect NÃO permite:
refresh_ilist_cache.py — API-based cache refresh (substituiu exportação CSV manual), 221/221 itemsprice_bump.py — rotação quinzenal +R$100 venda / +R$10 locação (refresh timestamps)run-full-sync.sh — pipeline diário 6am: cache refresh → enrich → generator → cnm → restart → validatealerta_sync_canal_pro 24/7 alerts on sync failurecanal_pro_auto_login.py — login automático com Gmail API polling (código 2FA extraído em <1s)/destaque [imóvel], /anuncio [imóvel]70fc0a1 (latest) | Feed: https://studio76-server.tail92b8aa.ts.net/feed/vrsync.xmlEstoque Vivo — Manutenção Contínua do iList via WhatsApp ⚡ EM ANDAMENTO (Sprint 1+2 entregues)
- Motivo: 85 de 215 imóveis (39%) têm validade expirada no iList; 14 com mais de 1 ano de atraso. Studio76 paga anúncios em portais para imóveis que podem não estar mais disponíveis → custo indevido + risco de propaganda enganosa.
- Solução: loop eterno semanal de 4 fases via WhatsApp bot:
dataValidade do contrato de exclusividade. ✅ CODADA 2026-04-18 (demo validado, deploy feito, aguardando piloto real)status, dataValidade, valor. Captação tem whitelist própria. Outros módulos seguem ownership por agent_code.ilist-updater.service.ts + exceção em CLAUDE.md ✅/home/egk/whatsappbot/logs/ era root:root 755 → bash não criou log → comando abortou. Zero ciclos reais no banco (só 3 demos 18/04). Corrigido: (a) sudo chown egk:egk no logs/, (b) dedup por MIN(id) em campaign-runner.ts (resolve 7 duplicatas de agent_code, incluindo 1067 Luciana≠Alex e 1068 Arnaldo≠João), (c) template HSM estoque_vivo_confirmacao_semanal confirmado APPROVED via Graph API. Dry-run pós-dedup: 33 corretores únicos, 218 imóveis, 0 erros. Próximo disparo real: segunda 27/04 09:00.estoque-vivo/plano.md · whatsappbot/src/services/estoque-vivo/CEO Financial Dashboard via Bot
- Cash flow view, simplified DRE, overdue accounts — delivered as /financeiro command
- MCP servers already exist (Granatum + StarkBank) — this is mostly prompt engineering + formatting
- CEO explicitly requested this. Highest visibility item.
- Effort: Medium | Impact: High
- Ref: implementation-plan-2026.md item 1.1.3
External Health Monitoring
- Add Uptime Robot (or similar) hitting /health endpoint
- WhatsApp/email alert when bot goes down
- Effort: Low (1h) | Impact: High (prevents silent downtime)
Split index.ts into Handler Modules
- Extract from 16,156-line monolith (era 11.120 no audit 8/abr — cresceu +45% em 22 dias) into: command.handler.ts, document.handler.ts, wizard-complete.handler.ts, intent.handler.ts
- Reduces risk of regression bugs, enables parallel development
- Effort: Medium (2 days) | Impact: High (maintainability)
Impulsionamento Digital — automação e tracking 🆕 P1 (24/04)
- Auditoria de gastos com impulsionamento (Meta Ads, Google Ads, Canal Pro, OLX/Zap turbo) por imóvel/corretor
- Reconciliação automática com Granatum (centro de custo "Impulsionamento", categoria 2535141)
- Bot pode aceitar /impulsionar [imóvel] [budget] via WhatsApp (corretor solicita, sistema dispara)
- Pendente: definir canais prioritários, política de subsídio Studio76 vs corretor, métricas de ROI por canal
- Effort: TBD | Impact: High (controle de custo + atribuição de leads)
Marketing — estratégia e execução 🆕 P1 (24/04)
- Plano integrado: branding Studio76 + conteúdo (Instagram, LinkedIn, blog), email marketing, eventos, SEO
- Integração com bot: capturar leads em landing pages → roteamento automático ao corretor via WhatsApp
- Tracking de fonte do lead até fechamento (Canal Pro/CnM/orgânico/indicação) para alocação de orçamento
- Pendente: definir agência vs in-house, calendário editorial, ferramentas (RD Station? HubSpot? in-house?)
- Effort: TBD | Impact: High (geração de leads + posicionamento de marca)
Recrutamento de Corretores — pipeline e onboarding 🆕 P1 (24/04)
- Pipeline de captação de novos corretores (atual: 57 ativos no bot.db)
- Diferencial Studio76 a comunicar: bot jurídico 24/7, automação financeira, dashboards, suporte técnico
- Onboarding automatizado: /onboarding no bot → cadastro Pipeimob + iList + WhatsApp + treinamento + assinatura contrato Clicksign
- Tracking de conversão: candidato → entrevista → contrato → primeira venda
- Integração: site de carreiras, divulgação em RE/MAX network, indicações, eventos
- Pendente: perfil ideal, comissionamento de indicação, material institucional
- Effort: TBD | Impact: Very High (escalabilidade da operação depende de mais corretores produtivos)
Studio Lead Bot — WhatsApp +55 11 97345-7166 (PLANO V2 — intent classifier + 9 buckets) ⚡ P1 (28/04, plano congelado com Yara)
- Número: +55 11 97345-7166 (WhatsApp Studio 76 Leads — separado do botjuridico)
- Status atual: Cloud API liberada 27/04 (WABA 1508012434376521, phone ID 1134727406386158, CLOUD_API native). 6 templates HSM da v1 APPROVED. Bot rodando em studio76-server:4000 em modo SHADOW (Gmail watcher posta leads de chavesnamao+zap a cada 60s, bot registra mas não dispara mensagem). 22 leads no DB (5 BOT_GREETED, 14 NEW shadow, 2 QUALIFIED, 1 QUALIFYING).
- Decisão estratégica (28/04 — Yara consultada): Wizard atual é monocaso (assume comprador querendo agendar visita). Substituir por classificador de intenção com 9 buckets cobrindo todos os cenários que a Yara atendia manualmente. Plano congelado, pronto pra codar.
### Arquitetura
- 2 entry points distintos:
- Email watcher (chavesnamao/zap/canalpro) → intent já claro = comprador de imóvel X → buyer-flow (wizard atual sobrevive)
- WhatsApp direto → intent desconhecido → intent-classifier (Claude Sonnet 4.6, system prompt com 9 buckets + few-shot da Yara) → sub-fluxo apropriado
- Suporte a mensagem livre + IMAGEM (Vision) desde o primeiro turno
- Menu fallback (list_reply Meta, até 10 itens) quando classificação ambígua
### 9 buckets de intent
1. Comprar imóvel → coleta região + valor + tipo → busca iList → roteia ao primeiro corretor ativo que aceitar
2. Alugar imóvel → idem 1
3. Anunciar/vender meu imóvel → coleta endereço + modalidade + foto → entra no rodízio de captação
4. Imóvel da placa → pede ENDEREÇO (placas Studio76 não têm código, confirmado Yara) → busca iList → se achar, roteia; se não achar, posta foto no grupo geral de corretores e escala Yara
5. Trabalhar como corretor → triagem inicial (nome, experiência, CRECI, região) → agenda entrevista com Nicolly → relatório diário pra Suzana
6. Falar com atendimento → escala Yara
7. Vendedor B2B oferecendo produto/serviço → declina educadamente
8. Verificação de corretor ("Fulano é da Studio?") → confirma nome + CRECI + telefone oficial; pinga Samuel "cliente X buscou confirmação do corretor Y"
9. Reclamação / quer falar com gerente → escala Samuel
### Rodízio de captação (bucket 3)
- Tabela captacao_rotation: 38 corretores na ordem da planilha Yara (SAMUEL → SUZANA → PAULA → NILZA → FRANCISCO → ... → EDSON), modalidade venda | locacao | ambos, cursor last_assigned_position ciclando, contador anual com backfill da planilha
- Fonte: docs.google.com/spreadsheets/d/1S9iE-AhCkJtvI4kjwPQUkXNdSiij6k8V aba "rodizio 2026" (compartilhada com eliekfouri@remax.com.br)
- Fluxo: bot identifica modalidade → próximo da fila compatível → HSM corretor_oferta_captacao com botões Aceitar/Recusar → timeout 15min sem responder = pula pro próximo → volta completa sem aceite = encerra cordial + escala Yara
- Distinção VENDA vs LOCAÇÃO: FRANCISCO/RODRIGO = ambos, KARINA = ambos+locação separada (planilha)
### Verificação de corretor (bucket 8)
- Bot busca nome no corretores.bot.db (57 ativos)
- Resposta confirma: nome + CRECI + telefone oficial. Não expõe foto/email/endereço
- Notifica Samuel via WhatsApp: "Cliente +55 XX XXXXX-XXXX buscou confirmação do corretor Fulano" (acompanhamento)
- Se nome não cadastrado → "Esse nome não está cadastrado conosco — atenção a possível golpe" + escala Samuel
### Recrutamento (bucket 5) — automação total, ZERO dependência de comando humano
- Robô faz triagem inicial e agenda entrevista com Nicolly (Nicolly continua entrevistando humanos depois)
- Confirmação automática de entrevista: bot agenda no Google Calendar da Nicolly + cria evento; depois do horário (~1h após) bot detecta status do evento (compareceu / no-show via heurística: foi confirmado, candidato respondeu lembrete prévio) — fallback: bot pinga Nicolly UMA mensagem com 2 botões (Compareceu / Não compareceu), 1 clique
- Detecção de saída da empresa: bot detecta inativação no corretores (sync diário do bot.db) — quando corretor some, conta como saída do mês
- Relatório DIÁRIO pra Suzana via WhatsApp (~18h):
- Candidatos novos hoje
- Entrevistas agendadas
- Entrevistas realizadas (compareceu)
- No-shows
- Saídas detectadas
- Template HSM: suzana_relatorio_recrutamento_diario
### Schema DB (novas tabelas)
- intent_classifications (lead_id, intent, confidence, raw_text/image_url, classified_at)
- captacao_rotation (position, corretor_id, modalidade, ativo, count_anual)
- captacao_offers (lead_id, corretor_id, status: pending/accepted/declined/timeout, offered_at, responded_at)
- recruitment_pipeline (lead_id, stage: new/triaged/interview_scheduled/attended/no_show, scheduled_with, scheduled_at, attended_at)
### Templates HSM novos a submeter (Meta, paralelo ao código)
1. corretor_oferta_captacao — UTILITY, botões Aceitar/Recusar
2. gerente_alerta_reclamacao — UTILITY
3. gerente_confirmacao_corretor — UTILITY (notificação Samuel)
4. suzana_relatorio_recrutamento_diario — UTILITY, 5 variáveis
5. corretor_lead_atribuido — UTILITY (buckets 1, 2, 4 quando bot acha corretor responsável)
6. nicolly_confirmar_entrevista — UTILITY, botões Compareceu/Não compareceu
### Sprints
- Sprint A (4-6h): classifier + buckets simples (5, 6, 7, 8, 9) + suporte a imagem (Vision) — funciona com templates v1 já aprovados
- Sprint B (4-6h): rodízio de captação (bucket 3) + buyer-flow refinado (1, 2) + bucket 4 (placa) + relatório diário Suzana — requer templates v2 aprovados (24-48h após submissão)
- Total: ~10-12h de código, 2-3 dias com aprovação de templates em paralelo
### Pendências antes de codar (resolvidas)
- ✅ Recrutamento: Nicolly continua entrevistando humanos, robô faz triagem + agendamento + relatório
- ✅ Verificação corretor: nome + CRECI + telefone OK, expõe ao cliente + ping pra Samuel
- ✅ Timeout captação: 15min
- ✅ Reclamação: escala Samuel
- ✅ Atendimento humano: escala Yara
- ✅ Especialista por região: não existe, qualquer ativo que aceitar primeiro
- ✅ Rodízio: planilha compartilhada com eliekfouri@remax.com.br
### Fora do escopo (delegado)
- Workflow YouTube/Fotos da captação (Yara processa quando corretor pega captação) → vai pro botjuridico (94728-9029) — kickoff em whatsappbot/docs/planning/captacao-midia-workflow-kickoff.md
CRM Próprio (StudioImob/SmartyDeed) substituindo Pipeimob — visão estratégica 🆕 P1 (26/04)
smartydeed-alpha) já é robusto o suficiente para começarmos a substituir o Pipeimob como sistema central de gestão de transações imobiliárias. Esta linha amarra todas as iniciativas que hoje estão dispersas em P2 sob uma direção estratégica única: a Studio 76 vai parar de pagar e depender do Pipeimob./status mente/cadastrarcliente e /user_aprovacao escrevem), upload manual, lockout >30min com 15-20 chamadas rápidas — limita qualquer automação sériafeedback_pipeimob_fallback_only.md): iList (mãe, prevalece) > StudioImob/SmartyDeed (cérebro) > Pipeimob (espelho legado, fallback durante transição)/cobrar (bot WhatsApp → Stark Bank PIX com split). A antiga regra "Pipeimob prevalece em comissão" foi REVOGADA — /cobrar está em produção, Gildasio usou hoje gerou PIX, validação final do split agendada para segunda 28/04. Após validação, declarar /cobrar 100% confiável e migrar todos os corretores. Memórias: feedback_cobrar_ccv_fonte_verdade.md, feedback_pipeimob_prevalece.md (atualizada), project_cobrar_autonomo.md.project_migracao_studioimob.md — 5 fases (Sync Inteligente ✅, Bot como Entrada, Write-Back Pipeimob via Puppeteer, Espelho Funcional, Desligamento Natural)/novavenda no bot popular SmartyDeed direto.project_migracao_studioimob.md, plano-migracao-studioimob.md, plano-migracao-studioimob-ceo.pdfERP Próprio Studio76 — substituição progressiva do Granatum 🚧 P1 — F0 código pronto 01/05, falta executar bootstrap no cloudvero
bank-statements/ paralelo), mensalidade que sobe sem entregar mais, contaminação por lançamentos de corretores, API/UI insuficientes para fluxos novos (DICT, splits, recorrências por regra, anexos Drive, dupla assinatura). Direção estratégica do CLAUDE.md raiz já prevê substituir SaaS travados (Pipeimob → SmartyDeed, C2S → bot próprio); Granatum entra na mesma lista.financeiro.studio76@gmail.com com cobrança/comprovante/dados PIX (recorrente Contabem + ad-hoc)starkbank.PaymentRequest (não replicar workflow no ERP)whatsappbot/src/erp/ (reuso services), painel admin Filament-PHP (mesma stack do StudioImob — coerência arquitetural), email scanner reaproveita contas-a-pagar/ MCP existente.recurring_rules → cron diário cria draft → WhatsApp Elie aprova → PaymentRequest Stark → Samuel libera web Stark → webhook conciliafinanceiro.studio76@gmail.com → scanner parse → DICT validation → WhatsApp Elie aprova → PaymentRequest → Samuel libera → ERP responde solicitante por email com comprovante automáticofee_tracker.db + Stark Invoices em receivables + trigger NFPaymentRequest + webhook conciliação (4d)financial-services/erp/infra/)whatsappbot/prisma/schema.prisma, npm scripts erp:import:*)CLAUDE.md raiz atualizado com "Granatum → ERP próprio" na lista de SaaS substituíveisfinancial-services/erp/infra/{docker-compose.yml, initdb/01-extensions.sql, README.md}whatsappbot/prisma/schema.prisma (15 modelos: AccountChart, CostCenter, Supplier, Customer, BankAccount, PaymentRequestInternal, Payable, Installment, RecurringRule, Receivable, Transaction, TransactionTag, TransactionEvent, Attachment, ImportRun)whatsappbot/src/erp/scripts/import-granatum-{categorias,cost-centers,pessoas,lancamentos}.tswhatsappbot/src/erp/scripts/validate-against-granatum.ts → gera financial-services/erp-validacao-f0-{stamp}.mdprisma.service.ts, granatum-api.service.ts, import-runner.tserp:import:categorias|cost-centers|pessoas|lancamentos, erp:validate, prisma:migrate:*/app/credentials/erp-postgres.envdocker compose up -d em financial-services/erp/infra/DATABASE_URL no whatsappbot/.envnpx prisma migrate dev --name init + npx prisma generatenpm run erp:import:* na ordem (categorias → cost-centers → pessoas → lancamentos)npm run erp:validate → conferir relatórioverified_suppliers), formato Contabem definido tarde (mitigação: SPED ECD é padrão CFC, baixo risco de rejeição).financial-services/PLANO-ERP-STUDIO76.md (plano completo), financial-services/bank-statements/ (base operacional), financial-services/CLAUDE.md (regras de pagamento), project_erp_proprio.md (memória), item #9 (CRM próprio — mesma filosofia)Migração canal-pro-feed + dashboards studio76-server → cloudvero (decommission services físico) 🆕 P1 (01/05)
/dashboard e /financeiro lêem bot.db e statements.db stale desde 30/04 (snapshots congelados na migração dos bots). Bot vivo escreve no cloudvero, dashboards no studio76 mostram dados de ontem e nunca mais atualizam. Solução é migrar canal-pro-feed/ (XMLs portais + algoritmos de melhora dos anúncios + 3 webpages) e bank-statements/ pro cloudvero, onde os dados vivos estão.bot.remaxstudio76.com.br (registrado GoDaddy 01/05, pending Registro.br até 7 dias). Apex livre pra futura landing page institucional.operations/PLANO-MIGRACAO-CANAL-PRO-CLOUDVERO.md (12 fases, ~3h30 trabalho ativo, ~2 semanas wall clock).bot.remaxstudio76.com.br (não DuckDNS)claude_cost_watchdog aposenta na Fase 9.com.br ativar (~até 7 dias): Fase 1.5 (DNS + cert SSL) + Fase 4.5 (webhooks Meta + Stark)sentinela-heartbeat.service (jail SmartyDeed escritório). Máquina não desliga, só sai de produção.git push continua atualizando ambos hostnames (auto-deploy preservado).3.5. Crontab cleanup pós-split deal 1080-21 ⏰ (gatilho: segunda 28/04)
- Após o monitor confirmar split funcional, remover do crontab do egk@studio76-server as 2 linhas one-shot (0 12 28 4 * e 0 18 28 4 * rodando monitor_split_1080_21.py) — senão re-disparam 28/04/2027.
- Effort: Trivial (5min) | Impact: Low (apenas higiene)
financeiro.studio76@gmail.comimplementation-plan-2026.md item 1.1.64.1. Auto-AP via PDF no WhatsApp — classificador + OCR + preview 🆕 P2 (29/04)
- Tese: Elie/Samuel/Yara/Carine/Nicolly/Wilton mandam PDF de boleto/NF/cobrança no WhatsApp e o bot lança automaticamente em contas a pagar — sem comando, sem /. Risco zero porque Elie+Samuel aprovam pagamento real via dual-sig Stark; mandar PDF não dispara pagamento, só cria draft AP.
- Como funciona:
1. Document handler do bot intercepta PDF/imagem (já existe — usado em CCV, comprovantes, fotos)
2. Classificador zero-shot (Claude Haiku 4.5) decide tipo: {boleto, nfse, comprovante_pagamento, ccv, outro}
3. Se for boleto/NF/cobrança: roda OCR (já existe — OCR Improvements 6 Phases COMPLETE em Testing) + extrai linha digitável + valor + vencimento + CNPJ pagador
4. Lookup fornecedor (bot.db.verified_suppliers + DICT BACEN se chave PIX presente)
5. Cria draft em payment_requests_internal (ou MCP contas-a-pagar no estado-atual)
6. Devolve preview pro remetente: "Boleto Contabem R$ 1.571 vence 05/05. Confirma encaminhar pra aprovação? [Sim] [Editar valor] [Não, é outra coisa]"
7. Confirmado → entra na fila do Elie no botjuridico (mesma fila do email)
8. Confidence baixo → fallback "É boleto? [Sim] [Não]" antes de processar
- Público autorizado a mandar: Elie, Samuel, Yara, Carine, Nicolly, Wilton (lista whitelist por phone number no bot.db.users)
- Reuso: OCR pipeline existente (Testing), MCP contas-a-pagar (parsers + dedup + supplier lookup), document handler do botjuridico, DICT validation
- Diff técnico:
- Novo: classificador de tipo de documento (1 prompt Haiku)
- Novo: hook no document handler ANTES do roteamento atual (CCV/comprovante/etc)
- Novo: whitelist de remetentes em bot.db
- Novo: preview UX com botões inline
- Reuso: tudo o resto
- Encaixe estratégico: entrega antecipada da Fase 2 do ERP (#10) — começa escrevendo no MCP contas-a-pagar atual, troca destino pro Postgres novo quando ERP F2 chegar. Sem reescrever UX.
- Tradeoffs:
- ✅ Fix-in-chat puro — encaminha boleto no WhatsApp e clica Aprovar, zero email/comando
- ✅ Acelera ciclo Yara→pagamento de horas (email) pra minutos (WhatsApp)
- ⚠️ Classificador errado em PDF ambíguo → preview indevido (mitigação: confidence threshold + fallback "É boleto?")
- ⚠️ Volume alto de PDFs irrelevantes mandados por engano → ruído. Mitigação: silent-on-confidence-below-X (ignora sem responder)
- Decisões pendentes:
- Bot que recebe: botjuridico (94728-9029) ou número novo dedicado a financeiro? Recomendado botjuridico (Elie/Samuel/Wilton já usam; Yara/Carine/Nicolly entram via whitelist)
- Yara/Carine/Nicolly têm WhatsApp com botjuridico hoje? Confirmar phones em bot.db
- Roadmap:
- Fase A (~1d): classificador + hook + preview UX, escreve no MCP atual
- Fase B (~0.5d): whitelist remetentes + telemetria de classificação errada
- Fase C (junto com ERP F2): trocar destino pro payment_requests_internal Postgres
- Effort: Low-Medium (~1.5d Fase A+B) | Impact: High (substitui email pra solicitantes WhatsApp-first; alivia Yara/Carine/Nicolly/Wilton)
- Refs: item P1 #10 ERP Próprio Fase 2, MCP contas-a-pagar, whatsappbot/src/handlers/document.handler.ts
Granatum Categorization (100%)
- Categorize all Granatum entries with correct cost centers
- Effort: Medium | Impact: Medium
- Ref: implementation-plan-2026.md item 1.1.2
Pipeimob → Granatum Commission Reconciliation
- MCP tool: reconcile_pipeimob_granatum
- Auto-compare commission data between CRM and accounting
- Effort: Medium | Impact: Medium
- Ref: implementation-plan-2026.md item 1.1.5
Bot UX Polish Sprint
- Add typing indicators before long operations (DD, OCR, CCV)
- Reduce message fragmentation ratio (4.1:1 → <2.5:1)
- Add WhatsApp list messages (up to 10 options vs 3 buttons)
- Confirmation before destructive state transitions
- Extend conversation expiry from 2h → 4h
- Effort: Medium | Impact: Medium
7.1. Abstrair comando /cobrar — natural language + auto-resolve (from session 2026-04-24 — Elie/Gildasio demo)
- Aceitar cobrar, cobrar comissão, cobrar parcela 2, gerar pix (sem / obrigatório) via intent classifier
- Auto-detectar parcela atual sem precisar p<N> quando há cronograma de parcelas no CCV + sync com pagamentos externos (Pipeimob legacy + Stark Bank histórico de invoices)
- Auto-resolver deal via:
(a) único deal do corretor em estado COMPLETE/SIGNING ✅ implementado 24/04
(b) extração do último deal mencionado na conversa
(c) deals com parcelas pendentes (cronograma vs invoices emitidos)
- Listar com botões interativos quando 2+ candidatos (em vez de pedir digitação)
- Validar CPF/CNPJ via DICT BACEN no momento da extração CCV → se algum não for chave PIX, perguntar chave alternativa via WhatsApp e atualizar verified_suppliers
- Backfill clicksign_document_key em deals legados via Pipeimob documentos_contrato (Pipeimob deprecation: one-shot script)
- Effort: Medium | Impact: High (Gildasio/Samuel/Carine sem precisar lembrar sintaxe)
- Ref: sessão 2026-04-24, plano project_cobrar_autonomo.md (5 fases concluídas), próximo passo refinamento UX
Agent Onboarding Campaign ✅ PHASE 1 COMPLETE
- ~~6 active users out of 57 corretores — need targeted WhatsApp outreach~~
- Executed (Apr 10 2026):
auditoria-pdfs-corretores/)auditoria_ilist_2026 created (PENDING Meta review, ID: 1502036048174090)/auditoria bot command deployed — brokers can request their PDF anytimepython3 campanha_auditoria_corretores.py send-templates-prodDiligência Prévia no Contrato de Gestão — com Dr. Wilton (from Intake Log — Elie)
Ref:
operations/quintoandar-tech-competitive-analysis.md
Strategy: Match QuintoAndar's tech so corretores have same/better tools while keeping full 6% commission.
AI Property Search via WhatsApp (NLP + Claude + iList/iConnect)
/ilist with semantic search layerDigital Proposal/Counter-Offer Flow
Visit Scheduling via Bot (/agendar)
Financing Simulation (/financiamento [valor] [entrada] [prazo])
Automated CMA/Valuation (/avaliar [endereço]) ✅ iCONATUS INTEGRADO VIA PLAYWRIGHT
ACM/PLANO-AUTOMACAO-ACM.md (7 fases, ~60h, 5 semanas)ACM/src/geoanalise_client.py — cliente automatizado Playwrightgeoanalise_client.py no bot + gerar PDFAuto-Generate Listing Descriptions from Photos (Claude Vision)
Multi-Portal Listing Syndication (Canal Pro extraído → item #0 P1)
tecnologiacnm.github.io/cnm-xml-documentation/)cnm_generator.py — XML generator (221 imóveis, 2.044KB XML, 30 destaques)cnm_mappings.py — 20 property type maps, 70+ feature→area mapsconfig.py — CNM_QUOTA_DESTAQUE=30, OUTPUT_CNM_XML_PATHserver.py — /feed/chavesnamao.xml route + cache + status + regeneraterun-full-sync.sh (pipeline diário 6am)ai_descriptions.py)https://studio76-server.tail92b8aa.ts.net/feed/chavesnamao.xmlEliminar C2S (Contact2Sale) — Middleware CRM Interno 🔥
lead_auditor.py, CnM tem API de leads, ImovelWeb via API)/novavenda wizard pré-preenchido)lead_auditor.py — scraper Canal Pro leads (114/121 correct routing, 94.2%)c2s_scraper.py — scraper C2S (1.197 linhas, audit completo)/novavenda wizardsearch_properties, get_property_details, list_neighborhoods, get_agency_info. Streamable HTTP via Tailscale Funnel HTTPS./api/v1/properties, /api/v1/search?q=..., /api/v1/neighborhoodsRealEstateListing + sitemap.xmlilist-enrichment.json)ai-descriptions-cache.json)property_discovery_mcp.py (FastMCP, porta 5077, user systemd, 232 imóveis)/api/v1/properties, /api/v1/search, /api/v1/neighborhoods) + proxy /mcp no Flask + /.well-known/mcp.jsonhttps://studio76--eliekfouri-g8h8.run.tools) + registro mcp.so em andamentoproperty_store.py — data layer (232 imóveis, 95 bairros, LGPD-safe)property_discovery_mcp.py — FastMCP server porta 5077, systemd user service (property-discovery-mcp.service)server.py atualizado — proxy /mcp → 5077, REST API /api/v1/*, /.well-known/mcp.jsonhttps://studio76-server.tail92b8aa.ts.net/feed/mcpinitialize ✅ · list_neighborhoods (95 bairros) ✅ · search_properties ✅relatorio-ai-property-discovery-ceo.pdf, /memories/session/plan.md/captar + Follow-Up Proativo)/captar → rascunho iList → follow-up proativo → contrato de representação auto-gerado → ClickSign → KPIs de desempenho por corretor./captar cria rascunho iList com dados mínimos (corretor+tipo+transação), consulta GeoSampa, retorna ID + SQL + link. Tabelas captacoes + captacao_events no SQLite./captacoes (painel).ccv-latex.service.ts), preenchimento automático, envio via ClickSign (clicksign.service.ts já em produção). Testemunhas: Wilton Lee + Elie (substitui Yara).captacao_events), /desempenho [corretor], /ranking, digest semanal gestor. Métricas: taxa conversão, tempo até visita, tempo até contrato, responsividade.ccv-latex.service.ts — engine LaTeX→PDF (adaptar para Contrato de Representação)clicksign.service.ts — pipeline completo de assinatura digital (produção)contrato_representacao_parser.py — parser OCR de contratos existentesilist.service.ts — já tem createListing() + updateListingStatus() como baseoperations/PLANO-CONSULTA-IMOVEL-PRIMEIRO-CONTATO.mdTransição PipeImob → BD Próprio (Fonte Única de Verdade) 🔥 NOVO
/status mostra "documentos faltando" incorretamente porque cada sistema tem verdade parcial. Corretores reclamam frequentemente. À medida que corretores usam menos o Pipeimob, dados ficam cada vez mais desatualizados.pipeimob_statement.py como referência Bubble.io scraper).refresh_ilist_cache.py já existe como base)./status. Resolve falsos "documentos faltando".pipeimob_statement.py — Playwright scraper para Bubble.io/Pipeimobrefresh_ilist_cache.py — cache de dados iList via APIRelatório de Gestão 🆕
Análise de Últimos Vendidos — Planilhas ITBI da Prefeitura 🆕
itbi_transactions ou similar)/ultimos-vendidos [bairro] ou /itbi [endereço]Jurídico — Automação Consolidada 🆕
/dd) — funcionando em produção/gerarccv) — 6 templates, funcionandoJornada Diária do Corretor — Tracking de Atividades automático 🆕 P2 (28/04)
/prospectar [contato] | A criar (FASE 2) |/agendar [imovel] | A criar (FASE 2) — reusa wizard /agendar-fotos |/captar cria rascunho iList | ✅ Existe (#30 FASE 1) |/avaliar [endereço] | ✅ Existe |/visita [imovel] [cliente] | A criar (FASE 2) |/proposta [imovel] [valor] | A criar (FASE 1, ref. QuintoAndar Tech-Match) |/gerarccv + ClickSign + bot detecta status SIGNED | ✅ Existe |/cheguei) ou geofence | A criar (FASE 3) |corretor_atividades (event sourcing por corretor_id, atividade_tipo, deal_id?, occurred_at); cron noturno consolida por semana ISO; comando /jornada retorna PDF idêntico ao do RE/MAX preenchido com o que o bot já sabe (métricas 4, 5, 9 funcionam dia 1)./prospectar, /agendar, /visita, /proposta (todos thin wrappers que só registram evento + retornam confirmação curta). UX de 1 linha: corretor manda /visita 601301080-21 João Silva e pronto./cheguei para reuniões. Roberto/Carine ganham relatório semanal de presença./jornada-equipe para Roberto/Carine/Samuel com ranking, evolução semanal, gargalos identificados (ex: corretor X tem 50 prospecções mas 0 propostas → problema de qualificação)./captar, fizer ACM com /avaliar, gerar CCV com /gerarccv etc. recebe seu Tracking preenchido. Quem não usa o bot recebe Tracking vazio — incentivo natural à adoção sem cobrança./funil), #30 FASE 6 (KPIs de captação), #33 (Relatório de Gestão). Todos os três consomem corretor_atividades.Automação das atividades da Yara e da Nicolly — mapa para eliminar trabalho manual 🆕 P2 (28/04)
Atividades - Yara 12.2025.docx, atualizado 12/12/2025) lista 7 categorias com ~40 sub-atividades. Nicolly responde por triagem + entrevista de candidatos a corretor. A maioria dessas tarefas é candidata direta a automação via bot WhatsApp + integrações já existentes (Stark Bank, Granatum, ClickSign, Drive, iList, Pipeimob).Quick map atividade ↔ automação existente/em desenvolvimento:
| Atividade Yara | Automação que cobre | Status |
|---|---|---|
| Calcular reembolso de fotos + repasse David | #29 /agendar-fotos Fase 5 (Invoice PIX corretor D+30) + Fase 6 (PaymentRequest fotógrafo D+7) |
⏳ Em desenvolvimento (plano aprovado 18/04) |
| Subir fotos/vídeos ao YouTube + compartilhar com corretores | botjuridico whatsappbot/docs/planning/captacao-midia-workflow-kickoff.md |
⏳ Em desenvolvimento |
| Atendimento WhatsApp/telefone + rodízio de leads + planilha de leads | #8 Studio Lead Bot v2 (WhatsApp +55 11 97345-7166, intent classifier 9 buckets) | ⏳ Em codificação (shadow mode em prod, Sprint A iminente) |
| Ficha de candidatos (Assertiva → planilha + agenda) | #8 bucket 5 + #20 Assertiva integration (já em produção) | ✅ Em produção (#20) + ⏳ #8 |
| Arquivar Contrato de Representação | #30 FASE 5 (CR auto-gerado + ClickSign + Drive) | ⏳ Em fila |
| Confirmar Representações/Vendas/Locações com corretores | #36 Tracking de Atividades (event sourcing corretor_atividades) + #19 Sales KPI Dashboard |
⏳ Em fila |
| Ranking + perfil de Representações | #19 (/funil, /desempenho, /ranking) + #33 Relatório de Gestão |
⏳ Em fila |
| Digitalização/OCR de documentos | data-capture.service.ts (auto-OCR de fotos via WhatsApp) |
✅ Em produção |
| Solicitar portador (Samuel/Suzana) | /portador — a criar, item planejado dentro de #37 |
🆕 A criar |
| Chaves de imóveis | /chave [imóvel] — a criar, item planejado dentro de #37 |
🆕 A criar (Low) |
| Reposição suprimentos + lembretes Samuel | /suprimentos — a criar, item planejado dentro de #37 |
🆕 A criar (Low) |
| Lembrete lixo terça/sexta | Cron WhatsApp simples — item planejado dentro de #37 | 🆕 A criar (Trivial) |
| Placas, crachás, uniformes (confecção + cobrança) | Padrão /agendar-fotos aplicado a fornecedores externos |
🆕 A planejar |
| Artes de vendidos + ranking + painel (balão/termômetro/foto) + certificados | Generator Claude+Imagen+LaTeX (cluster único) | 🆕 A planejar |
| Café, recepção, abrir portas, cópias físicas, orçamentos diversos, cartão de visita, pastas/envelopes | — | ❌ Não automatizar (físico/julgamento humano) |
Detalhe completo abaixo, por bloco do documento original (Yara 12.2025):
1) Organização do escritório (porta/luzes/café/lixo/reposição)
| Atividade | Plano | Status |
|---|---|---|
| Abrir/fechar janelas, persianas, ar condicionado, luzes | Domótica simples (smart plugs + cron + presence) — fora do bot, projeto à parte | Não planejado (P3) |
| Fazer/organizar café (dia-a-dia + mentorias + reuniões) | Manual — não automatizável (parte do "host" do escritório) | Não automatizar |
| Retirar lixo terças (Nilda não vem) + lembrar Samuel sexta | Cron + lembrete WhatsApp pra Samuel terça 17h e sexta 16h | A criar (Trivial, ~1h) |
| Reposição papel higiênico/toalha/detergente/sabonete/açúcar/mexedores | /suprimentos no bot — Yara declara estoque baixo, bot abre pedido recorrente + alerta Roberto | A criar (Low, ~3h) |
| Avisar Samuel quando acabar café/manteiga/leite | Mesma lógica acima — botão "acabou" → notifica Samuel | A criar (Trivial, ~1h, junto com /suprimentos) |
2) Atendimento — recepção, telefone, WhatsApp, rodízio de leads
| Atividade | Plano | Status |
|---|---|---|
| Recepção / abrir portas | Manual (host físico) | Não automatizar |
| Telefone + WhatsApp + rodízio de leads (Telefone/WhatsApp/Nonstop/C2S) preencher planilha | Item #8 — Studio Lead Bot v2 cobre TODO esse bloco: classifier de intenção, rodízio de captação 38 corretores, escalação humana só onde precisa | ✅ Em produção (shadow mode), full v2 em codificação |
| Preencher planilha de leads | Bot escreve direto em intent_classifications + captacao_offers (item #8) — planilha vira read-only espelho | ✅ Coberto por #8 |
3) Compras (material, placas, crachás, cartão, pastas, uniformes, orçamentos)
| Atividade | Plano | Status |
|---|---|---|
| Material de limpeza / higiene / descartáveis | /suprimentos (mesmo do bloco 1) | A criar |
| Material de escritório | Idem | A criar |
| Placas (confecção + conferência + cobrança) | Bot integra com fornecedor de placas: /placa [imóvel] cria pedido, monitora status, gera Invoice PIX cobrança ao corretor (igual ao item #29 de fotografia) | A planejar |
| Crachás (confecção + conferência + confirmação) | Sub-fluxo do /onboarding (item #7) — bot pede foto + dados, dispara confecção, rastreia entrega | A planejar |
| Cartão de visita do escritório | Yara concentra pedido manual — baixa frequência, manter manual | Não automatizar |
| Pastas / envelopes | Manual (consumível baixo volume) | Não automatizar |
| Camisetas uniforme (conferência + confirmação + cobrança) | /uniforme no bot — corretor escolhe tamanho, bot dispara pedido + Invoice PIX | A planejar |
| Orçamentos diversos | Manual — exige julgamento humano | Não automatizar |
4) Arquivo (Contratos, fotos, documentos cartório, chaves, ficha de candidatos)
| Atividade | Plano | Status |
|---|---|---|
| Arquivar Contrato de Representação | Item #30 FASE 5 — CR auto-gerado + ClickSign + Drive | ⏳ Em fila |
| Subir fotos/vídeos ao YouTube + compartilhar com corretores | Workflow delegado pro botjuridico (whatsappbot/docs/planning/captacao-midia-workflow-kickoff.md) — bot recebe Drive, sobe YouTube, posta link | A criar (4-6h) |
| Documentos de cartório (organizar + pedir portador retirar/entregar) | Bot integra com Leandro (portador atual) via /portador — Yara/Samuel/Suzana abrem solicitação, bot rastreia + lembra entrega | A planejar |
| Chaves de imóveis à venda | Tabela chaves_imoveis — quem está com a chave de qual imóvel; bot consulta /chave [imóvel] retorna paradeiro | A criar (Low, ~4h) |
| Ficha de candidatos (após Assertiva → Planilha Geral + aniversário na agenda) | Item #8 bucket 5 (recrutamento) + Assertiva integration (#20 já em produção) — bot grava ficha em recruitment_pipeline, agenda aniversário no Google Calendar | ✅ Coberto por #8 + #20 |
5) Apresentação de resultados (Representações, Vendas, Locações, Ranking, artes, certificados)
| Atividade | Plano | Status |
|---|---|---|
| Organizar Representações do mês (criar pasta, arquivar contrato, verificar data assinatura) | #30 FASE 5 automatiza criação de pasta + ClickSign + arquivamento | ⏳ Em fila |
| Confirmar Representações/Vendas/Locações com corretores | Bot puxa direto do corretor_atividades (item #36) + Pipeimob/SmartyDeed — Yara para de ligar pra cada corretor | ⏳ Depende de #36 |
| Ranking Representações e Vendas | #19 Sales KPI Dashboard + #36 jornada-equipe | ⏳ Em fila |
| Perfil das Representações (gráficos, tipo de imóvel, bairro) | Mesmo dashboard do #19 + filtros | ⏳ Em fila |
| Artes de vendidos + ranking (post WhatsApp/Instagram) | Generator template Claude + Sora/Imagen — bot gera arte ao detectar venda fechada | A planejar (Medium) |
| Certificados | Template LaTeX (reusa engine ccv-latex.service.ts) auto-preenchido por evento | A criar (Low, ~3h) |
6) Fotos (cálculo de reembolso, repasse para David)
| Atividade | Plano | Status |
|---|---|---|
| Calcular reembolso por imóvel + enviar David (cobrança) | Item #29 — /agendar-fotos (Fase 5) cobre 100% — Invoice PIX D+30 corretor | ⏳ Em fila (Fase 5) |
| Passar valor total mensal para David (pagamento fotógrafo) | Item #29 Fase 6 — PaymentRequest D+7, Granatum sync automático | ⏳ Em fila (Fase 6) |
7) Solicitação de portador + cópias + digitalização + artes painel
| Atividade | Plano | Status |
|---|---|---|
| Solicitar/acompanhar portador (apenas Samuel/Suzana — outros pedem direto Leandro) | /portador (mesmo do bloco 4) com ACL Samuel/Suzana | A planejar |
| Tirar cópias de documentos quando tem escritura | Manual (operação física) — não automatizável sem hardware | Não automatizar |
| Digitalizar documentos | Manual (scanner físico) — bot pode receber foto via WhatsApp e fazer OCR (já existe data-capture.service.ts) | ✅ Parcialmente automatizado |
| Artes do painel (Representações + Transações: balão, termômetro, foto) | Generator template (mesmo do bloco 5 — "artes de vendidos") | A planejar |
Fonte oficial (Samuel Chen, WhatsApp 28/04/2026 11:06 + 11:14) — escopo confirmado pelo CEO em duas mensagens.
Quick map atividade ↔ automação existente/em desenvolvimento:
| Atividade Nicolly | Automação que cobre | Status |
|---|---|---|
| Impulsionamento Google Ads + Meta (gestão + recrutamento) | #5 Impulsionamento Digital P1 + #6 Marketing P1 | ⏳ Em fila P1 |
| Monitoramento de campanhas + direcionamento de leads (Samuel marcou: AUTOMATIZÁVEL) | Conector Meta Ads/Google Ads API → relatório bot + leads viam #8 Lead Bot v2 | 🆕 A criar (depende de #5 + #8) |
| Agendamento inicial com candidatos | #8 bucket 5 (Calendar Nicolly via bot) | ⏳ Em fila (#8 Sprint A) |
| 1ª entrevista com candidato (humana) | — | ❌ Não automatizar (intencional) |
| Confirmar comparecimento / no-show | #8 template nicolly_confirmar_entrevista (botões 1-clique) |
⏳ Em fila (#8 Sprint A) |
| Solicitar documentos + checagem + contrato de novo associado | /onboarding-corretor — a criar, reusa #20 Assertiva + #30 FASE 5 ClickSign |
🆕 A criar (Medium) |
| Agenda de treinamento | /agendar-treinamento — a criar (Calendar coletivo + lembretes) |
🆕 A criar (Low) |
| Preparar material de integração (kit dia 1) | Cluster com bloco 3 da Yara (crachás+cartão+uniforme) + #7 Recrutamento P1 | 🆕 A planejar |
| Reportar status de recrutamento pra Suzana | #8 template suzana_relatorio_recrutamento_diario (DIÁRIO 18h) |
⏳ Em fila (#8 Sprint B) |
| Detectar saída de corretor | #8 sync diário corretores bot.db |
⏳ Em fila |
Detalhe completo abaixo, por categoria:
A) Marketing / Mídia paga / Lead ops
| Atividade | Plano | Status |
|---|---|---|
| Impulsionamento de campanhas Google Ads + Instagram (Meta) — focos: (a) imóveis de gestão (vender estoque) e (b) recrutamento de corretores | Conecta diretamente ao item #5 (Impulsionamento Digital P1) + item #6 (Marketing P1): Studio paga, Nicolly opera. Bot pode automatizar criação de criativos (Claude + Imagen), bidding sugestões, recorte de público — execução continua humana enquanto a estratégia amadurece | Em fila P1 (#5, #6) |
| Monitoramento de campanhas + direcionamento de leads (Samuel marcou como AUTOMATIZÁVEL) | Bot agrega métricas de Meta Ads + Google Ads via API (CTR, CPL, CPC, conversões), gera relatório diário Nicolly+Samuel; leads recebidos via webhook entram no #8 Lead Bot v2 e seguem rodízio/intent classifier sem fricção humana | A criar (Medium, ~3 dias) — depende de #5 + #8 |
B) Recrutamento de corretores
| Atividade | Plano | Status |
|---|---|---|
| Agendamento inicial com candidatos | Item #8 bucket 5 — bot agenda no Google Calendar da Nicolly direto, sem Nicolly digitar | ⏳ Em fila (#8 Sprint A) |
| Primeira entrevista inicial com candidato (humano) | Mantém — é o ponto de avaliação humana que NÃO se automatiza (decisão consciente: pessoas avaliando pessoas) | Não automatizar (intencional) |
| Confirmar comparecimento / no-show pós-entrevista | Bot pinga template nicolly_confirmar_entrevista 1h após horário com botões Compareceu/Não compareceu | ⏳ Em fila (#8 Sprint A) |
| Solicitar documentos do candidato + checagem + inserir no sistema (contrato de novo associado) | Sub-fluxo /onboarding-corretor: bot pede docs (RG/CPF/CRECI/comprovante endereço), valida via Assertiva (#20 já em produção), monta contrato de associação, envia ClickSign, registra no Pipeimob/SmartyDeed/corretores bot.db | A criar (Medium, ~5 dias) — reusa #20, #30 FASE 5, ClickSign service |
| Agenda de treinamento do novo corretor | Bot orquestra: ao detectar contrato assinado → cria evento de treinamento no Calendar coletivo, convida corretor + treinadores, manda lembrete D-1, pede confirmação D-0 | A criar (Low, ~2 dias) |
| Preparar material de integração (entrega no dia da integração) | Checklist + template no Drive: bot gera kit personalizado (crachá, cartão visita, manual onboarding, acessos a sistemas, foto de perfil pra iList) e dispara responsáveis (Yara/Roberto/Carine) automaticamente. Cobre também crachás + cartão visita do bloco 3 da Yara | A planejar (Medium) — agrupa com #7 (Recrutamento P1) + bloco 3 Yara |
| Reportar status de recrutamento pra Suzana | Bot manda relatório DIÁRIO ~18h via template suzana_relatorio_recrutamento_diario | ⏳ Em fila (#8 Sprint B) |
| Detectar saída de corretor da empresa | Bot detecta inativação no corretores (sync diário bot.db) | ⏳ Em fila (#8) |
| Status | Yara | Nicolly |
|---|---|---|
| ✅ Em produção / coberto | 3 (atendimento+rodízio leads, ficha candidatos, OCR documentos) | 0 |
| ⏳ Em fila (item já no board) | 7 (CR, fotos×2, ranking, perfil, fotografia ×2) | 5 (impulsionamento #5/#6, agendamento candidato, confirmação, relatório Suzana, detecção saída) |
| A criar (Low/Trivial/Medium) | 6 (lixo lembrete, suprimentos×2, YouTube uploader, chaves, certificados) | 3 (monitoramento campanhas+leads, /onboarding-corretor, agenda treinamento) |
| A planejar (Medium+) | 6 (placas, crachás, uniformes, portador, artes vendidos, artes painel) | 1 (kit material integração — cluster com bloco 3 Yara) |
| Não automatizar (físico/julgamento) | 8 (porta/luz, café, recepção, cartão visita, pastas/envelopes, orçamentos, cópias físicas, entrevista N/A) | 1 (entrevista humana) |
| Total mapeado | 30 | 10 |
/suprimentos + /chave [imóvel] + lembrete lixo (somam ~10h, eliminam 5 atividades manuais)/agendar-fotos) — destrava bloco 6 da Yara (cálculo reembolso + repasse David)/home/egk/Downloads/WhatSie/Atividades - Yara 12.2025.docx (fonte original RH/Operações), leadbot/docs/studio-lead-bot-plano-ceo.md (Nicolly)/agendar-fotos), #30 FASE 5 (CR ClickSign), #36 (Tracking de Atividades), #19 (KPI dashboard), #33 (Relatório de Gestão)Plano 360° do Corretor — briefing matinal + saneamento + onboarding contextual 🆕 P2 (29/04)
operations/PLANO-360-DO-CORRETOR.md (335 linhas, draft aguardando aprovação CEO)corretor_phone='sync-script'). Blocker compartilhado com #36 Tracking — sem isto, nem #36 nem #38 funcionam direito.corretor_atividades pra montar o briefing/funil command with pipeline visualization)implementation-plan-2026.md item 1.3.4/captar: Assertiva lookup CPF→nome do proprietário (já em produção há semanas)/dd A) Enriquecimento automático ✅: due-diligence.service.ts agora chama lookupPessoaByCpf SEMPRE que CPF resolvido, grava date_of_birth, nome_mae, situacao_cpf, address, phone, email em deal_parties via COALESCE (não sobrescreve docs). Migration v29 aplicou colunas novas em produção./dd B) CPF → CNPJs vinculados ✅: novo lookupEmpresasVinculadasByCpf (tenta endpoint dedicado /localize/v3/empresas-vinculadas, fallback para campo participacoes no payload Localize padrão). CNPJs vinculados são anexados ao parties[] mid-loop e o pipeline de certidões PJ (Receita/JUCESP/protestos/processos via Plexi) roda automaticamente. Corretor recebe notificação "🏢 X aparece como sócio de N empresa(s)".whatsappbot/src/services/due-diligence.service.ts:370-430 · whatsappbot/src/services/assertiva.service.ts:395-455 · Migration v29 em whatsappbot/src/db/database.tsACM/src/geoanalise_client.py funciona diretamente nos apps Shiny/auth/application-preferences:iconatus.shinyapps.io/geoanaliseStudio76_105/implementation-plan-2026.md item 1.5.xfisgar_anuncios.json já existe como formato)Virtual Tours (Matterport integration) — 3D tour links in listings
Photo Rendering & AI Virtual Staging Evolution (/staging → /render)
/staging already works (Gemini 2.5 Flash) for empty room → furnished stagingwhatsappbot/src/services/staging.service.ts (180 lines, fully functional)Sistema de Agendamento de Fotografia End-to-End — /agendar-fotos 🆕 PLANO APROVADO 18/04 (escopo completo)
/home/egk/.claude/plans/shimmying-wiggling-engelbart.md/solicitar-pagamento-fotografo) para incluir agendamento proativo, monitor de Drive, publicação automática no iList após aprovação e motor de lembretes escalonados — princípio fix-in-chat./agendar-fotos → wizard (fotógrafo preferido + datas) → confirmação bilateral → lembrete pré-shoot → fotógrafo informa valor + sobe Drive → monitor detecta upload → corretor aprova/rejeita → publica no iList + cria Invoice PIX corretor (D+30) para diferença → D+7 cria PaymentRequest fotógrafo (aguarda aprovação Elie web UI) → DONE. Nag automático em cada atraso.PaymentRequest (Elie aprova web UI). Corretor paga diferença via Invoice PIX D+30.fotografos, corretor_fotografo_preferencia, photo_subsidy_table, photo_sessions, photo_session_events, photo_session_reminders.photo-session, photo-scheduling, photo-subsidy, photo-delivery-monitor, photo-payment, photo-ilist-publisher, photo-nag./agendar-fotos, /setup-fotografos, /relatorio-fotografia [mes] (replica formato Excel atual: COD | ENDEREÇO | PACOTE | VALOR | DATA | CORRETOR | VALOR IMÓVEL | SUBSÍDIO | REEMBOLSO).Rename botjuridico → studio76bot 🆕 P3 (29/04)
/cobrar, /captar, /dd, /avaliar, Estoque Vivo, agendamento de fotos, NFS-e, contas a pagar, CCV/Clicksign, sentinela, jurídico). Nome novo descreve o escopo real e segue padrão studio76-* já em uso (studio76-server, StudioImob, smartydeed-alpha).systemd: botjuridico.service → studio76bot.service no studio76-serverjournalctl -u studio76bot -f1050941431433587 e WABA 1249172496869831 NÃO mudam, número +55 11 94728-9029 permanece)whatsappbot/src/index.ts:1254 (header X-Forwarded-By) + :11674 (mensagem de erro com instrução journalctl)reference_hsm_templates.md (título), MEMORY.md referências, reference_arquitetura_maquinas.md, reference_server_jobs.mdKANBAN.md, juridico/planning/*, whatsappbot/docs//home/egk/whatsappbot/ permanece (já é genérico)studio76-server.tail92b8aa.ts.net permanecesudo systemctl stop botjuridicosudo systemctl disable botjuridicosudo mv /etc/systemd/system/botjuridico.service /etc/systemd/system/studio76bot.servicesudo systemctl daemon-reload && sudo systemctl enable studio76bot && sudo systemctl start studio76botjournalctl -u studio76bot -n 50 + envia /dd ou /cobrar no chat| Date | Item | Notes |
|---|---|---|
| 2026-04-30 | 🚚 Migração botjuridico + leadbot para Hetzner cloudvero (CPX31, Ashburn VA) | studio76-server era ponto único de falha (máquina única, dependente de Tailscale Funnel). Decidido aproveitar VM Hetzner já provisionada (24/04, originalmente para Vero Ethereum validator) que tem IP público fixo + nginx-grade infra. Setup completo (~2h30): provisionei Node.js 22 + uv + nginx + certbot, criei deploy key SSH (/home/egk/.ssh/github_studio76), clonei repo, configurei sudoers NOPASSWD para systemctl, abri UFW 80/443 (22 segue só via Tailscale eliegkfouri). Domínio: tentei usar remaxstudio76.net mas DNS é gerenciado pela WebVisão (não RegistraCom) com painel quebrado → optei por DuckDNS gratuito (studio76.duckdns.org → 178.156.155.123, atualizado a cada 5min via cron). Let's Encrypt cert obtido via certbot --nginx, expira 2026-07-29. DBs migrados via dual-tailnet hop (cloudvero está em eliegkfouri, studio76-server em egkhain — sem caminho direto): scp studio76-server→local /tmp→cloudvero. Migrados: bot.db 12MB (60 corretores), lead-bot.db 240KB, payments.db 24KB, fee_tracker.db 108KB. Webhook do Meta: 2 apps atualizados (Studio 76 Imobiliária 925782033618340 + Leadbot Studio76 27329438999991696), verify token studio76-webhook-secret-2026 mesmo de antes, ambos verificados pelo Meta às 03:21/03:22 UTC, mensagens reais já chegando às 03:23 (leadbot phone_number_id=1134727406386158). Auto-deploy preservado: cron 1min do auto_deploy.sh puxa do GitHub, rsync, npm ci, tsc, systemctl restart. Padrão git push continua exatamente igual. Audit semanal audit_cloudvero.sh (sábado 9h UTC, silent-on-success) verifica services ativos, errors graves >20/7d, restarts >30/7d, disco >80%, bot.db >500MB, auto_deploy errors, cert TLS <14d, health endpoint via 127.0.0.1 (NAT hairpinning), HTTPS externo via --resolve — alerta WhatsApp para Elie só quando algo está fora do padrão. Bugs encontrados/corrigidos no script: grep -c \|\| echo 0 produzia "0\n0" (helper count_safe normaliza), curl pra DNS público fail por NAT hairpinning (mudou pra localhost), dig no cloudvero faz timeout no systemd-resolved (substituído por curl --resolve). studio76-server: bots stopped+disabled (sudo systemctl), auto_deploy.sh removido do crontab para não tentar restartar. Memória: reference_arquitetura_maquinas.md reescrita refletindo cloudvero como prod dos bots, MEMORY.md atualizada. botjuridico.service versionado em whatsappbot/botjuridico.service (antes só existia leadbot/leadbot.service no repo). Webhook URL final: https://studio76.duckdns.org/webhook. Pendência crítica próxima sessão: 8+ crons financeiros/operacionais ainda no studio76-server (Estoque Vivo, NFS-e fallback, audit commission_splits, daily-report.js, sync-pipeimob-deals, Canal Pro session renew, monitor_suzana_faturamento, Pipeimob email watcher) leem bot.db LOCAL stale congelado em 30/04 02:30 UTC — migrar para cloudvero ou implementar sync DB hourly. Decisão pendente: Opção 1 (migrar todos crons, ~2-3h trabalho) vs Opção 3 (aceitar snapshot, reavaliar caso a caso). Após 1 semana estável → arquivar/decommissionar studio76-server. |
| 2026-04-25 | /cobrar — fix tag #parcela:N + consolidação de transfers no webhook + bug suppliers (commit 324a815) |
Trio de fixes pré-segunda 28/04 (quando o split do deal 1080-21 deve disparar via webhook pela 1ª vez em prod). Tag #parcela:N: parcela calculada em handleCobrarCommand era perdida ao passar pelo pendingPagadorSelection → processCobrarConfirmation lia (selection as any).parcela como undefined → fallback parcela=1 → invoice tag #parcela:1 mesmo nas parcelas 2 e 3 (visto no deal 1080-21). Fix: persistir parcela no pendingPagadorSelection + ler tipado em ambos os paths (single + n-way split) + também propagar totalCcvCents pro path n-way pra proporção correta. Consolidação de transfers (debounce 30s): quando invoice.credited dispara N transfers automáticos, rajada chega em segundos. Antes: N mensagens isoladas pra admins (deal com 7 splits = 7 msgs). Agora: cada TRANSFER_SUCCESS/FAILED reseta timer 30s por deal_code; ao estabilizar, sendConsolidatedTransferReport envia 1 mensagem com checklist ✅ OK / ❌ falha (motivo) / ⏳ pendente (esperado vs visto via match CPF/CNPJ + fallback nome). Destinatários: financialAdmins + corretor + group_jid. addEvent ganha error_message + tax_id no metadata pra suportar consolidador. Bug suppliers: tabela suppliers não existia em payments.db do servidor → lookupBankDataByCpf gerava 6 SqliteError stacks por /cobrar. Tabela criada vazia (schema do contas-a-pagar) — query agora retorna undefined graciously. Fix feito direto no DB do servidor, sem mexer em código TS. |
| 2026-04-25 | Stark Bank webhook — URL reapontada para Tailscale atual + cron de monitor split | Auditoria do fluxo de notificação PIX revelou que o webhook registrado no Stark Bank apontava pra hostname Tailscale antigo (studio76-server.rab2b6aa.ts.net) que não responde mais (curl HTTP 000). Atual é studio76-server.tail92b8aa.ts.net (HTTP 200, mesmo do webhook WhatsApp Meta). Webhook id=5025684196753408 deletado e recriado como id=4510224121397248 com mesmas subscriptions (invoice/split/transfer). Implicação: handler /webhook/starkbank (index.ts:12710-12986) — completo desde antes (notifica corretor+admins+grupo, grava INVOICE_PAID, dispara NFS-e reminders) — provavelmente nunca rodou em prod por causa do bug do hostname. Daí nunca termos visto o split automático funcionar end-to-end. Em paralelo: instalado cron /home/egk/scripts/monitor_split_1080_21.py (12h e 18h BRT segunda 28/04) como rede de proteção independente — checa invoice 5614137803800576 (Sandro/parcela 2/3) via Stark Bank API + journalctl, manda WhatsApp template alerta_sistema_studio76 + email pra eliekfouri@remax.com.br. Smoke test rodado: WhatsApp 200, Gmail msg 19dc76b4774f9526. Token gmail.send deployado em /home/egk/.credentials/token_gmail_elie_send.json. Cleanup do crontab pendente após confirmar pagamento (entradas anuais — vão re-disparar 28/04/2027 se não removidas). Memória project_monitor_split_webhook_1080_21.md adicionada. |
| 2026-04-25 | deal 601301080-21 — corrigido contador de parcela (2/3 em vez de 3/3) | Bot mostrou preview do /cobrar 1080-21 como "Parcela 3 de 3" hoje 18:48 (PIX gerado pra Sandro Pionkowski R$ 26.250,00, invoice 5614137803800576) quando deveria ser parcela 2. Causa: deal_events tinha 2 INVOICE_CREATED (#59 às 01:22 referenciando invoice cancelada 4559464594407424; #60 às 18:48 referenciando invoice ativo 5614137803800576). Fórmula parcela = COUNT(INVOICE_CREATED) + off_bot_parcelas + 1 deu 1+1+1=3. Fix: deletado evento #59 (referência cancelada não conta) + atualizada description do #60 explicando contexto. Stark Bank invoice tag #parcela:1 (errado nas duas) NÃO foi alterado a pedido do usuário — bug separado do /cobrar que escreve número errado no tag. Próxima /cobrar 1080-21 agora computa corretamente parcela 3 (final). |
| 2026-04-25 | /cobrar — 3 fixes integrados (commit dc58545) |
Sessão completa testando /cobrar 1079-12 end-to-end no studio76-server via webhook simulado. (a) Drive duplicatas: deal 1079-12 tinha 3 pastas VENDA - 1079-12 no shared drive Pós-vendas (uma cheia, duas vazias criadas em runs antigos do ensureDealFolder com formato de nome diferente). findDealFolderByCode antigo pegava files[0] arbitrário e caía na vazia. Fix: nova findDealFoldersByCode plural; ensureCCVExtractedNow itera todas as pastas legacy. (b) Extractor enriquecido: prompt Haiku do extractComissaoFromCCV agora cospe imovel{endereco_completo, logradouro, numero, complemento, bairro, cidade, uf, cep} + valor_imovel (cláusula 1 do CCV). Persiste em deal_property + deal_values.property_value. PDF com prefixo Clicksign- é tratado como assinado → state avança pra COMPLETE automaticamente. Antes o preview mostrava "Endereço não cadastrado / R$ 0 / CCV: Pendente" mesmo com tudo no contrato. (c) UX pagador interativa: 2 candidatos vira 3 botões (pagador_1, pagador_2, pagador_split_1+2); 3-10 candidatos vira lista interativa com seções "Pagador único" + "Divisão igual"; 11+ texto puro. Separador + mais natural ("1+2" lê como "Ana mais André"); parser aceita , retrocompat. Helper shortPersonName encurta "ANA CECILIA DE AZEVEDO" → "Ana Cecilia" pra caber no limite 20 chars. Click no botão sintetiza userText e reusa parser textual. Validado: bot acha CCV na 3ª pasta, extrai R$54k/6%, popula state=COMPLETE+endereço+valor R$900k, mostra preview correto, click "Ambos 50/50" registra PAGADOR_SPLIT. Memória feedback_drive_duplicatas_pasta_deal.md adicionada. Bug separado encontrado nos logs (não-bloqueante): data-capture.service.ts:227 lookupBankDataByCpf — no such table: suppliers (6 stacks ruidosas durante registerDealSplits). |
| 2026-04-24 | Assertiva — credenciais conectadas em produção | ASSERTIVA_API_ID/SECRET/_BASE adicionados ao /home/egk/whatsappbot/.env do studio76-server (login Samuel: samuelchen@remax.com.br). OAuth2 client_credentials testado: token bearer retornado, scope: ALL, expires_in: 1799s. Backup .env.bak.20260424-231006 salvo. Bot reiniciado via sudo systemctl restart botjuridico — ativo. Bot é lazy: token só será obtido na primeira chamada /dd ou /captacao. Memória: reference_assertiva.md (idFinalidade LGPD: 1=DD, 5=captação; cache 30d em assertiva_lookups). Pendência derivada: conectar Assertiva ao Pipeimob para auto-preencher dados de vendedor/comprador nos deals. |
| 2026-04-18 | /dd Assertiva A+B — Enriquecimento + CNPJs vinculados |
Migration v29 (deal_parties.nome_mae/situacao_cpf/empresas_vinculadas/assertiva_enriched_at) aplicada em produção. AssertivaPessoa.empresasVinculadas extraído dos campos participacoes/empresas/vinculosEmpresariais do payload Localize. Novo lookupEmpresasVinculadasByCpf() com fallback gracioso (endpoint dedicado → CPF padrão). /dd agora SEMPRE chama lookupPessoaByCpf quando CPF resolvido e persiste via COALESCE. CNPJs vinculados são anexados ao parties[] mid-loop, certidões PJ (Plexi) rodam automaticamente; corretor recebe notificação "🏢 X aparece como sócio de N empresa(s)". 57/57 testes verdes, build limpo, v29 confirmada nos logs. |
| 2026-04-18 | Estoque Vivo Sprint 2 — Fase 2 (Validade) + Fase 3 (Preço) + Mensagem Final | StatusWizardService expandida com 5 novos steps (40/41/50/51/52) e 10 novos botões. Fase 2: detecta contrato vencido/≤30d via override ou cache iList, oferece [+6m] [+12m] [Não] e em "Não" oferece [Convencional] [Retirar]; renovação chama updateListingDataValidade no iList. Fase 3: 2 telas (Conversou? → Autorização?), grava resposta na fase=3 com SEM_CONTATO/MANTER/NÃO_AUTORIZOU/PODE_REDUZIR_até_X%. Mensagem de fechamento agora consolida resumo por imóvel + "Tudo gravado no iList — não precisa abrir o sistema" (princípio fix-in-chat). 31/31 testes verdes. Deploy via rsync + tsc clean local + servidor. Demo validado no WA do Elie (ciclos 4 e anteriores). Falta apenas Fase 4 (bump). |
| 2026-04-17 | Estoque Vivo Sprint 1 — Fase 1 (Status) + Cron + Supervisor Alerts em Produção | Migration v28 (estoque_vivo_ciclos\|respostas\|eventos). EstoqueVivoUpdater (ownership por agent_code + whitelist 3 campos). StatusWizardService W1.1/W1.2/W1.3 (Ativo/Vendido/Retirado + sub-flows). EstoqueVivoCampaignRunner + CLI estoque-vivo-campaign.ts. AutoInativacaoService + botão evreativar_*. SupervisorAlertsService 4 alertas/semana (seg 08h, qua 10h, sex 17h, dom 23h59) pra Carine + Roberto. Crons instalados via install-estoque-vivo-crons.sh no studio76-server (egk user, sem sudo). ESTOQUE_VIVO_SUPERVISOR_NUMBERS no .env. Template HSM estoque_vivo_confirmacao_semanal aprovado pela Meta. Cron semanal de Fase 1 ainda inativo (aguardando piloto). |
| 2026-04-15 | iList Auto-Refresh + Price Bump + Full Sync Pipeline | refresh_ilist_cache.py — API-based cache refresh (221/221 items, substituiu CSVexport). price_bump.py — rotação quinzenal +R$100 venda/+R$10 locação. run-full-sync.sh — pipeline completo 6am (cache→enrich→gen→cnm→restart→validate). Commits 115d07d + 42f0edc. |
| 2026-04-15 | CnM Feed Deploy + Live na Plataforma | CnM XML regenerado (221 imóveis, 2.044KB, 30 destaques). Painel CnM confirma: 232 Ativos, 30 Destaques. Tailscale Funnel reativado como público (estava "tailnet only"). CnM consumindo feed com sucesso. |
| 2026-04-15 | WhatsApp Monitoring 24/7 via Templates | Migrou TODOS os scripts de notificação WA para template alerta_sync_canal_pro + text fallback (funciona fora da janela 24h). Scripts atualizados: run-full-sync.sh, onr_monitor.py, check-restarts.sh, monitor_suzana_faturamento.py. Token dinâmico via .env. Template genérico alerta_sistema_studio76 criado (pendente aprovação Meta). Commits d7d8ba4 + 70fc0a1. |
| 2026-04-10 | Multi-Bank Smart Reconciliation | smart_reconcile.py extended for 3 sources: Bradesco OFX, Stark Bank JSON (SDK), Pipeimob JSON (Playwright scraper). Claude AI matches bank txns ↔ Granatum lançamentos, classifies categories/cost centers from historical patterns. New scripts: pipeimob_statement.py (headless Bubble.io scraper, login+PIN+extract), starkbank_statement.py (SDK, 5 data types). Fix: fetch_suppliers() infinite loop (Granatum /clientes ignores pagination). Tested e2e on server: Pipeimob (8 txns, 1 match R$9.480) + Stark Bank (47 txns, 3 matches). ~$0.04/run. Commit a28f368. |
| 2026-04-10 | Chaves na Mão — XML Feed Generator | Replicou estratégia Canal Pro para CnM. cnm_generator.py (221 imóveis, 2.044KB XML), cnm_mappings.py (20 tipos, 70+ features→áreas), server.py atualizado com /feed/chavesnamao.xml + cache + status + regenerate. 30/30 destaques alocados (antes: 0/30 no iConnect — oportunidade enorme!). Feed URL: https://studio76-server.tail92b8aa.ts.net/feed/chavesnamao.xml. Deploy concluído 2026-04-15 — CnM consumindo feed com sucesso. |
| 2026-04-09 | Canal Pro FASE 3 — Smart Destaque Rotation | destaque.py: SQLite rotation engine with scoring (base+quality+rotation), manual pins, CLI + 6 API endpoints (/destaque, /destaque/stats, /destaque/history/<id>, /destaque/pins, pin/unpin). First run: 4 PREMIERE_1 + 31 PREMIUM. Commit a33aa9c. |
| 2026-04-09 | Canal Pro FASE 2 — Features & Rich Descriptions | 194/230 listings with <Features> tags, 2,447 total feature tags (avg 12.6/listing). 150+ PT→EN feature mappings. Rich descriptions with parking, fees, floor, diferenciais. XML 442KB→1.9MB (+329%). Commits 0c463ca + bc43dc8. |
| 2026-04-10 | Canal Pro Auto-2FA + Integration Fix | canal_pro_auto_login.py: Playwright + Gmail API auto-2FA (código extraído em <1s). Reconfigurou URL integração (vrsync.xml) após remoção iList por Samuel (email Apr 9). Import agendado 23:40. Email: eliekfouri@remax.com.br recebe relatório. |
| 2026-04-10 | Canal Pro Server Deploy + CEO Report | (1) Auto-login script deployed to server (/home/egk/canal-pro-feed/), Gmail OAuth credentials copied, flexible token path. (2) Weekly cron: 45 5 * * 1 session renewal. (3) CEO visual PDF 8 pages: antes/depois 3 imóveis, KPIs, sem dados técnicos. (4) canal-pro-feed/CLAUDE.md criado com contexto completo das 5 fases. |
| 2026-04-10 | NFS-e Planilhas Overhaul | (1) Fix filtro Studio76+Suzana: normalização tipos (text→number/date), re-sort Z-A por NF, basicFilter auto-expand. (2) Tributos Estimados: fórmulas $B$10→$B$2 (full range), rolling 12 meses dinâmico. Mar/2026 saltou R$204k→R$222k (NFs antes excluídas). (3) Nova aba "Tributos Estimados" Suzana (Anexo V, RBT12 R$565k). (4) DAS→Granatum sync (Abr R$31.051, Mai R$6.920). (5) append_to_sheets corrigido: NF como int, valor como float, re-sort após insert. (6) Cron diário 7:45 nfse_daily_sheets_sync.py |
| 2026-04-10 | NF Suzana 408→409 corrigida | NF 408 cancelada (tomador errado RODRIGO=comprador). NF 409 emitida com MARCUS VINICIUS (vendedor). Causa raiz: pagador_nome PIX usado como tomador. Fix: verify_tomador_consistency() em nfse_auto.py bloqueia divergência CPF/nome entre prestadores do mesmo deal. Skill /emitir-nfe + memória atualizados. |
| 2026-04-10 | Comando /nf no bot | Corretores pedem PDF da NF via /nf [deal]. Lista NFs do corretor ou busca por deal code. Download PDF local→Prefeitura mTLS. Envio WhatsApp documento. ACL: nivel corretor. |
| 2026-04-09 | NFS-e Full Automation | 6 componentes: nfse_auto.py (core), webhook invoice.created, Pipeimob email watcher, nfse_notifications (WA+email), cron fallback, SQLite nfse_emissions. 3 triggers: Stark Bank webhook + Pipeimob Celcoin Gmail + cron diario. Ref: starkbank-mcp/NFSE-AUTOMATION.md |
| 2026-04-09 | NF 860 emitida | Deal 601301090-3, MARIA HELENA VILELA TONELLI, R$ 18.000, cod B4UJJQVA. PDF enviado Samuel via email+WhatsApp |
| 2026-04-08 | Full Repo Audit | UX 5.5/10, Proactivity 6.5/10, Production 7/10. KANBAN restructured. |
| 2026-04-07 | PIX Collection Flow in /cobrar | DictKey resolution, split receiver activation, multi-pagador invoices (commit b32ac74) |
| 2026-04-07 | Deadline Monitoring System MVP | Timeline CRUD + scheduler + extraction |
| 2026-04-07 | Central de Atendimento / Intent Router | IntentClassifierService (Haiku), 26 intents, command routing |
| 2026-04-07 | iList Integration (Puppeteer) | IlistService (Puppeteer + CSV cache), /ilist, /proposta pre-fill, auto-sync-ilist.js cron |
| 2026-04-05 | Docker Removal | Simplified bot deployment |
| 2026-04-03 | StarkBank PIX by DICT Key | + Gmail send fix |
| 2026-04-01 | NFS-e Suzana Lee | Emission + tracking spreadsheet |
| Date | Item | Notes |
|---|---|---|
| 2026-03-01 | Granatum MCP Server | 19 tools, production |
| 2026-03-08 | StarkBank MCP Server | PIX/TED/boleto payments |
| 2026-03-10 | Pipeimob MCP Server | 12 tools, CRM data |
| 2026-03-12 | Google Drive MCP Server | Document access |
| 2026-03-15 | AP Automation Phase 1 | MCP server + 4 parsers + 6 tools |
| 2026-03-20 | Pipeimob API Discovery | API functional, endpoints documented |
| 2026-03-22 | ACL Role-Based Access | Manager vs corretor permissions |
| 2026-03-23 | LGPD Privacy Policy | /privacy endpoint |
| 2026-03-26 | /reportar Command | Commission report with PipeCash |
| 2026-03-28 | CPF/CNPJ Validation | Checksum on /cobrar input |
| 2026-03-29 | OCR Phase 1 | Accept images without active deal |
| 2026-03-30 | Drive CCV Auto-Scan | Auto-scan Drive for contracts |
When someone requests a feature, add it here first. Do NOT start working on it.
Review during morning check and assign priority.
| Date | Requester | Request | Priority | Decision |
|---|---|---|---|---|
| 2026-04-15 | Samuel | BUG /rateio: Bot para de responder após informar nome do corretor parceiro. Wizard travado. | P1 | ✅ RESOLVIDO 16/abr — Causa raiz: wizard session em memória perdida no restart. Fix: migração v23 + WizardManager persistido no SQLite. Sessões sobrevivem restarts. |
| 2026-04-15 | Samuel | Melhoria /rateio: Falta opção "3 - Parceria com corretor externo" no questionário. Atualmente só tem: Solo e Parceria interna. | P2 | ✅ IMPLEMENTADO 16/abr — Opção 3 adicionada. Ao selecionar 3, pula cat2 e temParceira (auto-true), pede parceiraPct e parceiraNome. |
| 2026-04-15 | Samuel | BUG /reportar: Deals computados errado — 1011-316 em duplicidade, 1058-41 e 1002-107 faltando (recebimento de hoje). | P1 | ✅ PARCIAL 16/abr — Dedup por transacao_uniqueid corrigido (resolve 1011-316). Fallback hardcoded Carine removido (query sem filtro = todos os pagamentos). Deals faltando podem ter sido timing (pagamentos do mesmo dia). Monitorar próximo /reportar. |
| 2026-04-07 | Elie | Diligência prévia na assinatura do contrato de gestão | P2 | Moved to backlog #10 |
| 2026-04-07 | Elie | Planilha "Vendas do Mês" auto-alimentada pelo DB/bot | P2 | Moved to backlog #8 |
| 2026-04-08 | Elie | QuintoAndar tech-match features (from competitive analysis) | P1-P2 | In Progress + backlog #11-17. Ref: operations/quintoandar-tech-competitive-analysis.md |
| 2026-04-10 | Elie | AI Property Discovery — MCP Server Público para AI agents | P2 | Moved to backlog #31. PDF CEO: relatorio-ai-property-discovery-ceo.pdf. Implementação Fase 1: 11/04/2026 |
| 2026-04-08 | Elie | Renderização de fotos via bot (Gemini Imagen / Nano Banana) — /staging já funciona com Gemini Flash, evoluir para rendering de fotos-conceito de imóveis com IA generativa (exterior, fachada, planta→render) |
P2 | Moved to backlog #28. Code exists: staging.service.ts |
| 2026-04-08 | Elie | Automação de medição de subsídio de fotógrafos por deal — controle de custo fotográfico por negócio, tracking de gastos vs budget, auto-reconciliação com Granatum | P2 | Moved to backlog #29 |
| 2026-04-10 | Elie | Canal Pro Lead Webhook — URL de Integração (tela "Integração de anúncios") permite receber leads via POST em tempo real. Construir endpoint no servidor que receba leads do Canal Pro, logue, e encaminhe ao corretor via WhatsApp. Atualmente usando C2S como middleware de leads. Primeiro passo para eliminar C2S (backlog #30). | P2 | Backlog — vinculado ao item #30 (Eliminar C2S) |
| 2026-04-14 | Elie | ACM Automação — Automatizar processo de Avaliação Comparativa de Mercado. Gerar PDF profissional via /avaliar [endereço] usando iList + iConatus + ITBI. |
P2 | ✅ iConatus integrado via Playwright! geoanalise_client.py funcional. Plano: ACM/PLANO-AUTOMACAO-ACM.md. |
| 2026-04-18 | Elie/CEO | /dd Assertiva A+B — A) Sempre enriquecer party com dataNascimento/nomeMae/endereços/telefones quando CPF presente (hoje só fallback). B) Buscar CNPJs vinculados ao CPF (sócio de empresas) e rodar certidões PJ automaticamente. Assertiva já contratada e em uso no /captar. |
P2 | ✅ DONE 2026-04-18 — Migration v29 + enrichment automático no /dd + lookup CNPJs vinculados deployado em produção. Ver Done (April 2026). |
| 2026-04-18 | Elie/CEO | /solicitar-pagamento-fotografo — Comando que calcula subsídio Studio76 + reembolso do corretor por imóvel, gera conta a pagar no Granatum (fotógrafo) e Invoice PIX cobrando corretor. Objetivos: aliviar Yara, forçar engajamento corretor↔bot, facilitar financeiro. |
P2 | Aprovado — Moved to backlog #29 (escopo expandido). Pendente: tabela de subsídios (Yara/CEO definem). |
| 2026-04-18 | Elie | Sistema de Agendamento de Fotografia end-to-end — expansão do backlog #29: wizard agendamento bilateral, monitor Drive, aprovação corretor libera pagamento + publica iList, Invoice D+30 corretor, PaymentRequest D+7 fotógrafo, nag engine proativo. Plano: /home/egk/.claude/plans/shimmying-wiggling-engelbart.md. Tabela de subsídio fornecida (R$200/250/300/350 por faixa). |
P2 | Plano aprovado 18/04. Escopo integrado ao backlog #29. ~8 dias, 7 fases. |
| 2026-04-24 | Elie | Migração studio76-server (físico) → Hetzner VPS — VPS já provisionada e rodando. De-risca SPOF do servidor físico no escritório. |
P1 | ✅ DONE 30/04 — bots no Hetzner cloudvero (https://studio76.duckdns.org/webhook). Ver Done (April 2026). |
| 2026-04-24 | Elie | Impulsionamento Digital — auditoria + automação de gastos com Meta Ads, Google Ads, Canal Pro turbo, etc. Reconciliação Granatum (categoria 2535141). | P1 | Backlog P1 #5 — escopo a refinar com CEO. |
| 2026-04-24 | Elie | Marketing — estratégia e execução — branding, conteúdo (IG/LinkedIn/blog), email mkt, eventos, SEO; integração bot↔landing pages com roteamento automático de leads. | P1 | Backlog P1 #6 — escopo a refinar com CEO. |
| 2026-04-24 | Elie | Recrutamento de Corretores — pipeline de captação + onboarding automatizado via bot, diferenciais Studio76 (bot jurídico, automação, suporte). | P1 | Backlog P1 #7 — escopo a refinar com CEO. |
| 2026-04-25 | Elie | Auditoria Backlog DD vs Contratos de Representação Exclusiva (ClickSign) — Puxar via ClickSign API todos os contratos de representação exclusiva assinados pelas partes e cruzar com pastas/deals para identificar quais não têm diligência prévia executada. Objetivo: gerar relatório do backlog "assinado sem DD" para remediação. Distinto do #10 (forward-looking, novos contratos) — esta é a peça de descoberta/auditoria sobre o que já foi assinado. Reusa clicksign.service.ts (já em produção) + /dd existente para checar cobertura. |
TBD | Aguardando triagem — definir prioridade e se vira novo item de backlog ou sub-item do #10/#35. |
| 2026-04-26 | Elie | Bot de Pré-Atendimento de Leads — Bot exclusivo no número Studio76 (+55 11 97345-7166) para responder leads de portais em < 2min, qualificar interesse e rotear ao corretor dono do imóvel. Substitui C2S como middleware de leads. Node.js + Baileys + Claude, DB lead-bot.db. |
P1 | Moved to backlog P1 #8. |
| 2026-04-29 | Hanna/Sabryna | Canal Pro: validação cruzada tipo×campos no estoque-vivo — Hoje 4 listings ativos com dormitórios incoerentes pro tipo (ex.: Terreno 1013-26 com 5 dorms quebrava feed; Sítios 1013-1 e 1008-73; Casa de Campo 1087-14). Patch defensivo no generator zera Bedrooms/Bathrooms/Suites pra Terreno (deploy 29/abr 13h). Falta: módulo estoque-vivo do bot detectar incoerência tipo×campos (Terreno c/ dorms>0, Sítio s/ área de terreno, etc.) e pingar corretor com wizard "zerar dormitórios?" inline — princípio fix-in-chat do CLAUDE.md. | P2 | Backlog — vincular ao loop estoque-vivo (project_estoque_vivo.md). |
Tasks agents currently do manually in Pipeimob that the bot can automate.
| # | Task | Current (Pipeimob) | With Bot | Effort | Impact |
|---|---|---|---|---|---|
| 1 | Create new deal | 6-tab web form, 15+ fields | /novavenda wizard (3 msgs) |
✅ Done | High |
| 2 | Upload party documents | Manual upload per document | Send photo → auto-OCR + classify | ✅ Done | High |
| 3 | Track document checklist | Manual spreadsheet / memory | /checklist with auto-status |
✅ Done | High |
| 4 | Run due diligence | Visit 5+ govt portals manually | /dd → automated in 30s |
✅ Done | Very High |
| 5 | Generate CCV contract | Lawyer drafts manually | /gerarccv → 6 templates |
✅ Done | Very High |
| 6 | Collect commission via PIX | Manual bank transfer + tracking | /cobrar → Stark Bank Invoice |
✅ Done | High |
| 7 | Calculate commission split | Excel spreadsheet | /rateio with 6 scenarios |
✅ Done | Medium |
| 8 | Search property listings | Log into Pipeimob portal | /ilist → instant search |
✅ Done | Medium |
| 9 | View sales funnel/pipeline | Pipeimob dashboard | Not built — need /funil |
Medium | High |
| 10 | Schedule property visits | Manual coordination | Not built — need /agendar (QuintoAndar match) |
Low | High |
| 11 | Track financing status | Phone calls + memory | Not built — need /financiamento (QuintoAndar match) |
Low | Medium |
| 12 | AI property search (NLP) | Log into portals manually | Not built — Claude + iList (QuintoAndar QPreco match) | Medium | High |
| 13 | Digital proposal/counter-offer | Phone/email back-and-forth | Not built — structured WhatsApp flow (QuintoAndar match) | Medium | High |
| 14 | Auto-generate listing descriptions | Agent writes manually | Not built — Claude Vision from photos (QuintoAndar match) | Low | Medium |
| 15 | CMA / property valuation | Manual research | Not built — need /avaliar + iConatus API |
Medium | High |
| 16 | DIMOB tax declaration | Pipeimob built-in export | Not built — need export script | High | Medium |
| 17 | Compare market prices | iConatus / manual research | Not built — need iConatus API | High | High |
| 18 | Multi-deal dashboard for CEO | Log into Pipeimob admin | Not built — need /funil |
Low | High |