feat: unified 0 and 90 degree PDF envelope and category descriptors

This commit is contained in:
2026-07-08 19:52:34 +00:00
commit 9fece3f174
170 changed files with 27177 additions and 0 deletions
+158
View File
@@ -0,0 +1,158 @@
# 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 612, excentricidade, atrito, alta turbulência)
- **Sec. 6.2** — Superfícies curvas: cilindros, abóbadas, cúpulas (Tabelas 1322)
- **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 2325)
- **Sec. 8** — Barras prismáticas, reticulados, torres (Tabelas 2630 + Figs 1218)
- **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/<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 AJ | 6, 7 |
| `/cilindro` | Silos, chaminés, reservatórios | 13 + Reynolds |
| `/abobada` | Abóbadas cilíndricas | 1520 |
| `/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) | 2628 |
| `/pontes` | Pontes (Pse, Cx/Cz, flutter, galope) | 35, 36 + sec. 11 |
| `/dinamica` | Dinâmica + vórtices + conforto | 3134 |
| `/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.