# VentoApp: Plataforma para Cálculo de Forças Devidas ao Vento (NBR 6123:2023)
## Plano Técnico de Implantação e Arquitetura de Software

Este documento serve como especificação técnica detalhada para o desenvolvimento do **VentoApp**. Ele foi estruturado para guiar engenheiros de software e Modelos de Linguagem (LLMs) na codificação completa da plataforma, garantindo rigor normativo, responsividade multiplataforma (mobile/desktop), interatividade 3D orbital e precisão de cálculo.

---

## 1. Stack Tecnológica Recomendada

Para atender à exigência de rodar em dispositivos móveis e desktops com alto desempenho gráfico (3D) e capacidade offline, a arquitetura recomendada é baseada em web standards modernos:

* **Frontend Framework:** React.js ou Vue.js (com TypeScript para garantir tipagem estática e evitar bugs matemáticos).
* **Build Tool:** Vite (rápido e otimizado).
* **Engine 3D:** Three.js com React Three Fiber (R3F) para controle declarativo do ambiente 3D, ou BabylonJS.
* **Estilização (UI/UX):** Vanilla CSS ou Tailwind CSS, utilizando conceitos de *glassmorphism*, temas Dark/Light nativos e transições suaves de micro-interações.
* **Gerenciador de Estado:** Redux Toolkit ou Zustand (Zustand é recomendado pela simplicidade em aplicações com intensa reatividade gráfica).
* **Banco de Dados Local (Offline):** IndexedDB (via biblioteca Wrapper `Dexie.js`) para persistência de projetos no navegador do usuário sem necessidade de conexão imediata com o backend.
* **Geração de PDF:** `react-pdf` ou `jspdf` combinada com `html2canvas` para renderização de relatórios altamente diagramados diretamente no cliente.
* **Módulos de Teste:** Jest ou Vitest (essencial para validar as rotinas matemáticas de forma rigorosa).

---

## 2. Arquitetura de Software (Engine de Cálculo)

A Engine de Cálculo deve ser isolada da interface do usuário. Recomenda-se utilizar o padrão de projeto **Strategy** para desacoplar as regras de carregamento de vento de acordo com o tipo de estrutura geométrica.

### Diagrama Conceitual de Classes/Módulos:

```
                  +--------------------------------+
                  |     Configuração Global        |
                  |  (V0, S1, S2, S3, Categoria,   |
                  |   Classe, Rugosidade, z)       |
                  +--------------------------------+
                                  |
                                  v
                  +--------------------------------+
                  |      Kernel de Pressão (q)     |
                  |   Calcula Vk e Dinâmica q      |
                  +--------------------------------+
                                  |
            +---------------------+---------------------+
            |                     |                     |
            v                     v                     v
   +-----------------+   +-----------------+   +-----------------+
   |  Calculadora    |   |  Calculadora    |   |  Calculadora    |
   |   Galpao        |   |   TorreTrel     |   |   SiloCilindro  |
   | (Strategy A)    |   | (Strategy B)    |   | (Strategy C)    |
   +-----------------+   +-----------------+   +-----------------+
            |                     |                     |
            +---------------------+---------------------+
                                  |
                                  v
                  +--------------------------------+
                  |   Conversor de Cargas Globais  |
                  |       e Coeficientes Locais    |
                  +--------------------------------+
```

---

## 3. Lógica e Modelagem Matemática (NBR 6123)

O Kernel do sistema deve programar rigorosamente as seguintes equações físicas:

### 3.1. Pressão Dinâmica Básica
1. **Velocidade Característica ($V_k$):**
   $$V_k = V_0 \cdot S_1 \cdot S_2 \cdot S_3$$
   *Onde:*
   * $V_0$: Velocidade básica do vento (obtida do banco de dados de isopletas/municípios do Brasil ou inserida manualmente pelo usuário).
   * $S_1$: Fator topográfico (Fórmulas para taludes/encostas e vales conforme Seção 5.2 da norma).
   * $S_2$: Fator de rugosidade e dimensões (Equação exponencial: $S_2 = b \cdot F_r \cdot (z/10)^p$ onde os parâmetros $b$, $F_r$ e $p$ dependem da categoria de rugosidade (I a V) e da classe da estrutura (A, B, C) conforme Tabela 2 da norma).
   * $S_3$: Fator estatístico (Valores discretos definidos conforme o grupo de ocupação da estrutura, variando de $0,83$ a $1,10$ conforme Tabela 3).

