23 KiB
Documento de Arquitetura Técnica - RDO Mobile App
1. Design da Arquitetura
graph TD
A[Usuário Mobile] --> B[React Native/PWA Frontend]
B --> C[Supabase SDK]
C --> D[Supabase Backend]
subgraph "Frontend Layer"
B
E[Zustand State Management]
F[React Hook Form]
G[Framer Motion]
H[Tailwind CSS]
end
subgraph "Backend as a Service (Supabase)"
D
I[PostgreSQL Database]
J[Authentication]
K[Storage (Fotos/Docs)]
L[Real-time Subscriptions]
end
subgraph "Funcionalidades Offline"
M[IndexedDB Cache]
N[Service Worker]
O[Background Sync]
end
B --> M
N --> B
O --> C
2. Descrição das Tecnologias
-
Frontend: React@18 + TypeScript + Vite + Tailwind CSS
-
Mobile: PWA (Progressive Web App) com Capacitor para recursos nativos
-
Estado: Zustand para gerenciamento de estado global
-
Formulários: React Hook Form + Zod para validação
-
Animações: Framer Motion para microinterações
-
UI Components: Headless UI + Radix UI primitives
-
Ícones: Phosphor Icons
-
Backend: Supabase (PostgreSQL + Auth + Storage + Real-time)
-
Cache: TanStack Query para cache de dados
-
Offline: Workbox para service workers
3. Definições de Rotas
| Rota | Propósito |
|---|---|
| / | Dashboard principal com visão geral das obras |
| /obra/:id | Detalhes específicos de uma obra |
| /obra/:id/rdo/novo | Formulário para criar novo RDO |
| /obra/:id/rdo/:rdoId | Visualizar/editar RDO específico |
| /obra/:id/tarefas | Lista de tarefas da obra |
| /cadastros | Menu principal de cadastros |
| /cadastros/obras | Formulário de cadastro de obras |
| /cadastros/usuarios | Gerenciamento de usuários |
| /cadastros/equipamentos | Cadastro de equipamentos |
| /cadastros/atividades | Tipos de atividades padrão |
| /relatorios | Dashboard de relatórios e exportações |
| /perfil | Configurações do usuário |
| /configuracoes | Configurações do aplicativo |
4. Definições de API
4.1 APIs Principais
Autenticação de Usuário
POST /auth/v1/token
Request:
| Nome do Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| string | true | Email do usuário | |
| password | string | true | Senha do usuário |
Response:
| Nome do Parâmetro | Tipo | Descrição |
|---|---|---|
| access_token | string | Token JWT para autenticação |
| user | object | Dados do usuário autenticado |
Criar RDO
POST /rest/v1/rdos
Request:
| Nome do Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| obra_id | uuid | true | ID da obra |
| data_relatorio | date | true | Data do relatório |
| condicoes_climaticas | string | true | Condições do tempo |
| atividades | array | true | Lista de atividades executadas |
| mao_de_obra | array | false | Funcionários presentes |
| equipamentos | array | false | Equipamentos utilizados |
| ocorrencias | array | false | Ocorrências registradas |
Response:
| Nome do Parâmetro | Tipo | Descrição |
|---|---|---|
| id | uuid | ID do RDO criado |
| status | string | Status do relatório |
| created_at | timestamp | Data de criação |
Exemplo:
{
"obra_id": "123e4567-e89b-12d3-a456-426614174000",
"data_relatorio": "2024-01-15",
"condicoes_climaticas": "Ensolarado",
"atividades": [
{
"tipo": "Concretagem",
"descricao": "Concretagem da laje do 2º pavimento",
"percentual_concluido": 75
}
]
}
Listar Obras
GET /rest/v1/obras
Response:
| Nome do Parâmetro | Tipo | Descrição |
|---|---|---|
| id | uuid | ID da obra |
| nome | string | Nome da obra |
| endereco | string | Endereço da obra |
| status | string | Status atual (ativa, pausada, concluída) |
| progresso | number | Percentual de conclusão |
5. Arquitetura do Servidor
graph TD
A[Cliente Mobile] --> B[Supabase Edge Functions]
B --> C[Supabase Auth]
B --> D[PostgreSQL Database]
B --> E[Supabase Storage]
subgraph "Supabase Backend"
C
D
E
F[Real-time Engine]
G[Row Level Security]
end
subgraph "Edge Functions"
H[Geração de Relatórios PDF]
I[Processamento de Imagens]
J[Notificações Push]
end
B --> H
B --> I
B --> J
6. Modelo de Dados
6.1 Definição do Modelo de Dados
erDiagram
USUARIOS ||--o{ OBRAS : gerencia
USUARIOS ||--o{ RDOS : cria
OBRAS ||--o{ RDOS : possui
OBRAS ||--o{ TAREFAS : contem
RDOS ||--o{ RDO_ATIVIDADES : possui
RDOS ||--o{ RDO_MAO_OBRA : registra
RDOS ||--o{ RDO_EQUIPAMENTOS : utiliza
RDOS ||--o{ RDO_OCORRENCIAS : reporta
RDOS ||--o{ RDO_ANEXOS : contem
RDOS ||--o{ RDO_INSPECOES_SOLDA : possui
RDOS ||--o{ RDO_VERIFICACOES_TORQUE : possui
TAREFAS ||--o{ TASK_LOGS : possui
USUARIOS ||--o{ TASK_LOGS : executa
USUARIOS {
uuid id PK
string email UK
string nome
string telefone
string cargo
string role
boolean ativo
timestamp created_at
timestamp updated_at
}
OBRAS {
uuid id PK
string nome
string descricao
string endereco
string cep
string cidade
string estado
uuid responsavel_id FK
date data_inicio
date data_prevista_fim
decimal progresso_geral
string status
jsonb configuracoes
timestamp created_at
timestamp updated_at
}
RDOS {
uuid id PK
uuid obra_id FK
uuid criado_por FK
date data_relatorio
string condicoes_climaticas
text observacoes_gerais
string status
uuid aprovado_por FK
timestamp aprovado_em
timestamp created_at
timestamp updated_at
}
RDO_ATIVIDADES {
uuid id PK
uuid rdo_id FK
string tipo_atividade
text descricao
string localizacao
decimal percentual_concluido
integer ordem
timestamp created_at
}
RDO_MAO_OBRA {
uuid id PK
uuid rdo_id FK
string funcao
integer quantidade
decimal horas_trabalhadas
text observacoes
timestamp created_at
}
RDO_EQUIPAMENTOS {
uuid id PK
uuid rdo_id FK
string nome_equipamento
string tipo
decimal horas_utilizadas
decimal combustivel_gasto
text observacoes
timestamp created_at
}
RDO_OCORRENCIAS {
uuid id PK
uuid rdo_id FK
string tipo_ocorrencia
text descricao
string gravidade
text acao_tomada
timestamp created_at
}
RDO_ANEXOS {
uuid id PK
uuid rdo_id FK
string nome_arquivo
string tipo_arquivo
string url_storage
integer tamanho_bytes
text descricao
timestamp created_at
}
RDO_INSPECOES_SOLDA {
uuid id PK
uuid rdo_id FK
string identificacao_junta
string status_inspecao
string metodo_inspecao
text observacoes
uuid inspecionado_por FK
timestamp created_at
}
RDO_VERIFICACOES_TORQUE {
uuid id PK
uuid rdo_id FK
string identificacao_parafuso
decimal torque_especificado
decimal torque_aplicado
string status_verificacao
text observacoes
uuid verificado_por FK
timestamp created_at
}
TAREFAS {
uuid id PK
uuid obra_id FK
string titulo
text descricao
string status
string prioridade
uuid responsavel_id FK
date data_inicio
date data_fim
decimal progresso
jsonb metadados
timestamp created_at
timestamp updated_at
}
TASK_LOGS {
uuid id PK
uuid task_id FK
uuid usuario_id FK
string tipo_evento
text descricao
jsonb detalhes
timestamp created_at
}
RDOS ||--o{ OCORRENCIAS : possui
RDOS ||--o{ ANEXOS : contem
OBRAS ||--o{ TAREFAS : possui
EQUIPAMENTOS ||--o{ EQUIPAMENTOS_UTILIZADOS : referencia
USUARIOS {
uuid id PK
string email
string nome
string funcao
string telefone
timestamp created_at
timestamp updated_at
}
OBRAS {
uuid id PK
string nome
string endereco
string descricao
date data_inicio
date data_prevista_fim
string status
decimal progresso_percentual
uuid responsavel_id FK
timestamp created_at
}
RDOS {
uuid id PK
uuid obra_id FK
uuid criado_por FK
date data_relatorio
string condicoes_climaticas
text observacoes_gerais
string status
timestamp created_at
}
ATIVIDADES {
uuid id PK
uuid rdo_id FK
string tipo_atividade
text descricao
string localizacao
decimal percentual_concluido
time hora_inicio
time hora_fim
}
MAO_DE_OBRA {
uuid id PK
uuid rdo_id FK
string nome_funcionario
string funcao
decimal horas_trabalhadas
boolean presente
}
EQUIPAMENTOS {
uuid id PK
string nome
string tipo
string modelo
string status
text observacoes
}
EQUIPAMENTOS_UTILIZADOS {
uuid id PK
uuid rdo_id FK
uuid equipamento_id FK
decimal horas_operacao
decimal combustivel_consumido
text observacoes
}
OCORRENCIAS {
uuid id PK
uuid rdo_id FK
string tipo
text descricao
string gravidade
boolean resolvida
}
ANEXOS {
uuid id PK
uuid rdo_id FK
string tipo
string url_arquivo
string nome_arquivo
text descricao
}
TAREFAS {
uuid id PK
uuid obra_id FK
string titulo
text descricao
date data_prevista
string status
string prioridade
uuid responsavel_id FK
}
6.2 Linguagem de Definição de Dados (DDL)
Tabela de Usuários (usuarios)
-- Criar tabela
CREATE TABLE usuarios (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
nome VARCHAR(100) NOT NULL,
telefone VARCHAR(20),
cargo VARCHAR(100),
role VARCHAR(20) DEFAULT 'user' CHECK (role IN ('admin', 'supervisor', 'user')),
ativo BOOLEAN DEFAULT true,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Criar índices
CREATE INDEX idx_usuarios_email ON usuarios(email);
CREATE INDEX idx_usuarios_role ON usuarios(role);
CREATE INDEX idx_usuarios_ativo ON usuarios(ativo);
-- Dados iniciais
INSERT INTO usuarios (email, nome, cargo, role) VALUES
('admin@rdo.com', 'Administrador', 'Gerente de Projeto', 'admin'),
('supervisor@rdo.com', 'Supervisor', 'Supervisor de Obra', 'supervisor'),
('user@rdo.com', 'Usuário Padrão', 'Técnico', 'user');
Tabela de Obras (obras)
CREATE TABLE obras (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nome VARCHAR(255) NOT NULL,
descricao TEXT,
endereco TEXT,
cep VARCHAR(10),
cidade VARCHAR(100),
estado VARCHAR(2),
responsavel_id UUID REFERENCES usuarios(id),
data_inicio DATE,
data_prevista_fim DATE,
progresso_geral DECIMAL(5,2) DEFAULT 0.00,
status VARCHAR(20) DEFAULT 'planejamento' CHECK (status IN ('planejamento', 'em_andamento', 'pausada', 'concluida', 'cancelada')),
configuracoes JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_obras_responsavel ON obras(responsavel_id);
CREATE INDEX idx_obras_status ON obras(status);
CREATE INDEX idx_obras_data_inicio ON obras(data_inicio);
Tabela de RDOs (rdos)
CREATE TABLE rdos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
obra_id UUID NOT NULL REFERENCES obras(id),
criado_por UUID NOT NULL REFERENCES usuarios(id),
data_relatorio DATE NOT NULL,
condicoes_climaticas VARCHAR(100),
observacoes_gerais TEXT,
status VARCHAR(20) DEFAULT 'rascunho' CHECK (status IN ('rascunho', 'enviado', 'aprovado', 'rejeitado')),
aprovado_por UUID REFERENCES usuarios(id),
aprovado_em TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdos_obra ON rdos(obra_id);
CREATE INDEX idx_rdos_criado_por ON rdos(criado_por);
CREATE INDEX idx_rdos_data_relatorio ON rdos(data_relatorio);
CREATE INDEX idx_rdos_status ON rdos(status);
Tabela de Atividades do RDO (rdo_atividades)
CREATE TABLE rdo_atividades (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
tipo_atividade VARCHAR(100) NOT NULL,
descricao TEXT,
localizacao VARCHAR(255),
percentual_concluido DECIMAL(5,2) DEFAULT 0.00,
ordem INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_atividades_rdo ON rdo_atividades(rdo_id);
CREATE INDEX idx_rdo_atividades_tipo ON rdo_atividades(tipo_atividade);
Tabela de Mão de Obra (rdo_mao_obra)
CREATE TABLE rdo_mao_obra (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
funcao VARCHAR(100) NOT NULL,
quantidade INTEGER NOT NULL DEFAULT 1,
horas_trabalhadas DECIMAL(5,2) NOT NULL DEFAULT 0.00,
observacoes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_mao_obra_rdo ON rdo_mao_obra(rdo_id);
CREATE INDEX idx_rdo_mao_obra_funcao ON rdo_mao_obra(funcao);
Tabela de Equipamentos (rdo_equipamentos)
CREATE TABLE rdo_equipamentos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
nome_equipamento VARCHAR(255) NOT NULL,
tipo VARCHAR(100),
horas_utilizadas DECIMAL(5,2) DEFAULT 0.00,
combustivel_gasto DECIMAL(8,2) DEFAULT 0.00,
observacoes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_equipamentos_rdo ON rdo_equipamentos(rdo_id);
CREATE INDEX idx_rdo_equipamentos_tipo ON rdo_equipamentos(tipo);
Tabela de Ocorrências (rdo_ocorrencias)
CREATE TABLE rdo_ocorrencias (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
tipo_ocorrencia VARCHAR(100) NOT NULL,
descricao TEXT NOT NULL,
gravidade VARCHAR(20) DEFAULT 'baixa' CHECK (gravidade IN ('baixa', 'media', 'alta', 'critica')),
acao_tomada TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_ocorrencias_rdo ON rdo_ocorrencias(rdo_id);
CREATE INDEX idx_rdo_ocorrencias_tipo ON rdo_ocorrencias(tipo_ocorrencia);
CREATE INDEX idx_rdo_ocorrencias_gravidade ON rdo_ocorrencias(gravidade);
Tabela de Anexos (rdo_anexos)
CREATE TABLE rdo_anexos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
nome_arquivo VARCHAR(255) NOT NULL,
tipo_arquivo VARCHAR(50),
url_storage TEXT NOT NULL,
tamanho_bytes INTEGER,
descricao TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_anexos_rdo ON rdo_anexos(rdo_id);
CREATE INDEX idx_rdo_anexos_tipo ON rdo_anexos(tipo_arquivo);
Tabela de Inspeções de Solda (rdo_inspecoes_solda)
CREATE TABLE rdo_inspecoes_solda (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
identificacao_junta VARCHAR(100) NOT NULL,
status_inspecao VARCHAR(20) DEFAULT 'pendente' CHECK (status_inspecao IN ('pendente', 'aprovada', 'rejeitada', 'retrabalho')),
metodo_inspecao VARCHAR(100),
observacoes TEXT,
inspecionado_por UUID REFERENCES usuarios(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_inspecoes_solda_rdo ON rdo_inspecoes_solda(rdo_id);
CREATE INDEX idx_rdo_inspecoes_solda_status ON rdo_inspecoes_solda(status_inspecao);
Tabela de Verificações de Torque (rdo_verificacoes_torque)
CREATE TABLE rdo_verificacoes_torque (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rdo_id UUID NOT NULL REFERENCES rdos(id) ON DELETE CASCADE,
identificacao_parafuso VARCHAR(100) NOT NULL,
torque_especificado DECIMAL(8,2) NOT NULL,
torque_aplicado DECIMAL(8,2) NOT NULL,
status_verificacao VARCHAR(20) DEFAULT 'conforme' CHECK (status_verificacao IN ('conforme', 'nao_conforme', 'retrabalho')),
observacoes TEXT,
verificado_por UUID REFERENCES usuarios(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_rdo_verificacoes_torque_rdo ON rdo_verificacoes_torque(rdo_id);
CREATE INDEX idx_rdo_verificacoes_torque_status ON rdo_verificacoes_torque(status_verificacao);
Tabela de Tarefas (tarefas)
CREATE TABLE tarefas (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
obra_id UUID NOT NULL REFERENCES obras(id),
titulo VARCHAR(255) NOT NULL,
descricao TEXT,
status VARCHAR(20) DEFAULT 'pendente' CHECK (status IN ('pendente', 'em_andamento', 'concluida', 'cancelada')),
prioridade VARCHAR(20) DEFAULT 'media' CHECK (prioridade IN ('baixa', 'media', 'alta', 'urgente')),
responsavel_id UUID REFERENCES usuarios(id),
data_inicio DATE,
data_fim DATE,
progresso DECIMAL(5,2) DEFAULT 0.00,
metadados JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_tarefas_obra ON tarefas(obra_id);
CREATE INDEX idx_tarefas_responsavel ON tarefas(responsavel_id);
CREATE INDEX idx_tarefas_status ON tarefas(status);
CREATE INDEX idx_tarefas_prioridade ON tarefas(prioridade);
Tabela de Logs de Tarefas (task_logs)
CREATE TABLE task_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID NOT NULL REFERENCES tarefas(id) ON DELETE CASCADE,
usuario_id UUID NOT NULL REFERENCES usuarios(id),
tipo_evento VARCHAR(50) NOT NULL,
descricao TEXT,
detalhes JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_task_logs_task ON task_logs(task_id);
CREATE INDEX idx_task_logs_usuario ON task_logs(usuario_id);
CREATE INDEX idx_task_logs_tipo ON task_logs(tipo_evento);
CREATE INDEX idx_task_logs_created_at ON task_logs(created_at DESC);
Tabela de Obras
-- Criar tabela de obras
CREATE TABLE obras (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nome VARCHAR(200) NOT NULL,
endereco TEXT NOT NULL,
descricao TEXT,
data_inicio DATE NOT NULL,
data_prevista_fim DATE,
status VARCHAR(20) DEFAULT 'ativa' CHECK (status IN ('ativa', 'pausada', 'concluida')),
progresso_percentual DECIMAL(5,2) DEFAULT 0.00,
responsavel_id UUID REFERENCES usuarios(id),
orcamento_total DECIMAL(15,2),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Criar índices
CREATE INDEX idx_obras_status ON obras(status);
CREATE INDEX idx_obras_responsavel ON obras(responsavel_id);
CREATE INDEX idx_obras_data_inicio ON obras(data_inicio DESC);
-- Políticas RLS
ALTER TABLE obras ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Usuários podem ver obras que participam" ON obras
FOR SELECT USING (
responsavel_id = auth.uid() OR
EXISTS (
SELECT 1 FROM usuarios
WHERE id = auth.uid() AND funcao IN ('Gestor', 'Engenheiro')
)
);
-- Permissões
GRANT SELECT ON obras TO anon;
GRANT ALL PRIVILEGES ON obras TO authenticated;
Tabela de RDOs
-- Criar tabela de RDOs
CREATE TABLE rdos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
obra_id UUID NOT NULL REFERENCES obras(id) ON DELETE CASCADE,
criado_por UUID NOT NULL REFERENCES usuarios(id),
data_relatorio DATE NOT NULL,
condicoes_climaticas VARCHAR(50) NOT NULL,
temperatura_min DECIMAL(4,1),
temperatura_max DECIMAL(4,1),
observacoes_gerais TEXT,
status VARCHAR(20) DEFAULT 'rascunho' CHECK (status IN ('rascunho', 'enviado', 'aprovado')),
aprovado_por UUID REFERENCES usuarios(id),
aprovado_em TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Criar índices
CREATE INDEX idx_rdos_obra_id ON rdos(obra_id);
CREATE INDEX idx_rdos_data_relatorio ON rdos(data_relatorio DESC);
CREATE INDEX idx_rdos_status ON rdos(status);
CREATE INDEX idx_rdos_criado_por ON rdos(criado_por);
-- Constraint única para evitar múltiplos RDOs na mesma data/obra
CREATE UNIQUE INDEX idx_rdos_obra_data_unique ON rdos(obra_id, data_relatorio);
-- Políticas RLS
ALTER TABLE rdos ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Usuários podem ver RDOs das suas obras" ON rdos
FOR SELECT USING (
EXISTS (
SELECT 1 FROM obras
WHERE id = obra_id AND (
responsavel_id = auth.uid() OR
EXISTS (
SELECT 1 FROM usuarios
WHERE usuarios.id = auth.uid() AND funcao IN ('Gestor', 'Engenheiro')
)
)
)
);
-- Permissões
GRANT SELECT ON rdos TO anon;
GRANT ALL PRIVILEGES ON rdos TO authenticated;
Dados Iniciais
-- Inserir tipos de atividades padrão
INSERT INTO tipos_atividades (nome, categoria) VALUES
('Escavação', 'Terraplanagem'),
('Fundação', 'Estrutura'),
('Concretagem', 'Estrutura'),
('Alvenaria', 'Vedação'),
('Instalação Elétrica', 'Instalações'),
('Instalação Hidráulica', 'Instalações'),
('Revestimento', 'Acabamento'),
('Pintura', 'Acabamento');
-- Inserir condições climáticas padrão
INSERT INTO condicoes_climaticas (descricao) VALUES
('Ensolarado'),
('Parcialmente Nublado'),
('Nublado'),
('Chuvisco'),
('Chuva Leve'),
('Chuva Forte'),
('Tempestade');