====== 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 ===