2. **Pressão Dinâmica ($q$):**
   $$q = 0,613 \cdot V_k^2 \quad (\text{em } N/m^2 \text{ ou } Pa)$$

### 3.2. Mecanismo de Interpolação de Tabelas (NBR 6123)
Muitas tabelas da norma fornecem coeficientes de pressão externa ($C_{pe}$) discretos para relações geométricas específicas (ex: $h/b = 0.5, 1.0, 2.0$ e $a/b = 1.0, 1.5, 2.0, 4.0$).
* A Engine de Cálculo deve implementar uma função de **Interpolação Bilinear** para mapear dados geométricos exatos inseridos pelo usuário.
* *Fórmula de Interpolação Bilinear:*
  Dados quatro pontos conhecidos $Q_{11}(x_1, y_1)$, $Q_{12}(x_1, y_2)$, $Q_{21}(x_2, y_1)$ e $Q_{22}(x_2, y_2)$, a interpolação para o ponto $(x, y)$ é dada por:
  $$f(x, y) \approx \frac{(x_2 - x)(y_2 - y)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{11}) + \frac{(x - x_1)(y_2 - y)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{21}) + \frac{(x_2 - x)(y - y_1)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{12}) + \frac{(x - x_1)(y - y_1)}{(x_2 - x_1)(y_2 - y_1)} f(Q_{22})$$

---

## 4. Estrutura dos Módulos Geométricos

O app deve comportar o cadastro das seguintes estruturas físicas de forma independente:

### 4.1. Módulo Galpão Retangular (Edificações Correntes)
* **Entradas de dados necessárias:**
  * Comprimento ($a$), Largura ($b$), Pé-direito lateral ($h$), Inclinação do telhado ($\theta$ ou %).
  * Espaçamento entre pórticos principais (para linearização de cargas em pilares).
  * Espaçamento entre terças (para linearização de cargas no telhado).
  * Permeabilidade das paredes (área de abertura em cada uma das 4 fachadas e seleção de abertura dominante ativa para o cálculo de $C_{pi}$).
* **Lógica interna:**
  * Mapeia as zonas de parede (A, B, C, D) e cobertura (E, F, G, H, I, J) conforme as Tabelas 4 e 5 da NBR 6123.
  * Calcula a pressão interna combinada $C_{pi}$ (limites normativos $+0,9$ a $-0,9$, dependendo das aberturas).
  * Executa a combinação de cargas: $p = (C_{pe} - C_{pi}) \cdot q$.
  * Saída: Vetores de pressão local aplicados em cada região.

### 4.2. Módulo Torres de Linhas de Transmissão e Telecomunicações
* **Entradas de dados necessárias:**
  * Altura da torre ($H$), largura da base ($B_{base}$), largura do topo ($B_{topo}$).
  * Número de tramos (módulos verticais).
  * Tipo de seção (Triangular ou Quadrada).
  * Perfis constitutivos (Cantoneiras de abas iguais ou Perfis Tubulares).
  * Taxa de solidez da treliça ($\phi$).
* **Lógica interna:**
  * Determina o coeficiente de arrasto ($C_a$) para vento perpendicular e vento diagonal conforme Tabela 18 da norma.
  * Aplica fatores de blindagem caso haja painéis paralelos.
  * Calcula a força global por tramo usando a fórmula de força de arrasto:
    $$F = C_a \cdot q \cdot A_e$$
    *(Onde $A_e$ é a área efetiva projetada dos membros da torre).*

### 4.3. Módulo Silos Cilíndricos e Reservatórios
* **Entradas de dados necessárias:**
  * Diâmetro ($D$), Altura do cilindro ($H$), Tipo de cobertura (plana, cônica, calota esférica).
* **Lógica interna:**
  * Calcula os coeficientes de pressão externa como função do ângulo de incidência do vento ($\alpha$, variando de $0^\circ$ a $180^\circ$) conforme a Figura 16 da norma.
  * Aplica fatores de correção para relação $H/D$.

---

