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
+159
View File
@@ -0,0 +1,159 @@
# AGENTS.md — Guia para IAs no projeto VentoApp
> **Estado atual (jul/2026):** 8/8 marcos concluídos, 100% da NBR 6123:2023 coberta.
> Para histórico e roadmap detalhado, consulte [`PROGRESS.md`](./PROGRESS.md).
## ⚠️ Leia ANTES de começar
**Sempre leia `PROGRESS.md` primeiro** — ele contém:
- Estado exato do projeto
- Lista de tudo que foi entregue
- Roadmap priorizado de melhorias (M9.1, M9.2, ...)
- Convenções estabelecidas
- Onde encontrar cada coisa
## Comandos essenciais
```bash
cd /root/Apps/windapp/app
npm run dev # vite dev com HMR (porta 5173)
npm run build # tsc -b && vite build (produção)
npm run lint # oxlint (sem correções automáticas)
npm test # vitest run (38 testes, modo único)
npm run test:watch # vitest watch (modo interativo)
```
> **Atenção:** neste ambiente os binários em `node_modules/.bin/` perdem o bit de execução. Se um comando reclamar `Permission denied`, rode `chmod +x node_modules/.bin/<bin>` antes.
## Validação rápida (rode sempre após mudanças)
```bash
./node_modules/.bin/tsc -b # 0 erros esperados
./node_modules/.bin/vitest run # 38/38 esperados
./node_modules/.bin/oxlint # 0 erros esperados
./node_modules/.bin/vite build # ~2s, sem erros
```
## Arquitetura
- **Cálculo puro**: `src/lib/` — funções determinísticas sem dependência de React. Tipos readonly quando possível.
- **Tabelas da norma**: `src/lib/nbr-tables/` — todas as 36 tabelas + 3 anexos da NBR 6123:2023.
- **Modules (Strategy)**: `src/lib/modules/` — padrões de cálculo por tipo de estrutura (cylinder, vault, dome, truss, tower, bridge, dynamics).
- **Estado global**: `src/store/` — Zustand. Stores separadas por domínio (vento global, galpão).
- **UI**: `src/pages/` + `src/components/` — sem lógica de cálculo pesada.
## Estrutura de pastas (atual)
```
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 (~30 arquivos)
│ ├── hooks/useProjects.ts Hook React
│ └── __tests__/ Vitest (5 suites, 38 testes)
├── components/
│ ├── ui/ shadcn/ui
│ ├── three/ Cylinder3D, Vault3D, Dome3D
│ ├── Warehouse3D.tsx Galpão com zonas A-J
│ └── ExportMenu.tsx
├── pages/ 10 páginas (rotas)
├── store/ Zustand
└── App.tsx Rotas + ThemeProvider + Layout
```
## Páginas (rotas atuais)
| Rota | Módulo | Tabelas |
|------|--------|---------|
| `/` | HomeMock | — |
| `/galpao` | Galpão retangular | 6, 7 |
| `/cilindro` | Silos, chaminés | 13 |
| `/abobada` | Abóbadas | 15-20 |
| `/cupula` | Cúpulas | 21, 22 |
| `/muros` | Muros/placas | 23 |
| `/cobertura-isolada` | Cob. isoladas | 24, 25 |
| `/barras` | Barras | 26-28 |
| `/pontes` | Pontes | 35, 36 |
| `/dinamica` | Dinâmica + vórtices | 31-34 |
| `/settings` | Tema + persistência | — |
## Convenções (manter!)
1. **TypeScript estrito**: zero `as any`, zero `// @ts-ignore`. Tipos `readonly` para tabelas.
2. **Sem comentários** exceto quando a matemática exige explicação.
3. **Imports absolutos**: `@/lib/...`, `@/components/...`, `@/store/...`.
4. **Componentes**: PascalCase em `.tsx`, kebab-case em arquivos utilitários `.ts`.
5. **Tailwind v4 + shadcn/ui**: usar `cn()` para merges, variantes do shadcn quando disponíveis.
## Princípios de cálculo (NÃO QUEBRAR)
1. **Não inventar constantes.** Toda fórmula deve vir da NBR 6123:2023.
2. **Tabela antes de fórmula.** Para S₂, usar a Tabela 3 (interpolação) por fidelidade à norma.
3. **Limites normativos.** Cpi em [-0,9 ; +0,9]. S₂ mínimo em z=5m. z_g como saturação.
4. **Cpi explícito.** Toda pressão é `p = q · (Cpe Cpi)`. Nunca omitir Cpi.
5. **Tabela é readonly.** `Readonly<Record<...>>` previne mutação acidental.
## Workflow típico para adicionar funcionalidade
1. Identificar a seção/tabela da norma (ver `PROGRESS.md` roadmap).
2. Criar arquivo em `src/lib/nbr-tables/` com dados readonly (se aplicável).
3. Criar função de lookup (geralmente via `bilinearInterp` ou `linearInterp1D`).
4. Se aplicável, criar Strategy em `src/lib/modules/`.
5. Criar página em `src/pages/` consumindo o módulo.
6. Atualizar `App.tsx` com a rota.
7. Adicionar teste em `src/lib/__tests__/`.
8. Validar `npm run build` e `npm test`.
## Como retomar o trabalho
1. **Ler** `PROGRESS.md` → seção "Roadmap priorizado de melhorias"
2. **Escolher** um item (ex.: M9.1 — refinar tabelas)
3. **Implementar** seguindo o workflow acima
4. **Validar** com os 4 comandos da seção "Validação rápida"
5. **Atualizar** `PROGRESS.md` marcando o item como concluído
## Roadmap resumido (próximas iterações)
| 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 completos em `PROGRESS.md`.
## Erros comuns
- `cannot find module '../bilinear-interp'` → caminho errado; arquivos em `src/lib/nbr-tables/` importam de `../bilinear-interp`, não `./`.
- Build rolldown falha → `npm install @rolldown/binding-linux-x64-gnu`.
- `oxlint permission denied``chmod +x node_modules/.bin/oxlint`.
- CSS variables sumindo → garantir `<ThemeProvider>` envolvendo a árvore em `App.tsx`.
- `vitest` não roda sem `vitest.config.ts` (já criado).
- Binários em `node_modules/.bin/` sem permissão → `chmod +x node_modules/.bin/<bin>`.