Dokumentace k rozvržení podkladů a vrstvám číselníků

ROZPISKY.md §2 a §8, ROZHRANI.md §3.4 (a odškrtnutá otevřená otázka v §9),
CLAUDE.md. Baseline testů v promptech subagentů 36 -> 50.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 10:50:23 +02:00
co-authored by Claude Opus 5
parent 6cd41ee5a3
commit ba52486f53
6 changed files with 49 additions and 18 deletions
+1 -1
View File
@@ -50,6 +50,6 @@ Needituj produkční data: `Rozpisky/Podklady/Rozpiska.dxf`, `vzorky/schema.dxf`
3. Ověř:
`dotnet build "Rozpisky.sln" -nologo -v q -clp:ErrorsOnly` a
`dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q`
(baseline je 36 zelených testů — nesmí ubýt).
(baseline je 50 zelených testů — nesmí ubýt).
4. V odpovědi vrať: co jsi změnil (soubor:řádek), proč, a výsledek buildu a testů. Když něco
neprošlo, řekni to rovnou i s chybovou hláškou — nezakrývej to.
+2 -2
View File
@@ -1,4 +1,4 @@
---
---
name: verifikator
description: Read-only ověřovatel — spustí build a testy Rozpisek a vrátí strukturovaný verdikt. Použij po každé nezanedbatelné změně kódu, nebo když je potřeba nezávisle potvrdit, že projekt je v pořádku. Nic needituje.
tools: Read, Grep, Glob, Bash, PowerShell
@@ -17,7 +17,7 @@ dotnet test "C:\Users\marek\_Osobní\C sharp\EXE\Rozpisky\Rozpisky.Tests\Rozpis
Testy spusť i tehdy, když build projde s varováními. Když build spadne, testy nespouštěj
a rovnou hlas chyby buildu.
Baseline, se kterou porovnáváš: **build bez chyb a bez varování, 36 testů zelených, 0 přeskočených.**
Baseline, se kterou porovnáváš: **build bez chyb a bez varování, 50 testů zelených, 0 přeskočených.**
Volitelně (jen když o to volající požádá) ověř, že aplikace naběhne:
spusť `Rozpisky\bin\Debug\net10.0-windows\Rozpisky.exe`, počkej ~8 s, zkontroluj, že proces
+1 -1
View File
@@ -35,7 +35,7 @@ nebo `Rozpisky/Xlsx/` jen popiš v odpovědi a nech je na volajícím.
začneš měnit UI.
2. `MainViewModel.cs` je velký; hledej v něm grepem, nečti ho celý zbytečně.
3. Ověř: `dotnet build "Rozpisky.sln" -nologo -v q -clp:ErrorsOnly` a
`dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q` (baseline 36 zelených).
`dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q` (baseline 50 zelených).
Build musí být **bez varování** — chyby v XAML se často projeví jen jako varování.
4. WPF chyby v bindingu build nezachytí. Pokud změna může binding rozbít, řekni to explicitně
a doporuč ruční spuštění aplikace.
+6 -1
View File
@@ -11,7 +11,7 @@ dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q
dotnet run --project "Rozpisky\Rozpisky.csproj"
```
Baseline: build bez chyb a varování, **36 testů zelených**. Před hlášením hotovo obojí spustit
Baseline: build bez chyb a varování, **50 testů zelených**. Před hlášením hotovo obojí spustit
(nebo použít `/overit`).
## Architektura — jediné pravidlo, které se nesmí porušit
@@ -35,6 +35,11 @@ jen relevantní kapitolu.
(WPF-DarkTheme-Kit). Žádné hardcoded `#RRGGBB` ani natvrdo zadané odsazení.
- `Nullable` a `ImplicitUsings` jsou zapnuté v obou projektech.
- COM (CAD, MS Excel) jde přes pozdní vazbu (`dynamic`) — nepřidávat interop assembly.
- Uživatelská data (číselníky, výběr CADu, logy) jdou přes
[`UzivatelskaData`](Rozpisky/Data/UzivatelskaData.cs) do `%APPDATA%\Rozpisky`. Do složky u `.exe`
se **nezapisuje** — může být jen pro čtení a přeinstalace ji přepíše. Číselníky navíc žijí ve dvou
vrstvách ([`CiselnikyStore`](Rozpisky/Data/CiselnikyStore.cs)): dodávaná + uložený rozdíl
uživatele. Změnu slučování vždy pokrýt testem — chyba tam se projeví tichou ztrátou dat.
## Rozvržení složky — tři druhy podkladů
+18 -8
View File
@@ -131,12 +131,22 @@ Na revize se odkazují řádkové revizní sloupce přílohy (R1R4) a revizn
| **Verze dokumentace** | verze | stupeň dokumentace |
| **Části** | označení, název části | části/objekty v seznamu |
> **Číselníky jsou sdílená data napříč projekty a žijí v samostatné databázi vedle `.exe`.**
> V původním Excelu šlo o samostatné listy s daty (označení dokumentace, data firem apod.).
> Ve standalone aplikaci se z nich stane **externí databázový soubor uložený vedle spustitelného
> souboru** (např. `cisleniky.db` / `.json` ve složce aplikace), aby ho šlo **průběžně doplňovat
> a sdílet** mezi projekty bez zásahu do aplikace. (Na rozdíl od revizí, které jsou interní
> k zakázce viz [3.3](#33-revize-původní-list-revize).)
> **Číselníky jsou sdílená data napříč projekty a žijí mimo projekt.** V původním Excelu šlo
> o samostatné listy s daty (označení dokumentace, data firem apod.). Ve standalone aplikaci jsou
> uložené ve **dvou vrstvách JSON** (na rozdíl od revizí, které jsou interní k zakázce
> viz [3.3](#33-revize-původní-list-revize)):
>
> | Vrstva | Soubor | Role |
> |---|---|---|
> | dodávaná | `ciselniky.vychozi.json` vedle `.exe` | výchozí obsah dodaný s programem, jen ke čtení; každá instalace ho obnoví |
> | uživatelská | `ciselniky.user.json` v `%APPDATA%\Rozpisky` | jen **rozdíl** proti dodávané: `Vlastni` (přidané a upravené položky) + `Skryte` (klíče odklizených dodávaných položek) |
>
> Při načtení se vrstvy slučují: dodávané pořadí zůstává, upravená položka se přepíše na svém
> místě, vlastní se řadí za ně. Při uložení se rozdíl dopočítá znovu. Smysl rozdělení: uživatel
> číselníky průběžně doplňuje (ručně i samoučením jmen z projektů) a **přeinstalace novou verzí
> mu je nesmí přepsat** zároveň smí nová verze dodávaný číselník libovolně měnit.
> Klíč položky: `Nazev` (organizace, firmy, kraje), `Hodnota` (jména, verze), `Oznaceni` (části);
> porovnává se bez ohledu na velikost písmen.
### 3.5 Konfigurace
@@ -396,8 +406,8 @@ Orientační fázování (priorita shora dolů):
- **Formát uložení** rozdělené úložiště:
- **Projekt** (údaje + seznam příloh + **revize**) = interní data jedné zakázky → formát k rozhodnutí
(JSON / SQLite / vlastní).
- **Číselníky** (organizace, firmy, jména, profese, verze, části) = **externí databáze vedle `.exe`**,
sdílená a doplňovatelná napříč projekty ([3.4](#34-číselníky)) → formát k rozhodnutí.
- ~~**Číselníky** formát a umístění.~~ **Vyřešeno:** dvě vrstvy JSON dodávaná vedle `.exe`,
uživatelská (rozdíl) v `%APPDATA%\Rozpisky` ([3.4](#34-číselníky)).
- **Generátor 47-pozičního kódu** doimplementovat dle manuálu kap. 3.2.13.2.8 vč. okrajových případů
(sdružené objekty `SK`/`PK`, kap. 3.3; pracovní vs. definitivní verze).
- **Orientační schéma** jak se obrázek schématu získá/přiřadí k příloze (vstup uživatele vs. generování).
+21 -5
View File
@@ -73,8 +73,17 @@ Rozpisky/
└─ MainWindow.xaml(.cs) ← hlavní okno
```
Vedle .exe se dodávají editovatelné soubory: `Rozpiska.dxf` (šablona), `SEZNAM.xlsx` (mustr seznamu),
`ciselniky.json`, `mapovani.json`, `cad.json`, `layout.json`, `loga/` a manuál SŽ (PDF).
Datové soubory jsou rozdělené podle toho, kdo je vlastní:
| Kde | Co | Kdo zapisuje |
|---|---|---|
| vedle `.exe` (zdroj `Rozpisky/Podklady/`) | `Rozpiska.dxf`, `SEZNAM.xlsx`, `ciselniky.vychozi.json`, `mapovani.json`, `loga/`, manuál SŽ (PDF) | nikdo dodává se s programem, každá instalace přepíše |
| `%APPDATA%\Rozpisky` ([`UzivatelskaData`](../Rozpisky/Data/UzivatelskaData.cs)) | `ciselniky.user.json`, `cad.json`, `layout.json`, `error.log`, `tisk_diag.log` | aplikace za běhu |
| kdekoli u uživatele | projekty `.rzp` | aplikace na vyžádání |
Rozdělení existuje proto, aby přeinstalace novou verzí (nebo `.exe` v `Program Files`, kam se nesmí
psát) nesmazala nic, co si uživatel nastřádal. Portable režim se zapíná souborem `portable.txt`
vedle `.exe` pak se všechno vrátí do složky aplikace.
---
@@ -199,9 +208,16 @@ Aplikace **nemá CLI režim** vše jede z GUI. Neočekávané výjimky zachy
- **Projekt `.rzp`** ([`ProjektStore`](../Rozpisky/Data/ProjektStore.cs)) JSON s exkluzivním zámkem
drženým po dobu otevření (ostatní procesy smí jen číst). Zápis serializuje **před** useknutím
souboru, aby pád nezanechal prázdný soubor.
- **Configy vedle .exe** (`ciselniky.json`, `cad.json`, `layout.json`, `mapovani.json`) jdou přes
[`JsonConfigFile`](../Rozpisky/Data/JsonConfigFile.cs): **atomický zápis** (přes `.tmp`) a při
poškozeném souboru **záloha do `.bak` + upozornění** (místo tichého přepsání výchozími daty).
- **JSON configy** (`ciselniky.user.json`, `cad.json`, `layout.json` v uživatelské složce,
`mapovani.json` vedle .exe) jdou přes [`JsonConfigFile`](../Rozpisky/Data/JsonConfigFile.cs):
**atomický zápis** (přes `.tmp`) a při poškozeném souboru **záloha do `.bak` + upozornění**
(místo tichého přepsání výchozími daty).
- **Číselníky ve dvou vrstvách** ([`CiselnikyStore`](../Rozpisky/Data/CiselnikyStore.cs)) dodávaná
`ciselniky.vychozi.json` (jen ke čtení) a uživatelská `ciselniky.user.json`, kde je uložený jen
**rozdíl** proti ní (přidané/upravené položky + klíče skrytých). Nová verze programu tak smí
dodávaný číselník měnit, aniž by uživatel přišel o svoje záznamy.
- **Migrace starých poloh** ([`Migrace`](../Rozpisky/Data/Migrace.cs)) data zapisovaná dřív vedle
.exe se při startu přenesou do uživatelské složky; originál se jen přejmenuje na `.migrovano`.
- **Zamčený cíl exportu** před zápisem PDF/XLSX/DXF se ověří, zda soubor nedrží jiný program
(Excel, prohlížeč PDF), a nabídne Pokračovat/Přerušit.