Imóveis
Portfólio completo de imóveis cadastrados
| Código | Endereço | Tipo | Características | Aluguel | Proprietário | Status | Ações |
|---|---|---|---|---|---|---|---|
Pessoas
Locadores, Locatários e Fiadores
| Nome / CPF | Tipo | Contato | Cidade / UF | Status | Ações | |
|---|---|---|---|---|---|---|
Cláusulas Contratuais
Banco de cláusulas pré-cadastradas e editáveis
| Nº | Título | Categoria | Prévia do Conteúdo | Finalidade | Status | Ações |
|---|---|---|---|---|---|---|
Contratos de Locação
Geração, assinatura e gestão de contratos
| Número | Locatário / Locador | Imóvel | Aluguel | Venc. | Vigência | Índice | Status | Ações |
|---|---|---|---|---|---|---|---|---|
Boletos e Cobranças
Geração e controle de boletos mensais
| Número | Contrato | Locatário | Competência | Vencimento | Composição | Valor Total | Pago em / Status | Açõ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
| Contrato | Locatário | Imóvel | Valor Atual | Índice | Próximo Reajuste | Novo 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
| Contrato | Locatário | Imóvel | Data Rescisão | Motivo | Multa 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ês | Receita Bruta | Repasses | Taxa Adm. | Part. % |
|---|---|---|---|---|
Ocupação do Portfólio
Inadimplência
| Locatário | Imóvel | Comp. | Vencimento | Atraso | Valor c/ Enc. |
|---|
Receita por Imóvel
| Imóvel | Locador | Locatário | Boletos Pagos | Receita Total | Participaçã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
| Contrato | Locatário | Imóvel | Vencimento | Prazo | Ação |
|---|---|---|---|---|---|
Reajustes Pendentes nos Próximos 60 Dias
| Contrato | Locatário | Imóvel | Novo Valor | Prazo |
|---|---|---|---|---|
Boletos Vencidos (Inadimplência)
| Boleto | Locatário | Imóvel | Vencimento | Dias em Atraso | Valor 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
| Nome | Nível de Acesso | Pessoa Vinculada | Criado em | Status | Açõ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
-- =================================================================
Fluxo completo para criar um novo usuário
- Execute o SQL acima no Supabase SQL Editor (apenas uma vez)
- Vá em Supabase → Authentication → Users → Add user — crie e-mail e senha
- Copie o UUID do usuário recém-criado
- Clique em "Novo Usuário" nesta tela, cole o UUID, defina nome, papel e pessoa vinculada
- 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
| Protocolo | Tipo | Nome | CPF/CNPJ | Celular | Imóvel | Data | Status | Ações | |
|---|---|---|---|---|---|---|---|---|---|