Verificando acesso...

Dashboard

Visão geral do sistema

?

Dashboard

Imóveis

Portfólio completo de imóveis cadastrados

CódigoEndereçoTipoCaracterísticasAluguelProprietárioStatusAções

Pessoas

Locadores, Locatários e Fiadores

Nome / CPFTipoE-mailContatoCidade / UFStatusAções

Cláusulas Contratuais

Banco de cláusulas pré-cadastradas e editáveis

TítuloCategoriaPrévia do ConteúdoFinalidadeStatusAções

Contratos de Locação

Geração, assinatura e gestão de contratos

NúmeroLocatário / LocadorImóvelAluguelVenc.VigênciaÍndiceStatusAções

Boletos e Cobranças

Geração e controle de boletos mensais

NúmeroContratoLocatárioCompetênciaVencimentoComposiçãoValor TotalPago em / StatusAções

Controle de Reajustes

Reajuste de aluguéis por índices econômicos

Índices Econômicos — Últimos 12 Meses

8,99%

IGP-M (12m)

7,09%

IPCA (12m)

6,87%

INPC (12m)

7,73%

IVAR (12m)

Contratos Pendentes de Reajuste

ContratoLocatárioImóvelValor AtualÍndicePróximo ReajusteNovo Valor Est.Ação

Controle de Repasses

Boletos pagos pelos locatários — gerencie os repasses aos locadores

Aguardando Repasse

Repasses Realizados (mês)

Valor a Repassar

Taxa Adm. Retida (mês)

Rescisões Contratuais

Histórico de rescisões e multas aplicadas

ContratoLocatárioImóvelData RescisãoMotivoMulta Aplicada

Relatórios Financeiros

DRE, inadimplência, receita por imóvel e ocupação do portfólio

Receita Bruta (ano)

Total Repassado

Taxa Adm. Retida

Margem Administrativa

Demonstrativo de Resultado (DRE)

MêsReceita BrutaRepassesTaxa Adm.Part. %

Ocupação do Portfólio

Alugados
Disponíveis
Em Reforma
Taxa Ocupação

Inadimplência

Boletos vencidos
Valor em atraso
LocatárioImóvelComp.VencimentoAtrasoValor c/ Enc.

Receita por Imóvel

ImóvelLocadorLocatárioBoletos PagosReceita TotalParticipação

Declaração Anual de Rendimentos (IR)

Alertas de Vencimento

Contratos encerrando, reajustes pendentes e boletos em atraso

Contratos Encerrando (90 dias)

Reajustes Pendentes (60 dias)

Boletos Vencidos

Urgentes (≤ 15 dias)

Contratos Encerrando nos Próximos 90 Dias

ContratoLocatárioImóvelVencimentoPrazoAção

Reajustes Pendentes nos Próximos 60 Dias

ContratoLocatárioImóvelNovo ValorPrazo

Boletos Vencidos (Inadimplência)

BoletoLocatárioImóvelVencimentoDias em AtrasoValor c/ Encargos

Seguradoras

Seguradoras pré-cadastradas para uso nos contratos (Seguro Fiança, Título de Capitalização, Seguro Incêndio)

Seguradora CNPJ Contato Tipos de Seguro Status Ações

Gerenciar Usuários

Controle de acesso por nível: Administrador, Locador e Locatário

Administrador — Acesso total ao sistema
Locador — Vê contratos e repasses
Locatário — Vê boletos e contrato
NomeE-mailNível de AcessoPessoa VinculadaCriado emStatusAções

Configuração necessária — execute UMA VEZ no Supabase SQL Editor

Copie o SQL abaixo, acesse Supabase Dashboard → SQL Editor, cole e clique em Run (▶).
Isso cria a função RPC e ajusta as políticas RLS para o sistema funcionar corretamente.

-- =================================================================
-- SYSLOKA — CONFIGURAÇÃO RLS + RPC (execute UMA VEZ)
-- Supabase Dashboard → SQL Editor → Cole aqui → Run ▶
-- =================================================================

-- ── 1. Remover políticas conflitantes ────────────────────────────
DROP POLICY IF EXISTS "Usuários podem ver seu próprio perfil" ON profiles;
DROP POLICY IF EXISTS "Usuários podem editar seu próprio perfil" ON profiles;
DROP POLICY IF EXISTS "Admin pode ver todos os perfis" ON profiles;
DROP POLICY IF EXISTS "Admin pode inserir perfis" ON profiles;
DROP POLICY IF EXISTS "Admin pode atualizar perfis" ON profiles;
DROP POLICY IF EXISTS "profiles_select_own" ON profiles;
DROP POLICY IF EXISTS "profiles_insert_own" ON profiles;
DROP POLICY IF EXISTS "profiles_update_own" ON profiles;
DROP POLICY IF EXISTS "profiles_admin_all" ON profiles;
DROP POLICY IF EXISTS "profiles_admin_insert" ON profiles;
DROP POLICY IF EXISTS "profiles_admin_update" ON profiles;

