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.
PrincipioCada dado pertence a uma organizacao. Usuarios so acessam dados da organizacao onde estao vinculados, exceto Admin da plataforma.
2
Entidades principais
Core
| Entidade | Descricao | Relacionamentos chave |
|---|---|---|
| organizacoes | Imobiliaria ou corretor autonomo | 1:N membros, 1:N imoveis |
| membros | Usuario vinculado a organizacao | N:1 organizacao, N:1 papel |
| papeis | Definicao de permissoes | 1:N membros |
| pessoas | Proprietarios, inquilinos, leads | N:N imoveis, N:1 organizacao |
| imoveis | Imovel cadastrado | N:1 organizacao, N:1 corretor |
Transacional
| Entidade | Descricao | Relacionamentos chave |
|---|---|---|
| contratos | Locacao ou venda | N:1 imovel, N:1 inquilino |
| reservas | Temporada | N:1 imovel, N:1 hospede |
| transacoes | Pagamentos e recebimentos | N:1 contrato |
| atividades | Timeline de acoes | N:1 imovel, N:1 membro |
| documentos | Arquivos anexados | N:1 contrato, N:1 imovel |
Auxiliar
| Entidade | Descricao |
|---|---|
| marcas | Marcas/sites da organizacao |
| tarefas | Tarefas e lembretes |
| notificacoes | Alertas para usuarios |
| audit_log | Trilha 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:
| Campo | Descricao |
|---|---|
| user_id | Quem executou a acao |
| action | Tipo de acao (create, update, delete) |
| entity_type | Tabela afetada |
| entity_id | ID do registro |
| old_data / new_data | Snapshot antes e depois |
| ip_address | IP do usuario |
| created_at | Timestamp |
LGPDA trilha de auditoria e essencial para compliance. Retencao de 1 ano para logs, 5 anos para dados contratuais.