O co chodzi
Dziś struktura uczelni jest modelowana dwoma osobnymi tabelami —
Wydzial i Jednostka — z płaską relacją wydział → jednostka. To sztywne:
nie obsługuje uczelni bez wydziałów, federacji, ani głębszych hierarchii
(katedra → zakład → pracownia), a „wydział" jest osobnym bytem zamiast
naturalnym poziomem struktury.
Propozycja
Zlikwidować podział i oprzeć wszystko na jednym drzewie (istniejące już
drzewo MPTT Jednostka): na górze uczelnia, poniżej dowolnie zagnieżdżone
jednostki. Wydział staje się jednostką o rodzaju pełniącym rolę wydziału
— rola wydziału to wewnętrzna własność rodzaju, niezależna od poziomu w
drzewie (uczelnia może mieć np. 2 instytuty wprost pod sobą ORAZ wydział
skupiający 5 jednostek, wszystkie na tym samym poziomie).
Kluczowe założenia:
- Konwersja, nie destrukcja — każdy
Wydzial staje się Jednostka;
dane przeżywają w całości (absorpcja-in-place, nazwa modelu Jednostka
zostaje, bez nowej tabeli).
- Nowy słownik
RodzajJednostki (edytowalny per-tenant: Wydział,
Instytut, Klinika, Katedra…) z flagą pelni_role_wydzialu.
- Historia temporalna zachowana —
Jednostka_Wydzial → Jednostka_Rodzic
(od/do), constraint GiST zostaje; trigger bazodanowy zastąpiony logiką w
Pythonie.
- Raport wydziałów = wszystkie węzły rodzaju wydziałowego niezależnie od
pozycji; picker Select2 z podziałem na rodzaj.
Dokumentacja
Pełna analiza wykonalności i zaakceptowany design (na branchu dev):
docs/superpowers/specs/2026-07-02-konsolidacja-wydzial-jednostka-analiza.md
docs/superpowers/specs/2026-07-02-konsolidacja-wydzial-jednostka-design.md
Skala: ŚREDNIA. Największy blok to mechaniczne przepięcie ~4 podsystemów
raportowych; migracja fazowa (strangler), z drop Wydzial na końcu.
O co chodzi
Dziś struktura uczelni jest modelowana dwoma osobnymi tabelami —
WydzialiJednostka— z płaską relacją wydział → jednostka. To sztywne:nie obsługuje uczelni bez wydziałów, federacji, ani głębszych hierarchii
(katedra → zakład → pracownia), a „wydział" jest osobnym bytem zamiast
naturalnym poziomem struktury.
Propozycja
Zlikwidować podział i oprzeć wszystko na jednym drzewie (istniejące już
drzewo MPTT
Jednostka): na górze uczelnia, poniżej dowolnie zagnieżdżonejednostki. Wydział staje się jednostką o rodzaju pełniącym rolę wydziału
— rola wydziału to wewnętrzna własność rodzaju, niezależna od poziomu w
drzewie (uczelnia może mieć np. 2 instytuty wprost pod sobą ORAZ wydział
skupiający 5 jednostek, wszystkie na tym samym poziomie).
Kluczowe założenia:
Wydzialstaje sięJednostka;dane przeżywają w całości (absorpcja-in-place, nazwa modelu
Jednostkazostaje, bez nowej tabeli).
RodzajJednostki(edytowalny per-tenant: Wydział,Instytut, Klinika, Katedra…) z flagą
pelni_role_wydzialu.Jednostka_Wydzial→Jednostka_Rodzic(od/do), constraint GiST zostaje; trigger bazodanowy zastąpiony logiką w
Pythonie.
pozycji; picker Select2 z podziałem na rodzaj.
Dokumentacja
Pełna analiza wykonalności i zaakceptowany design (na branchu
dev):docs/superpowers/specs/2026-07-02-konsolidacja-wydzial-jednostka-analiza.mddocs/superpowers/specs/2026-07-02-konsolidacja-wydzial-jednostka-design.mdSkala: ŚREDNIA. Największy blok to mechaniczne przepięcie ~4 podsystemów
raportowych; migracja fazowa (strangler), z drop
Wydzialna końcu.