## 5. Visualização 3D Orbital e Experiência do Usuário (UI/UX)

A interface deve ser desenhada com o fluxo em etapas ("Wizard") e com o visualizador 3D acoplado:

### 5.1. O Visualizador 3D (Implementação WebGL)
* Utilizar **React Three Fiber** para renderizar um modelo paramétrico da estrutura selecionada.
* O modelo é gerado proceduralmente com base nos inputs de largura, comprimento, altura e inclinação.
* **Texturas Dinâmicas (Mapas de Pressão / Vertex Coloring):**
  * Mapear as coordenadas 3D de cada polígono do modelo para a sua respectiva zona de pressão.
  * Pintar os polígonos usando um gradiente de cores:
    * **Vermelho/Laranja:** Altas pressões positivas (esforço empurrando para dentro da estrutura).
    * **Azul/Roxo:** Altas pressões negativas (sucção/arrancamento).
    * **Verde/Cinza:** Zonas neutras ou de baixa pressão.
  * Mostrar setas indicativas de força tridimensionais (vetores normais às superfícies) saindo ou entrando nas faces da estrutura de acordo com a hipótese de vento selecionada.

### 5.2. Interatividade no Modelo 3D
* **Controle Orbital:** Rotação livre com botão esquerdo do mouse (desktop) ou arrastar com um dedo (mobile); Pan com botão direito/dois dedos; Zoom com scroll/pinch.
* **Raycasting para Inspeção:** Ao clicar (ou tocar) em um polígono do modelo 3D, o sistema deve detectar a zona colidida e disparar uma gaveta de informações (Drawer lateral) mostrando o memorial de cálculo daquela face da estrutura.

---

## 6. Fluxo de Geração de Relatórios e Exportação de Dados

O aplicativo deve gerar memórias de cálculo profissionais em formato PDF e permitir a integração com outros softwares.

### 6.1. Memorial em PDF Ilustrado (Didático)
O PDF exportado deve seguir uma estrutura moderna com grid limpo:
* **Capa:** Nome do projeto, dados do cliente, engenheiro responsável, ART/CREA, data e localização geográfica.
* **Fatores Globais:** Tabela com valores e justificativas adotadas para $V_0, S_1, S_2, S_3$ e o valor resultante da pressão dinâmica de projeto ($q$).
* **Modelagem 3D Estática:** Captura de tela gerada automaticamente pelo canvas do WebGL mostrando o mapa de calor de pressões para as principais hipóteses de vento.
* **Tabelas de Carga de Projeto:** Planilhas detalhadas das pressões em cada parede e vertente de telhado para vento a $0^\circ$ e $90^\circ$, combinadas com sobrepressão e sucção interna.
* **Equações Passo a Passo:** Renderização de fórmulas matemáticas formatadas em LaTeX (com substituição numérica passo a passo) para fins de auditoria acadêmica.

### 6.2. Exportação de Dados para Softwares Estruturais
* **Ftool Integration:** Exportação de um arquivo formato texto com extensão proprietária compatível com o Ftool, onde o pórtico representativo do galpão já vem desenhado com todas as cargas lineares distribuídas aplicadas sobre as barras.
* **Formatos Abertos:** Exportação de dados das cargas em formato **CSV/Excel** ou arquivo **JSON** estruturado para que o engenheiro possa importar em sistemas internos ou outros softwares de cálculo estrutural tridimensional.

---

## 7. Estratégia de Testes e Validação de Confiabilidade

Para garantir que o aplicativo seja auditável e 100% confiável, a seguinte rotina de testes deve ser implementada no processo de CI/CD (Integração Contínua):

* **Testes de Unidade Matemáticos (Vitest/Jest):**
  * Cadastrar uma suite de testes unitários baseados nos exemplos resolvidos de livros de referência (ex: *"O Vento na Engenharia Estrutural"*, de J. Blessmann, ou manuais acadêmicos de vento em galpões).
  * O teste insere dimensões idênticas às dos exemplos e valida, casa decimal por casa decimal, se os coeficientes e pressões finais obtidos pela engine do app batem exatamente com as referências bibliográficas.
  * Qualquer alteração no código que altere os resultados de cálculo gera falha no build, impedindo a publicação de versões com erros de engenharia.
