2025-09-05 00:29:59 +02:00
|
|
|
// SPDX-FileCopyrightText: 2025 Gero Beckmann <orangerot@orangerot.dev>
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
2025-09-08 14:13:40 +02:00
|
|
|
#let KIND = (:
|
|
|
|
"WAHLPFLICHT": "Wahlpflicht",
|
|
|
|
"VERTIEFUNGSFACH": "Vertiefungsfach",
|
|
|
|
"ERGAENZUNGSFACH": "Ergänzungsfach",
|
|
|
|
"NONE": ""
|
2025-08-31 00:06:04 +02:00
|
|
|
)
|
|
|
|
|
2025-09-10 14:36:12 +02:00
|
|
|
#let event(name: "", lecturer: "", semester: "", did_attend: "") = (
|
|
|
|
name, lecturer, semester, did_attend
|
2025-09-09 13:18:10 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
#let exam-report(
|
2025-08-31 00:06:04 +02:00
|
|
|
study: "", // Studiengang
|
|
|
|
lecture: "", // Fach
|
2025-09-10 15:25:19 +02:00
|
|
|
kind: KIND.NONE, // Prüfungsart KIND.{WAHLPFLICHT, VERTIEFUNGSFACH, ERGAENZUNGSFACH}
|
2025-08-31 00:06:04 +02:00
|
|
|
date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum
|
|
|
|
examiner: "", // PrüferIn (Prof)
|
|
|
|
assistant: "", // BeisitzerIn
|
|
|
|
grade_received: 0.0, // Note
|
|
|
|
grade_reasonable: "", // War die Note angemessen?
|
|
|
|
exam_duration: duration(minutes: 0), // Prüfungsdauer
|
|
|
|
attendance: (
|
|
|
|
/* Veranstaltung, Dozent(in), Jahr, regelmäßig besucht? */
|
2025-09-10 14:36:12 +02:00
|
|
|
event(name: "", lecturer: "", semester: "", did_attend: ""),
|
|
|
|
event(name: "", lecturer: "", semester: "", did_attend: ""),
|
|
|
|
event(name: "", lecturer: "", semester: "", did_attend: ""),
|
|
|
|
event(name: "", lecturer: "", semester: "", did_attend: ""),
|
2025-08-31 00:06:04 +02:00
|
|
|
),
|
|
|
|
attendance_worth: [
|
|
|
|
// Hat sich der Besuch / Nichtbesuch der Veranstaltung für dich gelohnt?
|
|
|
|
],
|
|
|
|
preparation_time: [
|
2025-09-10 15:25:19 +02:00
|
|
|
// Wie lange und wie hast du dich alleine oder mit anderen auf die Prüfung vorbereitet?
|
2025-08-31 00:06:04 +02:00
|
|
|
],
|
|
|
|
agreements: [
|
|
|
|
// Fanden vor der Prüfung Absprachen zu Form oder Inhalt statt? Wurden sie eingehalten?
|
|
|
|
],
|
|
|
|
preparations: [
|
2025-09-10 15:25:19 +02:00
|
|
|
// Welche Tipps zur Vorbereitung kannst du geben?
|
2025-08-31 00:06:04 +02:00
|
|
|
],
|
|
|
|
examiner_behavior: [
|
|
|
|
// Wie war der Prüfungsstil des Prüfers / der Prüferin?
|
|
|
|
],
|
2025-09-08 14:13:40 +02:00
|
|
|
examiner_recommendation: (none, [ // true, false
|
2025-08-31 00:06:04 +02:00
|
|
|
// Kannst du ihn / sie weiterempfehlen? Warum?
|
|
|
|
]),
|
|
|
|
examinee_behavior: [
|
2025-09-10 15:25:19 +02:00
|
|
|
// Kannst Du Ratschläge für das Verhalten in der Prüfung geben?
|
2025-08-31 00:06:04 +02:00
|
|
|
],
|
|
|
|
doc
|
|
|
|
) = [
|
|
|
|
#let radiobox(checked: false) = if checked {$circle.filled$} else {$circle$}
|
|
|
|
|
2025-09-08 14:13:40 +02:00
|
|
|
#show <study>: study
|
|
|
|
#show <lecture>: lecture
|
|
|
|
#show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
|
|
|
|
#show <examiner>: examiner
|
|
|
|
#show <assistant>: assistant
|
|
|
|
#show <grade_received>: if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")}
|
|
|
|
#show <grade_reasonable>: grade_reasonable
|
|
|
|
#show <exam_duration>: if exam_duration.minutes() > 0 [#exam_duration.minutes()]
|
|
|
|
#show <attendance_worth>: attendance_worth
|
|
|
|
#show <preparation_time>: preparation_time
|
|
|
|
#show <agreements>: agreements
|
|
|
|
#show <preparations>: it => [#it #preparations]
|
|
|
|
#show <examiner_behavior>: examiner_behavior
|
|
|
|
#show <examinee_behavior>: it => [#it #examinee_behavior]
|
|
|
|
#show <kind>: {
|
|
|
|
for exam_kind in KIND.values().filter(it => it != KIND.NONE) [
|
|
|
|
#radiobox(checked: kind == exam_kind) #exam_kind \
|
2025-08-31 00:06:04 +02:00
|
|
|
]
|
2025-09-08 14:13:40 +02:00
|
|
|
}
|
|
|
|
#show <examiner_recommendations>: [
|
|
|
|
#let can_recommend = examiner_recommendation.at(0)
|
|
|
|
#radiobox(checked: can_recommend == true) Ja \
|
|
|
|
#radiobox(checked: can_recommend == false) Nein
|
2025-08-31 00:06:04 +02:00
|
|
|
|
2025-09-08 14:13:40 +02:00
|
|
|
#examiner_recommendation.at(1)
|
|
|
|
]
|
|
|
|
#show <attendance>: it => {
|
|
|
|
let g = it.fields()
|
|
|
|
let _ = g.remove("children")
|
|
|
|
let _ = g.remove("label")
|
|
|
|
|
|
|
|
table(..g,
|
|
|
|
..it.fields().children.at(0).children,
|
2025-09-09 13:18:10 +02:00
|
|
|
..(attendance + 4*(event(),)).slice(0,4).flatten()
|
2025-08-31 00:06:04 +02:00
|
|
|
)
|
2025-09-08 14:13:40 +02:00
|
|
|
}
|
2025-08-31 00:06:04 +02:00
|
|
|
|
2025-09-08 20:28:12 +02:00
|
|
|
#include "muendliche-pruefung.typ"
|
2025-08-31 00:06:04 +02:00
|
|
|
|
|
|
|
#doc
|
|
|
|
]
|
|
|
|
|