Funções
RPCs de dashboard, propostas e administração
As RPCs do Vendee concentram a lógica de agregação e mutações que envolvem múltiplas tabelas. Elas rodam dentro do Postgres (SECURITY DEFINER quando necessário), respeitam RLS via get_user_workspace_ids() e são consumidas pelo client via supabase.rpc().
RPCs de Dashboard
Chamadas pelo hook use-dashboard.ts. Todas recebem p_workspace_id, p_start_date / p_end_date, e opcionalmente p_owner_id (NULL = empresa toda).
| Função | Descrição |
|---|---|
get_dashboard_kpis | KPIs básicos do período (receita, qtd ganhos, taxa) |
get_dashboard_kpis_extended | KPIs estendidos (deal velocity, recurring, ticket médio) |
get_deals_timeline | Negócios criados e ganhos por semana |
get_deals_timeline_monthly | Timeline mensal (últimos 6 meses) |
get_deals_by_owner | Receita e qtd de negócios por responsável |
get_deals_by_source | Negócios e receita por origem |
get_deals_stalled | Negócios sem atividade por mais de N dias |
get_activities_by_type | Atividades agrupadas por tipo no período |
get_activities_daily_by_type | Atividades por dia e tipo (últimos 30 dias) |
get_activities_summary | Resumo de atividades realizadas e pendentes |
get_lost_deals_detailed | Negócios perdidos com detalhes (motivo, valor, etapa) |
get_qualifications_distribution | Distribuição de scores de qualificação |
RPCs de Admin
Chamadas pelo hook use-super-admin.ts.
| Função | Descrição |
|---|---|
admin_list_workspaces | Lista workspaces com métricas (usuários ativos, deals, atividades 7d) |
is_super_admin | Verifica se o usuário autenticado é super admin |
get_user_admin_workspace_ids | IDs de workspaces para super admin (bypassa members) |
RPCs utilitárias
| Função | Descrição |
|---|---|
set_default_owner_id | Trigger function — fallback de owner ao arquivar membro |
change_deal_stage | Move um negócio de etapa e emite eventos correspondentes |
Padrão de chamada RPC
const { data, error } = await supabase.rpc("get_dashboard_kpis_extended", {
p_workspace_id: workspaceId,
p_start_date: fromISO,
p_end_date: toISO,
p_owner_id: ownerId ?? null,
});Tipos de RPC
Supabase às vezes marca argumentos opcionais como required no tipo gerado. Faça cast do objeto de argumento se necessário:
type Args = Parameters<typeof supabase.rpc<"get_dashboard_kpis">>[1];Event logs (event_logs e pipeline_logs)
A timeline do hub do negócio é construída a partir de uma união de comments e event_logs. Os event types emitidos automaticamente são:
deal_created— quando um negócio é inseridostage_changed— quandochange_deal_stagemove o negócio de etapadeal_won— emitido junto comstage_changedao entrar em etapa terminal de vitóriadeal_lost— emitido junto comstage_changedao entrar em etapa terminal de derrota
Não use fractional-indexing para ordenação do kanban. Os cards são ordenados por updated_at DESC. Qualquer ação no negócio (mudança de etapa, nova atividade, comentário, edição de campo) deve chamar bumpDealUpdatedAt() em src/lib/deal-bump.ts para subir o card para o topo da coluna.