====== API-Beschreibung EDPsync ======
Diese Seite bietet die Technische Dokumentation der API, um eigene Programme an EDP anbinden zu können.
===== Einführung =====
EDPsync bietet eine Websocket-Connection, über die u.a. Statusmeldungen sowie Informationen über Änderungen von bestimmten Daten übermittelt werden. Diese geänderten Daten können dann über verschieden API-Endpoints abgefragt werden. Bevor eine Verbindung zum Websocket oder zu einem Datenendpunkt hergestellt werden kann, muss zunächst ein JSON Web Token (JWT) abgefragt werden, der unter Angabe eines Benutzernamens und eines Passwortes an einem API-Endpoint generiert wird. Alle Endpoints werden in diesem Artikel relativ angegeben. Der vollständige Link zu ///jwt// kann zum Beispiel https://demo.edpweb.de:443/jwt sein.
Zeitangaben werden bei EDPsync grundsätzlich als Unix-Timestamp übertragen.
===== Authentifizierung =====
Wie bereits erwähnt, wird die Authentifizierung über JWTs getätigt. Der Endpunkt zur Generierung ist ///jwt//. Per Post-Befehl muss beim Aufruf im Body ein JSON-Struct übergeben werden, dass Benutzername und Passwort enthalten:
{
"action": "login",
"username": "Testnutzer",
"password": "EDP"
}
Als Antwort auf diesen Aufruf wird im Body ein JWT versendet, dass 30 Minuten gültig ist und zur Authentifizierung genutzt werden muss. Alle 30 Minuten muss der Token durch den erneuten Aufruf dieses Endpunktes aktualisiert werden. Zur Authentifizierung bei der API wird der JWT als Header "JWT" zu jeder Anfrage hinzugefügt. Bei Websockets muss vor der Verbindungsherstellung der JWT als AuthToken gesetzt werden.
===== Daten-Endpunkte =====
Wenn die Authentifizierung erfolgreich war, kann auf die Daten-Endpunkte zugegriffen werden. Mithilfe der Endpunkte können Daten abgefragt oder neue Daten in das EDP-System geschickt werden. Die Endpunkte können mit verschiedenen Parametern aufgerufen werden, um die abgefragten Daten zu konkretisieren. Diese Parameter werden an einen Pfad zu einem Endpunkt angehängt und durch ein Fragezeichen vom Pfad getrennt. Die Trennung zwischen verschiedenen Parametern geht über das "&". Ein beispielhafter Aufruf könnte dann so aussehen:
/api/getRessourcen?lastID=1&einsatznummer=2023001889
==== Datenstruktur ====
Alle Daten werden im JSON-Format übertragen, dabei wird immer ein JSON-Array genutzt, in dem mehrere Datensätze enthalten sein können. Diese Datensätze sind für jeden Endpunkt unten beschrieben. Wenn Felder in der Datenbank im aktuellen Datensatz leer sind, fallen sie auch beim JSON-Struct weg.
==== Einsätze ====
Endpunkte zum Senden und Empfangen von nicht beendeten Einsätzen
JSON-Struct:
{
"EINSATZNUMMER": 2023001835,
"PRIORITAET": "2",
"EROEFF": 1689690844,
"EROEFF_BENUTZER": "admin",
"EXTERNAL_ID": "1234",
"INTERNE_NUMMER": "1234",
"EINSATZART": "H",
"STICHWORT": "1",
"STICHWORT_KLARTEXT": "TH Klein",
"SCHLAGWORT": "Verkehrsunfall klein",
"BEMERKUNG": "Ein beteiligter PKW",
"MELDUNG": "Verkehrsunfall",
"ORT": "Musterhausen",
"ORTSTEIL": "Musterortsteil",
"UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe",
"STRASSE": "Musterweg",
"HAUSNUMMER": "1",
"OBJEKTNAME": "Musterobjekt",
"STATION": "Station 1",
"KOORDX": 8.46101760864258,
"KOORDY": 50.2865424245377,
"MELDENDER": "Max Mustermann",
"MELDEWEG_TELEFON": "112",
"SONDERSIGNAL": 0,
"LASTCHANGE": 1689690844,
"LASTCHANGE_USER": "admin"
}
=== getEinsaetze===
Endpoint: /api/getEinsaetze
mögliche Parameter:
* einsatznummer: Einsatznummer des abgefragten Einsatzes
* lastID: Einsatznummer des zuletzt empfangenen Einsatzes
=== postEinsaetze ===
Endpoint: /api/postEinsaetze
==== Einsatzabschluss ====
Endpunkte zum Senden und Empfangen von Einsatzabschlüssen
JSON-Struct:
{
"EINSATZNUMMER": 2023001889,
"STATUS": "Geschlossen",
"ENDE": 1689702991,
"ENDE_BENUTZER": "admin",
"UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe",
"LASTCHANGE": 1689702991
}
=== getEinsatzabschluss===
=== postEinsatzabschluss ===
==== Rückmeldungen ====
Endpunkte zum Senden und Empfangen von Rückmeldungen
JSON-Struct:
{
"ID": "234",
"UNIQUE_ID": "f9464d7e-256e-11ee-a649-f0a654abeabe",
"MELDENDER": "1-10",
"MELDEWEG": "Tetra",
"MELDUNG": "Weitergeleitet an Leistelle",
"ADD_TIME": 1689694102,
"ADD_USER": "admin",
"CHECKSUM": "216a5676fdd6855897597ab26b943eb2a3cab8e421c2b12ee5762d4ec7ed8622",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== getRueckmeldungen===
=== postRueckmeldungen ===
==== Maßnahmen ====
Endpunkte zum Senden und Empfangen von Maßnahmen
JSON-Struct:
{
"ID": "522",
"ADD_TIME": 1689694165,
"ADD_USER": "admin",
"EINTRAG": "Polizei informiert",
"CHECKSUM": "19fa523ea680cb2768e862f98ca8bc424e48ff32e91aa5cc0075b880a62d8c1d",
"UNIQUE_ID": "1f1a5041-256f-11ee-a649-f0a654abeabe",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== getMassnahmen===
=== postMassnahmen ===
==== Einsatzverlauf/Einsatztagebuch ====
Endpunkte zum Senden und Empfangen von ETB-Einträgen
JSON-Struct:
{
"ID": "140",
"ADD_TIMESTAMP": 1689694568,
"ADD_USER": "admin",
"VERLAUFID": 1,
"UNIQUE_ID": "0ef1686f-2570-11ee-a649-f0a654abeabe",
"TYP": "Anforderung",
"VON": "Einsatzleitung",
"AN": "Leitstelle",
"EINTRAG": "Eine Testaufgabe zur Einsatzstelle",
"CHECKSUM": "e34ed7266ca787df688884eab8366c6a04c4c68cbf34610c77951d50948fc412",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== getEinsatzverlauf===
=== postEinsatzverlauf ===
==== Einsatzabschnitte ====
Endpunkte zum Senden und Empfangen von Einsatzabschnitten
JSON-Struct:
{
"ID": "197",
"UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe",
"BEZEICHNUNG": "Bereitstellungsraum",
"EAL": "Mustermann",
"KANAL": "TMO",
"RUFNAME": "1-10-1",
"NUMMER": 1,
"TAKTZEICHEN": "EDPTZ_PGtyZWlzIGljb25iaWc9ImJlcmVpdHN0ZWxsdW5nIiBmZ2NvbG9yPSIjMDAwMDAwIiBiZ2NvbG9yPSIjZmZmZjAwIiBmb250c2l6ZT0iNTUiPg==",
"LASTCHANGE_USER": "admin",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== getEinsatzabschnitt===
=== postEinsatzabschnitt ===
==== Ressourcen ====
Endpunkte zum Senden und Empfangen von Ressourcen
JSON-Struct:
{
"ID": "90",
"TYP": "Einsatzmittel",
"BEZEICHNUNG": "RTW",
"ANZAHL": 5,
"LASTCHANGE": 1689695871,
"UNIQUE_ID": "1775f42f-2573-11ee-a649-f0a654abeabe",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe",
"ABSCHNITT_UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe"
}
=== getRessourcen===
=== postRessourcen ===
==== Ressourcen löschen ====
Endpunkte zum Senden und Empfangen zur Löschung von Ressourcen
JSON-Struct:
{
"UNIQUE_ID": "1775f42f-2573-11ee-a649-f0a654abeabe"
}
=== delRessourcen===
==== Schäden ====
Endpunkte zum Senden und Empfangen von Schäden
JSON-Struct:
{
"ID": "41",
"BESCHREIBUNG": "Patient GELB",
"ANZAHL": 3,
"FRAGLICH": 0,
"TAKTZEICHEN": "EDPTZ_PHBlcnNvbiBzY2hhZGVuPSJwZXJzb252ZXJsZXR6dCIgZmdjb2xvcj0iI2NmY2QxMyIgYmdjb2xvcj0iI2ZmZmZmZiI+",
"UNIQUE_ID": "23f3f35b-2573-11ee-a649-f0a654abeabe",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe",
"ABSCHNITT_UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe"
}
=== getSchaeden===
=== postSchaeden ===
==== Schäden löschen ====
Endpunkte zum Senden und Empfangen zur Löschung von Schäden
JSON-Struct:
{
"UNIQUE_ID": "23f3f35b-2573-11ee-a649-f0a654abeabe"
}
=== delSchaeden===
==== Patienten ====
Endpunkte zum Senden und Empfangen von Patienten
JSON-Struct:
{
"ID": "58",
"NAME": "Mustermann",
"VORNAME": "Max",
"GESCHLECHT": "unbekannt",
"GEBDATUM": "01.01.2000",
"EM": "1-83-2",
"EM2": "1-92-1",
"PATNUMMER": "3",
"KOMMENTAR": "Ganz schlimm",
"ADDTIME": 1689695952,
"TRANSPORTART": "Liegend",
"VERLETZUNG": "Kopfplatzwunde",
"NOTARZT": 1,
"ISOLIERT": 0,
"RMI": "224",
"PAT_ALTER": "23",
"RMC": "212313",
"ZIELORT": "KH Nordwest",
"BEH_PRIO": "2",
"SICHTUNGSKATEGORIE": "Gelb",
"MASSNAHMEN": "Blutung gestillt",
"LASTCHANGE": 1689702368,
"UNIQUE_ID": "47e74eee-2573-11ee-a649-f0a654abeabe",
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe",
"ABSCHNITT_UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe"
}
=== getPatienten===
=== postPatienten ===
==== EDPsync-Freigabe ====
Endpunkte zum Senden und Empfangen von Einsatzfreigaben über EDPsync
JSON-Struct:
{
"BENUTZERROLLE": "Musterhausen",
"ADD_TIMESTAMP": 1689702917,
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== postFreigabe ===
==== Fahrzeugzuteilung ====
Endpunkte zum Senden und Empfangen von Fahrzeugzuteilungen
JSON-Struct:
{
"ID": 472,
"RUFNAME": "1-83-2",
"LASTCHANGE": 1689702276,
"EINSATZ_UNIQUE_ID": "6324eaf9-2567-11ee-a649-f0a654abeabe"
}
=== getEMDispo===
=== dispoEM ===
==== Fahrzeugentzug ====
Endpunkte zum Senden und Empfangen von Fahrzeugentzügen
JSON-Struct:
{
"RUFNAME": "1-83-2",
"LASTCHANGE": 1685026590
}
=== getEMEntz===
=== postEMEntz ===
==== Fahrzeug: Abschnittszuteilung ====
Endpunkte zum Senden und Empfangen von Fahrzeugzuteilungen zu Abschnitten
JSON-Struct:
{
"RUFNAME": "1-83-2",
"LASTCHANGE": 1689702700,
"ABSCHNITT_UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe"
}
=== getEMAbschnitt===
=== postEMAbschnitt ===
==== Fahrzeug: Besatzung ====
Endpunkte zum Senden und Empfangen von Fahrzeugbesatzungen
JSON-Struct:
{
"RUFNAME": "1-83-2",
"LASTCHANGE": 1685026590,
"PERSONAL": "",
"BESATZUNG_1": 0,
"BESATZUNG_2": 1,
"BESATZUNG_3": 1,
"BESATZUNG_GES": 2,
"BESATZUNG_PA": 0
}
=== getEMBesatzung===
=== postEMBesatzung ===
==== Fahrzeug: Abschnittszuteilung & Besatzung ====
Endpunkte zum Senden und Empfangen von Fahrzeugzuteilungen zu Abschnitten & Besatzung gleichzeitig
JSON-Struct:
{
"RUFNAME": "1-83-2",
"LASTCHANGE": 1689702700,
"PERSONAL": "",
"BESATZUNG_1": 0,
"BESATZUNG_2": 1,
"BESATZUNG_3": 1,
"BESATZUNG_GES": 2,
"BESATZUNG_PA": 0,
"ABSCHNITT_UNIQUE_ID": "082160d9-2573-11ee-a649-f0a654abeabe"
}
=== getEMBesEa===
=== postEMBesEa ===
==== Lagekarte ====
Endpunkte zum Senden und Empfangen von Lagekarten
JSON-Struct:
=== getLagekarte===
=== postLagekarte ===