-- ── 2. Ativar RLS na tabela profiles ─────────────────────────────
ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;

-- ── 3. Cada usuário lê/edita apenas o próprio perfil ─────────────
CREATE POLICY "profiles_select_own" ON profiles
  FOR SELECT USING (auth.uid() = id);

CREATE POLICY "profiles_insert_own" ON profiles
  FOR INSERT WITH CHECK (auth.uid() = id);

CREATE POLICY "profiles_update_own" ON profiles
  FOR UPDATE USING (auth.uid() = id);

-- ── 4. Admin pode VER e ESCREVER todos os perfis ─────────────────
CREATE POLICY "profiles_admin_select" ON profiles
  FOR SELECT USING (
    (SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
  );

CREATE POLICY "profiles_admin_insert" ON profiles
  FOR INSERT WITH CHECK (
    (SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
  );

CREATE POLICY "profiles_admin_update" ON profiles
  FOR UPDATE USING (
    (SELECT role FROM profiles WHERE id = auth.uid()) = 'admin'
  );

-- ── 5. Função RPC para admin listar TODOS os profiles ────────────
-- Usa SECURITY DEFINER para rodar com permissão de superusuário,
-- ignorando RLS completamente. Só admin autenticado pode chamar.
CREATE OR REPLACE FUNCTION admin_get_all_profiles()
RETURNS TABLE (
  id          uuid,
  nome        text,
  role        text,
  pessoa_id   uuid,
  email       text,
  created_at  timestamptz,
  updated_at  timestamptz
)
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
BEGIN
  -- Verifica se quem chama é admin
  IF (SELECT p.role FROM profiles p WHERE p.id = auth.uid()) != 'admin' THEN
    RAISE EXCEPTION 'Acesso negado: apenas administradores podem listar todos os perfis';
  END IF;

  RETURN QUERY
    SELECT
      p.id,
      p.nome,
      p.role,
      p.pessoa_id,
      u.email,
      p.created_at,
      p.updated_at
    FROM profiles p
    LEFT JOIN auth.users u ON u.id = p.id
    ORDER BY p.created_at DESC;
END;
$$;

-- Garante que usuários autenticados podem chamar a função
GRANT EXECUTE ON FUNCTION admin_get_all_profiles() TO authenticated;

-- ── 6. Função RPC para admin inserir/atualizar perfil de outro ────
CREATE OR REPLACE FUNCTION admin_upsert_profile(
  p_id        uuid,
  p_nome      text,
  p_role      text,
  p_pessoa_id uuid DEFAULT NULL
)
RETURNS void
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
BEGIN
  IF (SELECT pr.role FROM profiles pr WHERE pr.id = auth.uid()) != 'admin' THEN
    RAISE EXCEPTION 'Acesso negado';
  END IF;

  INSERT INTO profiles (id, nome, role, pessoa_id)
  VALUES (p_id, p_nome, p_role, p_pessoa_id)
  ON CONFLICT (id) DO UPDATE
    SET nome      = EXCLUDED.nome,
        role      = EXCLUDED.role,
        pessoa_id = EXCLUDED.pessoa_id,
        updated_at = now();
END;
$$;

GRANT EXECUTE ON FUNCTION admin_upsert_profile(uuid, text, text, uuid) TO authenticated;

-- =================================================================
-- FIM — Volte ao sistema e recarregue a página de usuários
-- =================================================================
Abrir Supabase SQL Editor

Fluxo completo para criar um novo usuário

  1. Execute o SQL acima no Supabase SQL Editor (apenas uma vez)
  2. Vá em Supabase → Authentication → Users → Add user — crie e-mail e senha
  3. Copie o UUID do usuário recém-criado
  4. Clique em "Novo Usuário" nesta tela, cole o UUID, defina nome, papel e pessoa vinculada
  5. Clique em "Criar Perfil" — o usuário aparecerá na lista

Pré-cadastros

Solicitações enviadas por locadores e locatários via formulário público

Form. Locador Form. Locatário
Total
Pendentes
Aprovados
Importados
Recusados
Protocolo Tipo Nome CPF/CNPJ E-mail Celular Imóvel Data Status Ações