Dieses Modul bietet die Möglichkeit, Risiken spielerisch miteinander zu vergleichen. Aus den präsentierten Paaren von Ereignissen muss jeweils dasjenige mit der höheren Eintrittswahrscheinlichkeit gewählt werden. Es wird unmittelbar angezeigt, ob die Schätzung richtig war. Die 'online'-Version der WebApp zeigt in den folgenden Ansichten, wie man im Vergleich zu anderen Benutzern abschneidet.
Für einen besseren Überblick sind die Quell-Dateien unter src/js mit kurzen Beschreibungen aufgelistet:
├── main.jsx // Einstiegspunkt für App *mit* Verwendung der API ("online mode")
├── main-offline.jsx // Einstiegspunkt für App *ohne* Verwendung der API ("offline mode")
├── config.js // Globale Konfiguration der WebApp
├── components // (p)react Komponenten
│ ├── AnswerScreen.jsx
│ ├── FinalScreen.jsx
│ ├── Index.jsx // Web App Haupt-Komponente
│ ├── QuestionScreen.jsx
│ ├── ScoreScreen.jsx
│ ├── TitleScreen.jsx
│ ├── UserVotesScreen.jsx
│ └── partials
│ ├── AnswerItem.jsx
│ ├── DonutGraphItem.jsx
│ ├── HeaderLightItem.jsx
│ ├── ResponseOptionItem.jsx
│ └── VoteItem.jsx
├── content // Definitionen der Inhalte
│ ├── module.json // Labels und Texte des User Interfaces
│ └── questions.json // Definitionen der Fragen
├── d3 // d3 Module
│ ├── axes.js
│ ├── donutchart.js
│ ├── grid.js
│ ├── increment.js
│ ├── legend.js
│ ├── line.js
│ └── symbols.js
└── utilities // Werkzeuge und Dienste
├── api.js // API für Lese- und Schreibzugriff auf die Datenbank
├── enableTouch.js
├── fonts.js
├── formatter.js
└── randomizer.js
Die Inhalte der 'offline'-Version sind in den json-Dateien Dateien unter src/js/content definiert.
Titel, Texte und Labels sind in module.json definiert. Dort kann man z.B. den einleitenden Text und die Labels der Buttons ändern.
Die Datenbasis diese Moduls ist eine einfache Liste von Ereignissen. Ein Ereignis kann durch eine ID eindeutig identifiziert werden und besteht ansonsten aus der Bezeichnung und dem "Basisrisiko". Letzteres stellt die Häufigkeit des Ereignisses dar, bezogen auf die Referenzgröße 100 000:
{
"id": 1,
"bezeichnung": "Tod durch Erklettern des Mount Everests",
"basisRisiko": 3500.00
}
Die Konfiguration für den Zugriff auf die API ist in src/js/config.js definiert.
api: {
random: 'M1_Risikopaare/Random',
create: 'M1_RisikopaareUserData/Create',
proportions: 'M1_RisikopaareUserData/CountsByPairId/',
url: 'https://www.adaptivetoolbox.net/risikoatlas/api/'
}
Dabei setzt sich eine Anfrage an die API aus der URL, dem entsprechenden Endpunkt und gegebenenfalls einem oder mehreren Parametern bzw. einem Für die Abfrage von Daten und das Erstellen neuer Einträge in der Datenbank sind folgende Endpunkte von der API definiert:
Für alle auf Ereignise bezogenen Anfragen an die API werden GET Requests an die in der config.js festgelegte api.url verwendet. Folgende API Endpunkte sind definiert:
/M1_Risikopaare/Random
Zurückgegeben wird ein Objekt mit folgender Struktur:
{
"id": 1700,
"paar": [
{
"id": 32,
"bezeichnung": "Tod durch Vorsätzliche Selbstbeschädigung",
"basisRisiko": 12.64,
"bezugsrahmen": "innerhalb eines Jahres",
"referenzJahr": "2014",
"referenz": "Destatis"
},
{
"id": 59,
"bezeichnung": "Tod durch Essen von 100 kohlegegrillten Steaks",
"basisRisiko": 0.1,
"bezugsrahmen": "innerhalb eines Jahres",
"referenzJahr": "2010",
"referenz": "wiki"
}
]
}
/M1_Risikopaare/Liste
/M1_Risikopaare/ById/{id}
wobei {id} für die ID des gesuchten Ereignispaares steht.
Um den Vergleich zu anderen Nutzern zu ermöglichen werden die gewählten Antworten mit Benutzer-ID und Ereignispaar-ID gespeichert.
/M1_RisikopaareUserData/Create
Per POST Request müssen dafür folgende Daten übermittelt werden:
/M1_RisikopaareUserData/CountsByPairId/?pairId={id}
Per GET Request muss die ID des Ereignispaars als Parameter übergeben werden.
Ein entsprechender Datensatz sieht wie folgt aus:
{
"id": 1700,
"paar": [
{ "id": 32, "anzahlStimmen": 1.0 },
{ "id": 59, "anzahlStimmen": 0.0 }
]
}
/M1_RisikopaareUserData/Proportions
liefert prozentuale Anteile in folgender Struktur:
{
"richtig": 0.61931290622098423,
"falsch": 0.38068709377901577
}
/M1_RisikopaareUserData/ProportionsByPairId/?pairId={id}
/M1_RisikopaareUserData/Liste
/M1_RisikopaareUserData/ByRecordId/{id}
Zurückgegeben wird ein Datensatz, der einer Auswahl eines Benutzers aus einem Ereignispaar entspricht:
{
"id": 1,
"userId": 2,
"risikoPaarId": 3,
"correct": true
}
/M1_RisikopaareUserData/ByUserId?userId={id}
Die id des gefragten Benutzers muss als Parameter des GET Requests übergeben werden.
Zurückgegeben wird eine Liste der entsprechenden Einträge:
[
{ "id": 1, "userId": 1, "risikoPaarId": 2, "correct": true },
{ "id": 2, "userId": 1, "risikoPaarId": 3, "correct": false },
{ "id": 3, "userId": 1, "risikoPaarId": 1, "correct": false }
]