Pular para conteúdo

Oportunidades (Elegibilidade)

O que é

Tela /oportunidades/elegibilidade (menu Comercial → Vendas → "Oportunidades (Elegibilidade)") que lista os clientes elegíveis para uma nova oferta de crédito — a base de disparo/abordagem do time comercial. É a "2ª tela de Oportunidades": mesma forma da tela irmã /oportunidades (ver "Onde vive no código"), mas restrita à interseção com elegibilidade (clientes que passam nas regras de algum perfil de elegibilidade ativo), em vez do público geral da carteira.

Como funciona

  • Base de dados: cada linha é um contato elegível, vindo da RPC disparo_base_elegibilidade, que roda disparo_base_oportunidades (a mesma query da tela /oportunidades) e filtra pelo contato_id IN (disparo_elegibilidade_elegiveiselegibilidade_presets ativos). A base registrada em disparo_bases tem slug = 'perfil_elegibilidade' ("Perfil de Elegibilidade") — não há mais seletor de perfil manual: um cliente entra se algum perfil ativo o aprovar.
  • Condição elegível vs. quente: cada linha carrega condicao: elegivel (passa hoje) ou quente (só entraria se quitasse as "Parcelas Quentes" — janela curta de dias úteis; ADR-0003, "Oportunidade Quente"). A UI mostra o badge 🔥 Quente e tem o toggle "Só quentes".
  • Filtros da tela (client-side sobre o resultado já trazido do servidor, exceto os que vão na RPC):
  • Busca por nome ou CPF (server-side, debounce 400ms).
  • Status comercial (select) — filtra por status comercial do contato (ex.: sem contato, em dia, atrasado etc.) e, quando setado, habilita um filtro de intervalo de datas ("De"/"Até") sobre status_comercial_em.
  • Tags de elegibilidade (multi-select) — reflete os perfis/tags que tornaram o contato elegível.
  • Status do contrato (select "Status"): em_dia / atrasado / quitado / todos — deriva de disparo_base_oportunidades.tag (contrato atrasado > contrato quitado sem em-dia > em dia).
  • % pago (contratos ativos) — buckets de 20%: 0–20%, 20–40%, 40–60%, 60–80%, 80–100% (última faixa aberta, inclui 100%). Alinhado (PR #… "refactor(elegibilidade)") aos mesmos buckets de /oportunidades, evitando a divergência de granularidade que existia antes.
  • "🔥 Só quentes" — filtra condicao === 'quente'.
  • Paginação e ordenação (por qualquer coluna) são client-side — a lista inteira chega numa carga e é fatiada em memória (50 por página).
  • Clicar numa linha abre o OportunidadeDrilldownSheet (mesmo componente de drill-down de /oportunidades) com o perfil e as operações do contato.

Regras de negócio

⚠️ A documentar. Esta tela ainda não tem as regras de negócio levantadas do código.

O que entra aqui: invariante (o que nunca pode acontecer), permissão (quem pode fazer o quê), bloqueio (o que impede a ação e a mensagem que o usuário vê), cálculo (fórmula e arredondamento) e efeito colateral (o que mais muda quando isso acontece).

Regra só entra aqui com origem no código — arquivo e linha. Regra que alguém "acha que é assim" é pior que seção vazia, porque vira decisão de produto baseada em memória.

Onde vive no código

  • CRM (page): apps/crm-menos-juros/client/src/pages/comercial/oportunidades-elegibilidade/index.tsx
  • CRM (domínio): apps/crm-menos-juros/client/src/domains/comercial/oportunidades-elegiveis/ (api/oportunidades-elegiveis-api.ts chama POST /v2/comercial/disparos/elegiveis, hooks/use-oportunidades-elegiveis.ts, hooks/use-tags-elegibilidade.ts, types/index.ts)
  • Tela irmã (público geral, mesmas colunas/buckets): apps/crm-menos-juros/client/src/pages/comercial/oportunidades/index.tsx
  • Configuração dos perfis de elegibilidade (quem entra na base): apps/crm-menos-juros/client/src/pages/configuracoes/elegibilidade/ + apps/crm-menos-juros/client/src/domains/mesa-analise/elegibilidade/
  • DB: supabase/migrations/20260623120700_create_disparo_base_oportunidades.sql (RPC disparo_base_oportunidades, base oportunidades), supabase/migrations/20260623130300_base_unica_perfil_elegibilidade.sql (RPC disparo_base_elegibilidade, base perfil_elegibilidade), supabase/migrations/20260626172734_elegibilidade_condicao_quente.sql (coluna condicao)

Relacionado

comercial · elegibilidade · negocio · pipe-e-etapa

Histórico

  • 2026-07-10 (conversa): página criada como parte da ingestão de telas do Comercial fora do Kanban.