# Documento de Arquitetura Técnica - RDO Mobile App ## 1. Design da Arquitetura ```mermaid 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 | | ----------------- | ------ | ----------- | ---------------- | | email | 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: ```json { "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 ```mermaid 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 ```mermaid 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)** ```sql -- 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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)** ```sql 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** ```sql -- 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** ```sql -- 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** ```sql -- 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'); ```