Documento interno
Arquitetura Tecnica

Modelo de Dados

Entidades, RLS e relacionamentos no Postgres do Romeo.

Versao
1.0
Atualizado
junho/2026
Status
rascunho
1

Visao geral

O Romeo usa Supabase (Postgres) como banco de dados principal. O modelo e multi-tenant por organizacao, com Row Level Security (RLS) garantindo isolamento.

Principio
Cada dado pertence a uma organizacao. Usuarios so acessam dados da organizacao onde estao vinculados, exceto Admin da plataforma.
2

Entidades principais

Core

EntidadeDescricaoRelacionamentos chave
organizacoesImobiliaria ou corretor autonomo1:N membros, 1:N imoveis
membrosUsuario vinculado a organizacaoN:1 organizacao, N:1 papel
papeisDefinicao de permissoes1:N membros
pessoasProprietarios, inquilinos, leadsN:N imoveis, N:1 organizacao
imoveisImovel cadastradoN:1 organizacao, N:1 corretor

Transacional

EntidadeDescricaoRelacionamentos chave
contratosLocacao ou vendaN:1 imovel, N:1 inquilino
reservasTemporadaN:1 imovel, N:1 hospede
transacoesPagamentos e recebimentosN:1 contrato
atividadesTimeline de acoesN:1 imovel, N:1 membro
documentosArquivos anexadosN:1 contrato, N:1 imovel

Auxiliar

EntidadeDescricao
marcasMarcas/sites da organizacao
tarefasTarefas e lembretes
notificacoesAlertas para usuarios
audit_logTrilha de auditoria
3

Relacionamentos

O diagrama completo esta disponivel em /docs/tech/database. Principais cardinalidades:

  • Organizacao → Imoveis — 1:N (uma organizacao tem muitos imoveis)
  • Imovel → Corretor — N:1 (cada imovel tem um corretor responsavel)
  • Imovel → Proprietario — N:N (imovel pode ter multiplos proprietarios)
  • Contrato → Imovel — N:1 (um imovel pode ter historico de contratos)
4

Row Level Security

Todas as tabelas tem RLS ativado. Politicas principais:

-- Isolamento por organizacao
CREATE POLICY org_isolation ON imoveis
  USING (organizacao_id = auth.jwt() ->> 'org_id');

-- Corretor so ve seus imoveis
CREATE POLICY corretor_imoveis ON imoveis
  USING (
    corretor_id = auth.uid()
    OR papel IN ('dono', 'gestor', 'secretaria')
  );

-- Inquilino so ve seu contrato
CREATE POLICY inquilino_contrato ON contratos
  USING (inquilino_user_id = auth.uid());

Detalhes completos de RLS em /docs/rbac e /docs/tech/rbac-permissoes.

5

Auditoria e historico

Toda acao sensivel e logada na tabela audit_log:

CampoDescricao
user_idQuem executou a acao
actionTipo de acao (create, update, delete)
entity_typeTabela afetada
entity_idID do registro
old_data / new_dataSnapshot antes e depois
ip_addressIP do usuario
created_atTimestamp
LGPD
A trilha de auditoria e essencial para compliance. Retencao de 1 ano para logs, 5 anos para dados contratuais.