-
Notifications
You must be signed in to change notification settings - Fork 10
Plik z wymaganiami studiów wymagania.json
UWAGA: ten dokument jest nieaktualny – dotyczy starej, wycofanej implementacji aplikacji efektów.
Wymagania potrzebne do ukończenia studiów są trzymane w pliku wymagania.json
w folderze /zapisy
. Można ten plik edytować, bez potrzeby ponownego uruchamiania całej aplikacji. Znaczy to, że jeśli chcemy coś poprawić lub dodać nowe wymagania to wystarczy edytować ten plik. Gdy student wchodzi w zakładkę Moje studia to ładowany jest plik z wymaganiami i na jego podstawie wyświetla się strona z wymaganiami oraz jest liczony progres studenta w drodze do ukończenia studiów. Wyświetlenie informacji związanych z progresem studenta wymaga jednak uzupełnienia w SZ danych związanych z ukończonymi przedmiotami.
W głównym obiekcie kluczami są id programów studiów, a wartościami obiekty, gdzie kluczem jest rok, od którego dane zasady ukończenia studiów obowiązują, a wartością obiekt z wymaganiami dla danego programu studiów oraz roku. Id programów studiów są brane z bazy danych Systemu Zapisów.
{
"id_programu": {
"rok1": {
wymagania dla danego id i roku
},
"rok2": {
wymagania dla danego id i roku
}
},
"id_innego_programu": {
"rok1": {
wymagania dla danego id i roku
},
"rok2": {
wymagania dla danego id i roku
}
}
...
}
Klucze w obiekcie z wymaganiami mają raczej charakter opisowy i nie mają znaczenia podczas interpretacji dokumentu (wyjątkiem jest klucz ects). Pod tymi kluczami znajdują się obiekty, które opisują konkretne wymaganie do zaliczenia (np. zaliczenie min. 54 ects'ów z przedmiotów informatycznych lub zaliczenie AiSDu).
W takim obiekcie wymagany jest klucz description, dla którego wartością będzie napis z opisem wymagania (np. "Przedmioty informatyczne" lub "Algorytmy i Struktury Danych"). Ten opis będzie się wyświetlał w liście wymagań na podstronie Moje studia w SZ. Description jednak może zawierać pusty string, jeśli opis nie jest potrzebny do zrozumienia danego wymagania (Jeśli wymaganie jest związane z efektami i tagami, to one wyświetlają się tak jak w innych miejscach w SZ).
Innym wymaganym kluczem jest filter. Wartością dla niego będzie obiekt, w którym możliwymi kluczami są type, tag, effect oraz subject. Oznaczają one odpowiednio, typ przedmiotu, tag, efekt oraz przedmiot i odpowiadają one w aplikacji odpowiednio modelom Effects, Tag, Type oraz Proposal. Wartościami będą tutaj listy z id typu string. Te id można znaleźć w tabelach w bazie danych. Są to courses_type, courses_tag oraz courses_effects. Wartości tutaj oznaczają, że przedmioty które spełniają te kryteria (czyli np. są danego typu lub zaliczają dany efekt) będą brane pod uwagę przy liczeniu progresu w zaliczeniu danego wymagania.
Id konkretnych przedmiotów można pozyskać poniższym zapytaniem.
SELECT courses_courseinformation.id, courses_courseinformation.name FROM courses_courseinformation JOIN proposal_proposal ON courses_courseinformation.id = proposal_proposal.courseinformation_ptr_id ORDER BY name;
sum to klucz, który nie jest wymagany. Jego obecność oznacza, że dane wymaganie dotyczy zdobycia konkretnej liczby punktów ects. Jego brak natomiast oznacza, że dane wymaganie dotyczy zaliczenia jakiegoś efektu/przedmiotu/czegoś jeszcze innego. Wartością jest liczba oznaczająca liczbę ects.
Poniższy przykład oznacza, że należy zdobyć przynajmniej 15 ects za przedmioty z grup I2 oraz S oznaczone tym samym znacznikiem specjalistycznym.
"specialization": {
"description": "Tagi dziedzinowe",
"filter": {
"type": ["6", "14"],
"tag": ["4", "6", "7", "1", "5"]
},
"groupBy": "tag",
"aggregate": "sum",
"sum": 15
},
Jest to wyjątkowe wymaganie, które jest interpretowane w Systemie Zapisów w inny sposób. Klucze description oraz sum są tutaj obowiązkowe. Nie występuje tutaj klucz filter, jednakże może wystąpić klucz filterNot. Zapisujemy dla filterNot informacje tak samo jak dla klucza filter jednakże, oznacza on że danego typu przedmiotów nie bierzemy pod uwagę. Np. dla studiów II stopnia nie liczymy ectsów dla przedmiotów typu Informatyczny I.
Innym kluczem wyjątkowym jest limit, który oznacza ograniczenia punktów ects. Np. dla studiów I stopnia możemy dostać co najwyżej 6 ectsów za przedmioty humanistyczno-społeczne. Dla tego klucza dajemy obiekt, w którym kluczem jest type, a dla niego obiekt, dla którego kluczami są id typów przedmiotów, a wartościami liczba punktów ects. Nie bierzemy pod uwagę limitów ze względu na tagi, efekty czy pojedyncze przedmioty.
{
"ects": {
"description": "Wymagane punkty ECTS",
"filterNot": {
"type": ["36", "5", "17"]
},
"limit": {
"type": {
"42": 6
}
},
"sum": 100
},
}
W powyższym przykładzie, przy liczeniu wszystkich punktów ects, nie bierzemy pod uwagę przedmiotów o typie Informatyczny 1, K1 - kurs podstawowy oraz lektoratów.
Dodatkowo ustalamy maksymalną liczbę punktów ects do zdobycia za przedmioty humanistyczno-społeczne na 6.
- Pojedyncze przedmioty i efekty do zaliczenia raczej staramy się zapisywać w osobnych obiektach (obiektach z description, filter itd.). Taka konwencja ułatwia pisanie logiki i wyświetlanie wymagań w SZ.
- Warto pamiętać, że nawet w przypadku pojedynczych przedmiotów możemy potrzebować kilku obiektów z bazy danych do wzięcia pod uwagę. Np. Logikę dla informatyków możemy zaliczyć zwykłą logiką lub zaawansowaną, a wiele obowiązków na I stopniu dzieli się na przedmioty (L) i (M).
- Wiele typów przedmiotów w bazie danych jest przestarzałych, więc trzeba zwracać uwagę czy nie używamy nieużywanego obiektu. Np. typ Informatyczny 2 raczej został zastąpiony typami I2.T oraz I2.Z.
- Jeśli wymaganiem jest zaliczenie jakiegoś efektu lub tagu, to możemy zostawić description jako pusty napis, ponieważ efekty i tagi wyświetlają się w tabeli z wymaganiami. Jeśli są one zaliczone to mają swój domyślny kolor, a jak nie to wyświetlają się na czerwono.
Jeśli chcemy dodać nowe zasady zaliczenia studiów dla jakiegoś programu to jest bardzo prawdopodobne, że będą one dosyć podobne do poprzednich, więc w takim wypadku wystarczy skopiować, lekko zmodyfikować i wkleić w odpowiednim miejscu już istniejące wymagania w pliku. W przypadku nowych skomplikowanych wymagań, dla których powyżej opisana składnia nie wystarczy, trzeba będzie zmodyfikować kod by dodać nowe klucze lub zmienić logikę interpretacji tego pliku.