# VentoApp — NBR 6123:2023 > **Status (jul/2026):** 8/8 marcos concluídos. 100% de cobertura da NBR 6123:2023. > **Próximas melhorias:** ver [`../PROGRESS.md`](../PROGRESS.md) seção "Roadmap pós-Marco 8". Aplicativo para cálculo de cargas de vento conforme a norma brasileira **ABNT NBR 6123:2023** — Forças devidas ao vento em edificações. ## 🎯 Cobertura Implementa **100% das seções e anexos normativos**: - **Sec. 5** — Velocidade característica (V₀, S₁, S₂, S₃, mudança de rugosidade) - **Sec. 6.1** — Edificações paralelepipédicas (Tabelas 6–12, excentricidade, atrito, alta turbulência) - **Sec. 6.2** — Superfícies curvas: cilindros, abóbadas, cúpulas (Tabelas 13–22) - **Sec. 6.3** — Pressão interna (Cpi) — método simplificado + detalhado - **Sec. 6.4** — Efeitos de vizinhança (fᵥ) - **Sec. 7** — Muros, placas, coberturas isoladas (Tabelas 23–25) - **Sec. 8** — Barras prismáticas, reticulados, torres (Tabelas 26–30 + Figs 12–18) - **Sec. 9** — Efeitos dinâmicos em estruturas alteadas, conforto humano - **Sec. 10** — Vibração por desprendimento de vórtices (Vcr, Scruton) - **Sec. 11** — Ação de vento em pontes (Pse, flutter, galope) - **Anexos A, B, C** — S₂(qualquer t), S₃(Pₘ, vida útil), 49 estações meteorológicas ## 🚀 Stack - React 19 + TypeScript + Vite 8 - Tailwind v4 + shadcn/ui (new-york) - Zustand (estado) - @react-three/fiber + drei (3D) - @react-pdf/renderer (PDF) - Vitest (testes) — 38/38 passando ## 🧪 Scripts ```bash cd app npm run dev # desenvolvimento (HMR) npm run build # tsc + vite build npm run lint # oxlint npm test # vitest run (38 testes) npm run test:watch # vitest watch ``` > **Atenção:** Os binários em `node_modules/.bin/` perdem o bit de execução. Se reclamar `Permission denied`, rode `chmod +x node_modules/.bin/` antes. ## 📁 Estrutura ``` app/src/ ├── lib/ │ ├── wind-kernel.ts Motor matemático │ ├── bilinear-interp.ts Interpolação bilinear (sec. 3.2) │ ├── log-interp.ts Interpolação log-linear │ ├── wind-direction.ts Mudança de rugosidade (sec. 5.5) │ ├── internal-pressure.ts Cpi (sec. 6.3) │ ├── neighborhood.ts fᵥ (sec. 6.4) │ ├── coefficients.ts Cpe paredes/telhados (Tab. 6-12) │ ├── excentricity.ts ea, eb (sec. 6.1.4) │ ├── friction.ts Força de atrito (sec. 6.1.5) │ ├── drag.ts Ca baixa/alta turbulência (Figs 4-5) │ ├── comfort.ts a_lim ISO 10137 │ ├── storage.ts Persistência IndexedDB │ ├── theme.tsx Dark/light mode │ ├── i18n.ts Strings pt-BR/en-US │ ├── stations-lookup.ts 49 estações Anexo C │ ├── export-pdf.tsx PDF didático │ ├── export-csv.ts CSV estruturado │ ├── modules/ Strategy pattern (7 módulos) │ ├── nbr-tables/ 36 tabelas + 3 anexos │ ├── hooks/useProjects.ts Hook React │ └── __tests__/ Vitest (5 suites, 38 testes) ├── components/ │ ├── ui/ shadcn/ui │ ├── three/ │ │ ├── Cylinder3D.tsx │ │ ├── Vault3D.tsx │ │ └── Dome3D.tsx │ ├── Warehouse3D.tsx Galpão com zonas A-J │ └── ExportMenu.tsx ├── pages/ 10 páginas ├── store/ Zustand └── App.tsx Rotas + ThemeProvider + Layout ``` ## 📋 Módulos (páginas ativas) | Rota | Módulo | Tabelas/Figs | |------|--------|--------------| | `/galpao` | Galpão retangular com 3D zonas A–J | 6, 7 | | `/cilindro` | Silos, chaminés, reservatórios | 13 + Reynolds | | `/abobada` | Abóbadas cilíndricas | 15–20 | | `/cupula` | Cúpulas (terreno/parede) | 21, 22 + F sust | | `/muros` | Muros e placas retangulares | 23 | | `/cobertura-isolada` | Cob. isoladas (uma e duas águas) | 24, 25 | | `/barras` | Barras (faces planas/circulares) | 26–28 | | `/pontes` | Pontes (Pse, Cx/Cz, flutter, galope) | 35, 36 + sec. 11 | | `/dinamica` | Dinâmica + vórtices + conforto | 31–34 | | `/settings` | Tema, persistência, estado | — | ## 📐 Fórmula central ``` Vₖ = V₀ · S₁ · S₂ · S₃ q = 0,613 · Vₖ² / 1000 [kN/m²] p = q · (Cpe − Cpi) [kN/m²] ``` ## 🧪 Testes (38/38 ✅) ```bash npm test ``` Cobrem: - **Motor matemático** (classe, S₂, Vₖ, q, S₃) — 14 testes - **Interpolação bilinear e log** — 5 testes - **Cpi simplificado + clamp** — 9 testes - **Vizinhança** — 4 testes - **Reynolds + regime de escoamento** — 6 testes ## 💾 Persistência Projetos salvos em IndexedDB (browser local). Configurações de tema também em `localStorage`. ## 🌗 Temas - Light, Dark, System (segue `prefers-color-scheme`) - Toggle em `/settings` ## 📚 Documentação adicional - [`../PROGRESS.md`](../PROGRESS.md) — Estado atual + roadmap de melhorias futuras - [`../PLAN.md`](../PLAN.md) — Plano histórico dos 8 marcos - [`../AGENTS.md`](../AGENTS.md) — Guia para IAs continuarem o trabalho - [`../NBR-6123-2023.pdf`](../NBR-6123-2023.pdf) — Norma oficial ## 🚧 Próximas melhorias (resumo) | ID | Item | Esforço | Impacto | |----|------|---------|---------| | **M9.1** | Refinar tabelas a partir do PDF real | 3 dias | Alto | | **M9.2** | Cargas lineares (kN/m) por barra | 2 dias | Alto | | **M9.3** | Screenshot 3D no PDF | 1 dia | Médio | | **M9.4** | Export Ftool (.txt) | 2 dias | Médio | | **M9.5** | Refatoração TypeScript (eliminar `void`) | 1 dia | Baixo | | **M9.6** | 3D para muros/torres/pontes/barras | 3 dias | Médio | | **M9.7** | Import JSON de projetos | 1 dia | Médio | | **M9.8** | i18n completo (en-US) | 2 dias | Baixo | | **M9.9** | Validação contra Blessmann | 2 dias | Alto | | **M9.10** | Dark mode em gráficos SVG | 0.5 dia | Baixo | | **M9.11** | Persistência em servidor (especulativo) | — | — | | **M9.12** | Testes E2E com Playwright | 2 dias | Médio | Detalhes e contexto em [`../PROGRESS.md`](../PROGRESS.md). --- **Aviso:** Esta ferramenta é auxiliar. O projetista é responsável pela validação final dos resultados conforme a NBR 6123:2023 e pela emissão de ART.