Doménový model
Tento dokument popisuje konceptuální doménový model. Záměrně je nezávislý na databázovém schématu a UI implementaci.
Klíčové koncepty
Organizace (tenant)
Reprezentuje zákaznický účet a primární hranici vlastnictví dat.
Klíčové invarianty
- Vlastní Projekty, Assets, Blueprints a související záznamy.
- Membership určuje, kteří Uživatelé mohou v rámci tenanta jednat.
Uživatel
Reprezentuje autentizovanou identitu (spravovanou Supabase Auth), která může patřit do jedné nebo více Organizací.
Klíčové invarianty
- Identita je globální, oprávnění jsou tenant-scoped.
- Uživatel jedná v kontextu aktivní Organizace.
Projekt (kanonická entita)
Reprezentuje jeden výpočetní “případ” s perzistovanými vstupy, výsledky a auditní stopou.
Klíčové invarianty
- Vlastněn přesně jednou Organizací.
- Má neměnnou identitu a v čase měnitelné verze (nebo historii verzí).
- Výsledky výpočtu jsou svázané s verzí enginu, která je vytvořila.
ScaffoldSystem
Definuje typ/konfiguraci lešenářského systému (např. rámové, modulové, trubkové) a sadu komponent a omezení dostupných pro modelování.
Klíčové invarianty
- Určuje dostupné vstupy a validační pravidla.
- Musí být explicitně uveden ve vstupu Projektu, aby se předešlo nejednoznačným výsledkům.
BuildingModel
Reprezentuje geometrii/prostředí, které ovlivňuje konfiguraci lešení a jeho omezení.
Klíčové invarianty
- Má normalizovanou reprezentaci vhodnou pro deterministický výpočet.
- Jakékoli odvozené veličiny musí být reprodukovatelné ze vstupu.
CalculationResult
Deterministický výstup vytvořený výpočetním enginem z normalizovaného vstupu Projektu.
Klíčové invarianty
- Vypočten z explicitního vstupu + verze enginu.
- Obsahuje metriky, varování, BOM/spotřebu materiálu a případné compliance-relevantní signály.
Vztahy (konceptuálně)
- Organizace 1—N Projekt
- Organizace 1—N Asset
- Organizace 1—N Blueprint
- Uživatel N—N Organizace (membership)
- Projekt 1—1 ScaffoldSystem (explicitně)
- Projekt 1—1 BuildingModel (explicitně)
- Projekt 1—N CalculationResult (pokud verzujeme), jinak 1—1 “aktuální výsledek”
Hranice domény
- Doména neví o Supabase, Prisma, Next.js ani o síťových voláních.
- Doména exportuje:
- validované typy vstupů
- čisté výpočetní funkce
- doménové error typy (validace/porušení omezení)