Rekenbibliotheek voor warmteverliesberekeningen volgens ISSO 51:2023.
Complete tool voor warmteverliesberekeningen volgens de ISSO 51 norm, bruikbaar als:
- Rust rekenbibliotheek (core engine)
- Python package (via PyO3)
- DLL (C ABI)
- WASM module (web browser)
- Web app (React + TypeScript)
- Desktop app (Tauri + React)
- REST API
- isso51-core (Rust): Alle formules & tabellen, JSON in/uit, puur (geen I/O, geen async, geen unsafe)
- Wrapper crates: isso51-python (PyO3), isso51-wasm (wasm-bindgen), isso51-ffi (cbindgen)
- Frontend: React + TypeScript + Tailwind + Zustand
- Desktop: Tauri v2
| Bestand | Doel |
|---|---|
crates/isso51-core/src/lib.rs |
Public API: calculate_from_json() |
crates/isso51-core/src/model/ |
Domeinmodel (structs/enums) |
crates/isso51-core/src/formulas.rs |
Formule-identifiers (29 constanten) |
crates/isso51-core/src/calc/ |
Berekeningen per onderdeel |
crates/isso51-core/src/tables/ |
ISSO 51 opzoektabellen |
schemas/v1/ |
JSON schemas (gegenereerd uit Rust types) |
tests/fixtures/ |
Test JSON bestanden |
- Rust:
cargo testmoet altijd slagen - Eenheden: mm voor afmetingen, dm3/s voor luchtvolumestroom, W voor vermogen, W/K voor H-waarden
- Temperaturen in graden Celsius
- JSON schema first: types in Rust, schemas gegenereerd via schemars
- Doc comments verwijzen naar ISSO 51 formulenummers
- ISSO 51 voorbeeld portiekwoning: gebruikt theta_b = 15 graden C (oud), erratum 2023 zegt 17 graden C
- Erratum 2023: kwadratische sommatie voor niet-gelijktijdige verliezen
- Factor 1.2 kJ/(m3*K) = rho * c_p lucht
- qi_spec in dm3/s per m2 (niet m3/s)
Status: OPEN — nog niet gestart
Template bron: X:\10_3BM_bouwkunde\50_Claude-Code-Projects\open_AEC\project-templates\Tauri+React\
De huidige Topbar+Sidebar layout wordt vervangen door de OpenAEC Tauri+React template layout:
| Huidig | Nieuw (template) | Actie |
|---|---|---|
layout/Topbar.tsx (56px header) |
TitleBar.tsx (custom window chrome) |
Vervangen |
layout/Sidebar.tsx (260px nav) |
ribbon/Ribbon.tsx (tab-based toolbar) |
Vervangen |
layout/AppShell.tsx |
App.tsx met resizable panels |
Vervangen |
layout/PageHeader.tsx |
Ribbon tab context | Verwijderen |
| OS window decorations | decorations: false + custom TitleBar |
tauri.conf.json aanpassen |
| Geen i18n | i18n/ (NL + EN, 5 namespaces) |
Toevoegen |
| Geen settings dialog | SettingsDialog.tsx (7 tabs) |
Toevoegen |
| Geen backstage | Backstage.tsx (File menu) |
Toevoegen |
| Tailwind tokens inline | themes.css (CSS custom properties) |
Migreren |
modeller/Ribbon.tsx (eigen) |
Integreren in hoofd-Ribbon | Refactoren |
| react-router pagina's | Ribbon tabs + panel switching | Refactoren |
De 8 huidige pagina's mappen als volgt naar het Ribbon-model:
| Ribbon Tab | Inhoud (huidige pagina's) | Groepen |
|---|---|---|
| Bestand (special) | Backstage: Nieuw, Openen, Opslaan, Import IFC, Export JSON, Rapport printen | — |
| Project (home) | ProjectSetup.tsx + RoomEditor.tsx |
Projectgegevens, Ruimten, Berekenen |
| Constructies | ProjectConstructions.tsx + RcCalculator.tsx |
Catalogus, Rc-berekening, Materialen |
| Modeller | Modeller.tsx (bestaande ribbon content) |
Model, Annotatie, Beeld, Invoegen |
| Resultaten | Results.tsx + charts |
Overzicht, Grafieken, Rapport |
| Bibliotheek | Library.tsx |
Constructies, Materialen, Projecten |
| Beeld | View options, zoom, panel toggles | Zoom, Panelen, Thema |
crates/— Rust core engine blijft ongewijzigdsrc-tauri/— Rust Tauri backend (alleentauri.conf.jsonaanpassen)store/— Zustand stores blijven, worden aangesloten op nieuwe layouttypes/— TypeScript types ongewijzigdlib/— Business logic, API clients, berekeningen ongewijzigdhooks/— Custom hooks ongewijzigd (useTheme migreren naar template theming)components/rooms/— Domain components ongewijzigdcomponents/construction/— Domain components ongewijzigdcomponents/charts/— Domain components ongewijzigdcomponents/modeller/— Canvas + logic ongewijzigd, alleen Ribbon integratiecomponents/ui/— Base components behouden naast template components
Fase 1: Shell vervangen (breaking)
- Kopieer uit template naar
frontend/src/:themes.css— aanpassen met bestaande warmteverlies tokens uittailwind.config.tsi18n/map compleet (config + locale bestanden)store.ts(Tauri preferences store) — NIET verwarren met bestaandestore/mapcomponents/TitleBar.tsx+.csscomponents/StatusBar.tsx+.csscomponents/Modal.tsx+.csscomponents/ThemedSelect.tsx+.csscomponents/backstage/map compleetcomponents/settings/map compleetcomponents/feedback/map compleetcomponents/ribbon/map (RibbonButton, RibbonGroup, RibbonTab, RibbonButtonStack, icons)
- Pas
src-tauri/tauri.conf.jsonaan:"decorations": false,"visible": false - Voeg dependencies toe aan
frontend/package.json:i18next ^25.8.14 i18next-browser-languagedetector ^8.2.1 react-i18next ^16.5.4 @tauri-apps/plugin-store ^2.4.2
Fase 2: Ribbon tabs bouwen
- Maak domein-specifieke tabs in
components/ribbon/:ProjectTab.tsx— Projectgegevens, Ruimten, Berekenen knoppenConstructionsTab.tsx— Catalogus, Rc-berekening, MaterialenModellerTab.tsx— Integreer content uit bestaandemodeller/Ribbon.tsxResultsTab.tsx— Overzicht, Grafieken, Rapport genererenLibraryTab.tsx— Constructies, Materialen browsenViewTab.tsx— Zoom, panelen, thema-opties
- Verplaats relevante acties uit huidige PageHeader's naar RibbonButton's per tab
Fase 3: Layout herschrijven
- Vervang
AppShell.tsxdoor nieuweApp.tsxmet resizable left/right panels - Maak panel-switching logica: actieve Ribbon tab bepaalt main content area
- Left panel: navigator/explorer (ruimtelijst, constructielijst — contextafhankelijk per tab)
- Right panel: properties (contextafhankelijk)
- Verwijder react-router pagina-navigatie, vervang door state-based switching
- Behoud react-router alleen voor web-only route
/projects
Fase 4: Theming migreren
- Vertaal Tailwind tokens uit
tailwind.config.tsnaar CSS custom properties inthemes.css - Behoud boundary-kleuren (exterior, unheated, ground, etc.) als extra tokens
- Test light + openaec thema's
- Migreer
useThemehook naar templategetSetting/setSettingpatroon
Fase 5: i18n
- Extract alle hardcoded NL strings naar locale JSON bestanden
- Maak extra namespace
isso51.jsonvoor domein-specifieke termen - Voeg EN vertalingen toe
- Test taalwisseling via SettingsDialog
Fase 6: Backstage vullen
- "Nieuw" — projectStore.reset()
- "Openen" — JSON import (bestaande
importExport.ts) - "Opslaan" — JSON export / server save (bestaande
useAutoSave) - "Import" — IFC import flow (bestaande
ifc-import.ts) - "Export" — JSON/IFCX export (bestaande
importExport.ts+ifcx-builder.ts) - "Rapport" — PDF generatie (bestaande
reportBuilder.ts+reportClient.ts)
- DocumentBar: Warmteverliesberekening is primair single-document. DocumentBar weglaten of vereenvoudigen tot projectnaam-indicator in TitleBar
- Modeller Ribbon: De bestaande
modeller/Ribbon.tsxheeft eigen subtabs (Model, Annotatie, Beeld, Invoegen). Bij activatie van hoofd-Ribbon tab "Modeller" switcht de ribbon naar deze subtabs - OIDC: Bestaande auth (
oidc-spa) behouden voor web mode — niet in template aanwezig, apart afhandelen - Proxy config:
vite.config.tsproxy's voor API en reports behouden - Tailwind: Behouden naast CSS custom properties — Tailwind classes blijven werken in domain components
- project_id:
warmteverlies - display_name:
Warmteverlies Calculator - capabilities:
["nen-12831", "isso-51", "rust", "tauri"] - subscriptions:
["bim/*", "shared/*"]
ALTIJD uitvoeren aan het einde van elke sessie (of na een significante mijlpaal):
Schrijf een update naar:
C:\Users\JochemK\.claude\orchestrator\sessions\warmteverlies_latest.md
Gebruik dit formaat:
# Warmteverlies — Sessie update
**Datum:** YYYY-MM-DD HH:MM
**Branch:** (git branch naam)
## Wat is gedaan
- (bullet per afgeronde taak)
## Huidige staat
(1-3 zinnen over de staat van het project)
## Gewijzigde bestanden
- (relevante paden)
## Openstaande issues / next steps
- (wat nog moet gebeuren)
## Cross-project notities
(iets wat relevant is voor pyrevit of report integratie)Orchestrator context: C:\Users\JochemK\.claude\orchestrator\context\warmteverlies.md
Project registry: C:\Users\JochemK\.claude\orchestrator\project-registry.json