LOEP-Module

26.07.2026

TLDR: Module erlauben LOEP, sehr flexibel an deinen individuellen Anwendungsfall angepasst zu werden. Wenn du dich fragst "Aber kann LOEP auch [irgendwas was nicht eh schon in LOEP drin ist] machen?", dann ist die Antwort vermutlich "Ja, wenn du ein Modul dafür erstellst".

Ich gehe davon aus, dass du vor dem Lesen dieser Seite die Was ist LOEP überhaupt?-Seite gelesen hast.

Überblick

Das Problem: LOEP individuell anpassen

LOEP soll dir ermöglichen, deine individuellen Ideen darüber, wie man ein ROM-System gestalten kann, umzusetzen. Um möglichst viele verschiedene Ideen tatsächlich umsetzen zu können, ist es notwendig, dass LOEP möglichst flexibel erweiterbar ist. Hierbei muss eine Balance erreicht werden: LOEP soll mit möglichst wenig Aufwand / Einarbeitung bedienbar bleiben, aber gleichzeitig bei Bedarf viel Spielraum und Anpassungsfähigkeit bieten. Die Tagline "Simple by default, powerful when needed" des Software-Projekts KDE (www.kde.org) beschreibt diesen Anspruch meiner Meinung nach hervorragend.

Die Lösung: Module

Auch ohne die Verwendung von Modulen bietet LOEP bereits Raum zur individuellen Anpassung: Du kannst beliebig viele eigene Fragebögen anlegen und mit Online-Fragebogen-üblichen Werkzeugen (unterschiedliche Antwortformate, Filterfragen, ...) gestalten. Irgendwann findest du aber vielleicht ein Limit dieser Möglichkeiten, zum Beispiel wenn du

Und hier kommen Module ins Spiel: Wenn du ein eigenes Modul erstellst, kannst du nahezu beliebig komplexe Logik in deine Fragbögen einbinden. Die Daumenregel ist: Was du in Python schreiben kannst, kann jetzt auch dein Fragebogen.

Was ist in einem Modul drin?

... und wie erstellt man ein Modul? Ab hier wird's natürlich etwas technischer. Wenn dir das unübersichtlich oder nicht ganz verständlich ist und du aber trotzdem gern wüsstest, ob deine Idee mithilfe eines Moduls in LOEP umgesetzt werden kann, dann schreib mir gern eine Mail: maxhag[at]mailbox.org. Im Folgenden erkläre ich alles anhand eines Beispielmoduls mit dem Namen loepmod-example. In dessen Codeberg-Repo (codeberg.org/loep/loepmod-example) kannst du bei Bedarf also nochmal "nachlesen", was dich genauer interessiert.

Ein Modul ist einfach eine Handvoll Dateien, die in einer bestimmten Weise strukturiert sind. Hier ist zum Beispiel die Verzeichnisstruktur vom loepmod-example:

loepmod-example/
  module.json
  module/
    data/
      example-monitor.json
      example-monitor-answers.csv
      example-sdec.json
      survey-groups.csv
      users/
        hiwis.csv
        patients.csv
        tech.csv
        therapists.csv
    datasets/
    item_backends/
      feedback_symptoms.py
      sessno_table.py
    scripts/
      init_example_instance.sh
    survey_scripts/
      write_page_file.py
      write_summary_file.py
Und was liegt in den Verzeichnissen und Dateien jeweils? Gehen wir das mal schrittweise durch.

module.json

Diese Datei ist das "Namensschild" des Moduls und enthält die zentralen Metadaten:
{
    "name": "example",
    "version": "1.0.0",
}

Das Attribut name sollte exakt dem Verzeichnisnamen entsprechen, in dem das Modul liegt. Die version kannst du frei wählen, die ist nur für dich, damit du einen Überblick hast, welche Version deines Moduls du gerade installiert hast.

In diesem Modul nicht verwendet, aber theoretisch möglich: Die module.json kann auch spezifizieren, welche R-, Python- und apt-Packages dieses Modul benötigt. Das ist praktisch, falls du zB dein Therapie-Feedback mithilfe eines speziellen R-Packages berechnen lässt. Solche zusätzlichen Packages würdest du wie folgt spezifizieren:

{
    "name": "example",
    "version": "1.0.0",
    "apt_packages": "neovim emacs",
    "python_packages": "rpy2==3.6.5 rpy2-rinterface==3.6.4 rpy2-robjects==3.6.3",
    "r_packages": "scales lme4 ltm"
}

Wenn du LOEP via Docker (also mit dem mitgelieferten Build-Script: ./build/build.sh run) verwendest, kann es automatisch diese erforderlichen Packages installieren. Wenn du LOEP stattdessen direkt über python manage.py runserver laufen lässt, musst du eventuell erforderliche Packages selbst installieren.

data

Hier kannst du beliebig viele Dateien ablegen. Die Idee ist, dass hier nur Dateien liegen, welche in LOEP importiert werden können. Im loepmod-example sind das:

datasets

Ähnlich zu data/ legst du auch hier keine Scripts mit Anweisungen ab, sondern Daten. Während data/ aber ausschließlich LOEP-spezifische Datenformate enthalten soll, ist datasets/ der richtige Ort für alle anderen Daten (z.B. Vergleichsdatensätze für Feedback-Berechnung).

Im loepmod-example liegt hier nix.

item_backends

In den Online-Fragebögen von LOEP kannst du nicht nur die vordefinierten Standard-Itemtypen (Freitext, Single Choice, Multiple Choice, Slider, ...) verwenden, sondern auch beliebige andere, sogenannte "Custom HTML"-Items definieren. Und der Backend-Code dazu, der also im Hintergrund bestimmt, wie dieses Item eigentlich auszusehen und sich zu verhalten hat, liegt hier.

Für jeden von dir definierten Item-Typ liegt hier eine Datei. In loepmod-example sind zwei Custom HTML Items definiert:

Wenn du also zum Beispiel eine eigene Vorstellung davon hast, wie dein ROM-Feedback aussehen sollte, dann ist item_backends/ die richtige Adresse, um diese Vorstellung umzusetzen.

scripts

Hier kannst du beliebige Scripts zum manuellen Ausführen ablegen. Im Fall von loepmod-example liegt hier init_example_instance.sh: Dieses Script lädt alle Beispiel-Daten aus data/, sodass eine fertig mit Beispiel-Daten gefütterte LOEP-Instanz entsteht, mit der man ausprobieren kann, wie sich LOEP bedienen lässt.

survey_scripts

Wenn du eine Survey (also einen Fragebogen) definierst, kannst du spezifizieren, dass zu bestimmten Zeitpunkten (z.B. nach dem Beantworten einer bestimmten Seite oder nach dem Beantworten der gesamten Survey) ein von dir geschriebenes Python-Script ausgeführt werden soll. Solche Scripts legst du in diesem Verzeichnis ab.

Im Falle von loepmod-example sind diese Scripts ziemlich langweilig:

Weil diese Script Zugriff auf die erhobenen Daten haben, stehen dir aber unzählige tatsächlich nützliche Optionen zur Verfügung. Du könntest zum Beispiel ein Script schreiben, welches nach Beantwortung eines Fragebogens automatische eine Auswertung des Fragebogens per Mail an die Therapeutin verschickt. Oder ein Script, welches nach Beantwortung eines Fragebogens automatisch die Einladung zum Fragebogen der nächsten Woche erstellt. Oder ein Script, welches basierend auf den bisherigen Fragebogen-Antworten entscheidet, welche Fragebögen der Patient in Zukunft standardmäßig erhalten sollte. Oder oder oder...

Zusammenfassung

Wenn du dich fragst, ob du mit LOEP eine komplizierte Idee umsetzen kannst, dann ist die Antwort vermutlich "Ja, indem du ein Modul dafür erstellst". Und wenn du dir nicht sicher bist, ob du dieses Modul erstellt kriegst, können wir auch gern darüber reden (maxhag[at]mailbox.org), wie ich dir dabei helfen kann. Ich freu mich über mehr Verwendungsmöglichkeiten für LOEP!