Patient:innen
GET
/patients
Akten auflisten
Umfang des Tokens: patients:read
Parameter
| Name | Ort | Typ | Bedeutung |
| status |
Abfrage |
string |
Aktenstatus, kommagetrennt. Ohne Angabe nur active und inactive.
|
| birthDateFrom |
Abfrage |
string |
Geburtsdatum ab (JJJJ-MM-TT).
|
| birthDateTo |
Abfrage |
string |
Geburtsdatum bis (JJJJ-MM-TT).
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von Patient.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/patients
Akte anlegen
Umfang des Tokens: patients:write
Parameter
| Name | Ort | Typ | Bedeutung |
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
lastName* |
string |
höchstens 120 Zeichen
|
|
firstName* |
string |
höchstens 120 Zeichen
|
|
gender |
string, oder leer |
Auswahl: M, F, D
|
|
birthDate |
date-time, oder leer |
|
|
status |
string, oder leer |
Auswahl: active, inactive, archived, merged
|
|
guardianFirstName |
string, oder leer |
höchstens 120 Zeichen
|
|
guardianLastName |
string, oder leer |
höchstens 120 Zeichen
|
|
guardianGender |
string, oder leer |
Auswahl: M, F, D
|
|
healthInsurance |
string, oder leer |
höchstens 190 Zeichen
|
|
insuranceType |
string, oder leer |
Auswahl: public, public_additional, private, private_assistance
|
|
phone |
string, oder leer |
höchstens 40 Zeichen
|
|
mobile |
string, oder leer |
höchstens 40 Zeichen
|
|
email |
email, oder leer |
höchstens 190 Zeichen
|
|
street |
string, oder leer |
höchstens 190 Zeichen
|
|
postalCode |
string, oder leer |
höchstens 16 Zeichen
|
|
city |
string, oder leer |
höchstens 120 Zeichen
|
|
doctor |
string, oder leer |
höchstens 190 Zeichen
|
|
diagnosis |
string, oder leer |
höchstens 2000 Zeichen
|
|
anamnesis |
string, oder leer |
höchstens 5000 Zeichen
|
|
notes |
string, oder leer |
höchstens 5000 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
Patient.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/patients/search
Akten suchen (über Blind Index)
Umfang des Tokens: patients:read
Parameter
| Name | Ort | Typ | Bedeutung |
| q |
Abfrage |
string |
Suchbegriff: Nachname, Vorname, E-Mail oder Rufnummer. Bei NAMEN genuegt der Wortanfang ab zwei Buchstaben ("Mül" findet "Müller", "Ann Mül" die Anna Müller); bei E-Mail und Rufnummer wird exakt gesucht. Die Wortmitte trifft nicht - siehe die Beschreibung der Sammlung. Welche der beiden Suchen gelaufen ist, steht in meta.exact.
|
| field |
Abfrage |
string |
Suchfeld erzwingen: last_name, first_name, email, phone.
|
| includeArchived |
Abfrage |
string |
Archivierte Akten einbeziehen.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von Patient.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/patients/{patient}
Akte lesen
Umfang des Tokens: patients:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Patient.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
PATCH
/patients/{patient}
Akte ändern
Umfang des Tokens: patients:write
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| If-Match * |
Kopfeintrag |
string |
Pflicht. Das ETag aus dem letzten Lesen. Ohne den Kopfeintrag: 428, bei veraltetem Wert: 412.
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
lastName |
string |
höchstens 120 Zeichen
|
|
firstName |
string |
höchstens 120 Zeichen
|
|
gender |
string, oder leer |
Auswahl: M, F, D
|
|
birthDate |
date-time, oder leer |
|
|
status |
string |
Auswahl: active, inactive, archived, merged
|
|
guardianFirstName |
string, oder leer |
höchstens 120 Zeichen
|
|
guardianLastName |
string, oder leer |
höchstens 120 Zeichen
|
|
guardianGender |
string, oder leer |
Auswahl: M, F, D
|
|
healthInsurance |
string, oder leer |
höchstens 190 Zeichen
|
|
insuranceType |
string, oder leer |
Auswahl: public, public_additional, private, private_assistance
|
|
phone |
string, oder leer |
höchstens 40 Zeichen
|
|
mobile |
string, oder leer |
höchstens 40 Zeichen
|
|
email |
email, oder leer |
höchstens 190 Zeichen
|
|
street |
string, oder leer |
höchstens 190 Zeichen
|
|
postalCode |
string, oder leer |
höchstens 16 Zeichen
|
|
city |
string, oder leer |
höchstens 120 Zeichen
|
|
doctor |
string, oder leer |
höchstens 190 Zeichen
|
|
diagnosis |
string, oder leer |
höchstens 2000 Zeichen
|
|
anamnesis |
string, oder leer |
höchstens 5000 Zeichen
|
|
notes |
string, oder leer |
höchstens 5000 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Patient.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/patients/{patient}/consents
Einwilligungen auflisten
Umfang des Tokens: patients:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von Consent.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/patients/{patient}/consents
Einwilligung erteilen
Umfang des Tokens: patients:write
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
purpose* |
string |
Auswahl: appointment_reminder, invoice_delivery, document_delivery, practice_notice
|
|
channel* |
string |
Auswahl: sms, email, whatsapp
|
|
evidence |
string, oder leer |
höchstens 1000 Zeichen
|
|
note |
string, oder leer |
höchstens 1000 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
Consent.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/patients/{patient}/consents/revoke
Einwilligung widerrufen
Umfang des Tokens: patients:write
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
purpose* |
string |
Auswahl: appointment_reminder, invoice_delivery, document_delivery, practice_notice
|
|
channel* |
string |
Auswahl: sms, email, whatsapp
|
|
evidence |
string, oder leer |
höchstens 1000 Zeichen
|
|
note |
string, oder leer |
höchstens 1000 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Consent.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Dokumente
GET
/patients/{patient}/documents
Belege zu einer Akte
Umfang des Tokens: documents:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von Document.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/patients/{patient}/files
Abgelegte Dokumente einer Akte
Umfang des Tokens: documents:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
eine Liste von PatientFile.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/patients/{patient}/files
Direkt-Upload abschließen (Dokument ablegen)
Umfang des Tokens: documents:write
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
upload* |
string |
höchstens 4096 Zeichen
|
|
title* |
string |
höchstens 255 Zeichen
|
|
category* |
string |
Auswahl: doctor_letter, prescription, finding, certificate, consent, photo, correspondence, other
|
|
issuedOn |
date, oder leer |
|
|
isClinical |
boolean, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
PatientFile.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/patients/{patient}/files/uploads
Direkt-Upload vorbereiten (vorsignierte Adresse)
Umfang des Tokens: documents:write
Parameter
| Name | Ort | Typ | Bedeutung |
| patient * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
name* |
string |
höchstens 255 Zeichen
|
|
size* |
integer |
mindestens 1 · höchstens 99614720
|
|
type |
string, oder leer |
höchstens 100 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
FileUpload.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Termine
GET
/appointments
Termine auflisten
Umfang des Tokens: appointments:read
Parameter
| Name | Ort | Typ | Bedeutung |
| from |
Abfrage |
string |
Beginn des Zeitraums (ISO 8601), einschließlich.
|
| until |
Abfrage |
string |
Ende des Zeitraums (ISO 8601), ausschließlich.
|
| status |
Abfrage |
string |
Terminstatus, kommagetrennt.
|
| patientId |
Abfrage |
string |
Auf eine Akte einschränken (ULID).
|
| practitionerId |
Abfrage |
string |
Auf eine behandelnde Person einschränken (ULID).
|
| roomId |
Abfrage |
string |
Auf einen Raum einschränken (ULID).
|
| locationId |
Abfrage |
string |
Auf einen Standort einschränken (ULID). Über den Raum - Termine ohne Raum fallen heraus.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: startsAt, endsAt, createdAt, updatedAt, status. Nicht sortierbar, weil verschlüsselt gespeichert: treatmentNote, internalNote, cancellationReason. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: patient, type, practitioner, room.
|
Antwort 200 (application/json)
data trägt
eine Liste von Appointment.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/appointments
Termin anlegen
Umfang des Tokens: appointments:write
Parameter
| Name | Ort | Typ | Bedeutung |
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
appointmentTypeId* |
ulid |
|
|
practitionerId* |
ulid |
|
|
startsAt* |
date-time |
|
|
durationMinutes |
integer, oder leer |
mindestens 1 · höchstens 1440
|
|
patientId |
ulid, oder leer |
|
|
roomId |
ulid, oder leer |
|
|
title |
string, oder leer |
höchstens 190 Zeichen
|
|
treatmentNote |
string, oder leer |
höchstens 5000 Zeichen
|
|
internalNote |
string, oder leer |
höchstens 5000 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
Appointment.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/appointments/free-slots
Freie Zeitfenster berechnen
Umfang des Tokens: appointments:read
Parameter
| Name | Ort | Typ | Bedeutung |
| appointmentTypeId |
Abfrage |
string |
Terminart (ULID). Pflicht - sie bestimmt Dauer und Rüstzeiten.
|
| practitionerId |
Abfrage |
string |
Behandelnde Person (ULID). Pflicht.
|
| from |
Abfrage |
string |
Beginn des Zeitraums (ISO 8601). Pflicht.
|
| until |
Abfrage |
string |
Ende des Zeitraums (ISO 8601). Pflicht, höchstens 92 Tage nach "from".
|
| roomId |
Abfrage |
string |
Auf einen Raum einschränken (ULID).
|
| durationMinutes |
Abfrage |
string |
Abweichende Dauer.
|
| stepMinutes |
Abfrage |
string |
Schrittweite des Rasters.
|
| limit |
Abfrage |
string |
Höchstzahl an Fenstern.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: startsAt, endsAt, createdAt, updatedAt, status. Nicht sortierbar, weil verschlüsselt gespeichert: treatmentNote, internalNote, cancellationReason. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: patient, type, practitioner, room.
|
Antwort 200 (application/json)
data trägt
eine Liste von FreeSlot.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/appointments/{appointment}
Termin lesen
Umfang des Tokens: appointments:read
Parameter
| Name | Ort | Typ | Bedeutung |
| appointment * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Appointment.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/appointments/{appointment}/cancel
Termin absagen
Umfang des Tokens: appointments:write
Parameter
| Name | Ort | Typ | Bedeutung |
| appointment * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| If-Match * |
Kopfeintrag |
string |
Pflicht. Das ETag aus dem letzten Lesen. Ohne den Kopfeintrag: 428, bei veraltetem Wert: 412.
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
reason* |
string |
höchstens 1000 Zeichen
|
|
reasonCode |
string, oder leer |
Auswahl: patient_cancelled, patient_sick, patient_no_show, rescheduled, practice_cancelled, practitioner_sick, prescription_expired, other
|
|
scope |
string, oder leer |
Auswahl: this_occurrence, this_and_following
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Appointment.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/appointments/{appointment}/reschedule
Termin verschieben
Umfang des Tokens: appointments:write
Parameter
| Name | Ort | Typ | Bedeutung |
| appointment * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| If-Match * |
Kopfeintrag |
string |
Pflicht. Das ETag aus dem letzten Lesen. Ohne den Kopfeintrag: 428, bei veraltetem Wert: 412.
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
startsAt* |
date-time |
|
|
durationMinutes |
integer, oder leer |
mindestens 1 · höchstens 1440
|
|
roomId |
ulid, oder leer |
|
|
detachRoom |
boolean, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Appointment.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/appointments/{appointment}/status
Terminstatus setzen
Umfang des Tokens: appointments:write
Parameter
| Name | Ort | Typ | Bedeutung |
| appointment * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
status* |
string |
Auswahl: scheduled, confirmed, attended, no_show
|
|
reason |
string, oder leer |
höchstens 500 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Appointment.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Verordnungen
GET
/prescriptions
Verordnungen auflisten
Umfang des Tokens: prescriptions:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patientId |
Abfrage |
string |
Auf eine Akte einschränken (ULID).
|
| ongoing |
Abfrage |
string |
true: noch nicht abgeschlossen. false: abgeschlossen.
|
| reportDue |
Abfrage |
string |
true: ein Therapiebericht steht an.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: issuedOn, createdAt, updatedAt, validUntil, unitCount. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: remedies.
|
Antwort 200 (application/json)
data trägt
eine Liste von Prescription.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/prescriptions/{prescription}
Verordnung lesen
Umfang des Tokens: prescriptions:read
Parameter
| Name | Ort | Typ | Bedeutung |
| prescription * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Prescription.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/prescriptions/{prescription}/quota
Restkontingent und Berichtsfälligkeit
Umfang des Tokens: prescriptions:read
Parameter
| Name | Ort | Typ | Bedeutung |
| prescription * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
PrescriptionQuota.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Rechnungen
GET
/invoices
Rechnungen auflisten
Umfang des Tokens: invoices:read
Parameter
| Name | Ort | Typ | Bedeutung |
| patientId |
Abfrage |
string |
Auf eine Akte einschränken (ULID).
|
| status |
Abfrage |
string |
Rechnungsstatus, kommagetrennt.
|
| issuedFrom |
Abfrage |
string |
Ausgestellt ab (JJJJ-MM-TT).
|
| issuedTo |
Abfrage |
string |
Ausgestellt bis (JJJJ-MM-TT).
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: issuedOn, dueOn, createdAt, updatedAt, status, totalGrossCents. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: items.
|
Antwort 200 (application/json)
data trägt
eine Liste von Invoice.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/invoices/{invoice}
Rechnung lesen
Umfang des Tokens: invoices:read
Parameter
| Name | Ort | Typ | Bedeutung |
| invoice * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Invoice.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/invoices/{invoice}/document
Rechnung als PDF
Umfang des Tokens: invoices:read
Parameter
| Name | Ort | Typ | Bedeutung |
| invoice * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/pdf)
Ohne JSON-Objekt im Rumpf.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/invoices/{invoice}/payments
Zahlungseingang erfassen
Umfang des Tokens: invoices:write
Parameter
| Name | Ort | Typ | Bedeutung |
| invoice * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
| If-Match * |
Kopfeintrag |
string |
Pflicht. Das ETag aus dem letzten Lesen. Ohne den Kopfeintrag: 428, bei veraltetem Wert: 412.
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
amountCents |
integer, oder leer |
mindestens 1
|
|
paidAt |
date-time, oder leer |
|
|
method |
string, oder leer |
Auswahl: transfer, cash, card, direct_debit, unknown
|
|
reference |
string, oder leer |
höchstens 64 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Invoice.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Praxis
GET
/practice
Stammdaten der eigenen Praxis
Umfang des Tokens: practice:read
Antwort 200 (application/json)
data trägt
Practice.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/practice/appointment-types
Terminarten der Praxis
Umfang des Tokens: practice:read
Parameter
| Name | Ort | Typ | Bedeutung |
| includeInactive |
Abfrage |
string |
Auch stillgelegte Terminarten liefern.
|
Antwort 200 (application/json)
data trägt
eine Liste von AppointmentType.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/practice/members
Mitglieder der Praxis
Umfang des Tokens: practice:read
Parameter
| Name | Ort | Typ | Bedeutung |
| status |
Abfrage |
string |
Mitgliedschaftsstatus, kommagetrennt.
|
Antwort 200 (application/json)
data trägt
eine Liste von Member.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/practice/opening-hours
Öffnungszeiten
Umfang des Tokens: practice:read
Antwort 200 (application/json)
data trägt
eine Liste von OpeningHour.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/practice/services
Leistungskatalog
Umfang des Tokens: practice:read
Parameter
| Name | Ort | Typ | Bedeutung |
| includeInactive |
Abfrage |
string |
Auch abgelöste Einträge liefern.
|
| validOn |
Abfrage |
string |
Nur Einträge, die an diesem Tag gelten (JJJJ-MM-TT).
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: code, name, createdAt, priceCents. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
Antwort 200 (application/json)
data trägt
eine Liste von Service.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Konto
GET
/account
Das eigene Konto
Umfang des Tokens: account:read
Antwort 200 (application/json)
data trägt
Account.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
PUT
/account/push-token
Push-Token des Geräts setzen
Umfang des Tokens: account:write
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
token |
string, oder leer |
höchstens 255 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/account/sessions
Sitzungen des eigenen Kontos
Umfang des Tokens: account:read
Parameter
| Name | Ort | Typ | Bedeutung |
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von Session.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
DELETE
/account/sessions/{session}
Sitzung beenden
Umfang des Tokens: account:write
Parameter
| Name | Ort | Typ | Bedeutung |
| session * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/account/tokens
Tokens des eigenen Kontos
Umfang des Tokens: account:read
Parameter
| Name | Ort | Typ | Bedeutung |
| includeRevoked |
Abfrage |
string |
Auch widerrufene Tokens liefern.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt, birthDate, status. Nicht sortierbar, weil verschlüsselt gespeichert: lastName, firstName, email, phone, mobile, city, postalCode, street. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
| include |
Abfrage |
string |
Verknüpfte Objekte, kommagetrennt: consents.
|
Antwort 200 (application/json)
data trägt
eine Liste von ApiToken.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/account/tokens
Token ausstellen
Umfang des Tokens: account:write
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
name* |
string |
höchstens 120 Zeichen
|
|
deviceName* |
string |
höchstens 120 Zeichen
|
|
abilities |
Liste von string, oder leer |
|
|
expiresAt |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
ApiToken.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
DELETE
/account/tokens/{token}
Token widerrufen
Umfang des Tokens: account:write
Parameter
| Name | Ort | Typ | Bedeutung |
| token * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Mitteilungen
GET
/notifications
Mitteilungen des eigenen Kontos
Umfang des Tokens: account:read
Antwort 200 (application/json)
data trägt
eine Liste von Notification.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/notifications/read
Mitteilungen als gelesen markieren
Umfang des Tokens: account:write
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
ids |
Liste von string, oder leer |
|
|
all |
boolean, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
NotificationReadState.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Aufgaben
GET
/tasks
Aufgaben auflisten
Umfang des Tokens: tasks:read
Parameter
| Name | Ort | Typ | Bedeutung |
| status |
Abfrage |
string |
Stand, kommagetrennt (open, in_progress, done, cancelled). Ohne Angabe nur open und in_progress.
|
| assignee |
Abfrage |
string |
"me" (eigene), "none" (niemand zuständig) oder die Kennung eines Mitglieds (ULID).
|
| dueBy |
Abfrage |
string |
Fällig bis einschließlich diesem Tag (JJJJ-MM-TT); Aufgaben ohne Fälligkeit fallen heraus.
|
| patientId |
Abfrage |
string |
Auf eine Akte einschränken (ULID). Verlangt patients.view_master_data.
|
| limit |
Abfrage |
integer |
Seitengröße.
mindestens 1 · höchstens 100 · Voreinstellung: 25
|
| cursor |
Abfrage |
string |
Unverändert aus links.next der vorherigen Antwort. Es gibt keinen Offset: er wäre bei nebenläufigen Änderungen falsch.
|
| sort |
Abfrage |
string |
Sortierung, kommagetrennt, "-" für absteigend. Erlaubt: createdAt, updatedAt. Nicht sortierbar, weil verschlüsselt gespeichert: notes. Ein anderes Feld wird mit 422 ABGEWIESEN und nicht ignoriert.
|
Antwort 200 (application/json)
data trägt
eine Liste von Task.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/tasks
Aufgabe anlegen
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| Idempotency-Key * |
Kopfeintrag |
string |
Pflicht. Eine Wiederholung mit demselben Schlüssel liefert die erste Antwort erneut, statt einen zweiten Datensatz anzulegen.
höchstens 255 Zeichen
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
title* |
string |
höchstens 120 Zeichen
|
|
notes |
string, oder leer |
höchstens 5000 Zeichen
|
|
priority |
string, oder leer |
Auswahl: low, normal, high
|
|
dueOn |
date, oder leer |
|
|
patientId |
ulid, oder leer |
|
|
assigneeIds |
Liste von ulid, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/tasks/{task}
Aufgabe lesen
Umfang des Tokens: tasks:read
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
PATCH
/tasks/{task}
Aufgabe ändern
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
| If-Match * |
Kopfeintrag |
string |
Pflicht. Das ETag aus dem letzten Lesen. Ohne den Kopfeintrag: 428, bei veraltetem Wert: 412.
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
title |
string |
höchstens 120 Zeichen
|
|
notes |
string, oder leer |
höchstens 5000 Zeichen
|
|
priority |
string |
Auswahl: low, normal, high
|
|
status |
string |
Auswahl: open, in_progress, done, cancelled
|
|
dueOn |
date, oder leer |
|
|
patientId |
ulid, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
DELETE
/tasks/{task}
Aufgabe löschen
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
PUT
/tasks/{task}/assignees
Zuständige setzen
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
assigneeIds |
Liste von ulid |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/tasks/{task}/complete
Aufgabe abhaken
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/tasks/{task}/reopen
Aufgabe wieder öffnen
Umfang des Tokens: tasks:write
Parameter
| Name | Ort | Typ | Bedeutung |
| task * |
Pfad |
string |
Öffentliche Kennung (ULID).
|
Antwort 200 (application/json)
data trägt
Task.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Anmeldung
POST
/auth/login
Anmelden (Praxis-App)
Ohne besonderen Umfang - jedes gültige Token, dessen Konto die Berechtigung hat.
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
email* |
email |
höchstens 255 Zeichen
|
|
password* |
string |
höchstens 1024 Zeichen
|
|
deviceName* |
string |
höchstens 120 Zeichen
|
|
practiceId |
string, oder leer |
höchstens 26 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
LoginStep.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
POST
/auth/two-factor
Anmeldung fortsetzen: zweiter Faktor, Praxiswahl
Ohne besonderen Umfang - jedes gültige Token, dessen Konto die Berechtigung hat.
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
challenge* |
string |
höchstens 4096 Zeichen
|
|
code |
string, oder leer |
höchstens 64 Zeichen
|
|
practiceId |
string, oder leer |
höchstens 26 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 200 (application/json)
data trägt
LoginStep.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Zutritt
POST
/access/log
Zutrittsentscheidung melden
Umfang des Tokens: access:write
Rumpf (Pflicht, application/json)
| Feld | Typ | Bedeutung |
|
occurredAt* |
date-time |
|
|
result* |
string |
Auswahl: granted, denied
|
|
personId |
string, oder leer |
höchstens 64 Zeichen
|
|
credentialType |
string, oder leer |
Auswahl: pin, nfc
|
|
area |
string, oder leer |
höchstens 32 Zeichen
|
|
reason |
string, oder leer |
höchstens 64 Zeichen
|
* Pflichtfeld beziehungsweise immer vorhanden.
Antwort 201 (application/json)
data trägt
AccessLogEntry.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
GET
/access/snapshot
Vollständiger Zutrittsstand
Umfang des Tokens: access:read
Antwort 200 (application/json)
data trägt
AccessSnapshot.
Kopfeinträge:
ETag.
Fehler
400 Fehlender Pflicht-Kopfeintrag, etwa Idempotency-Key.
401 Kein gültiges Token.
403 Umfang des Tokens oder Berechtigung des Kontos reicht nicht.
404 Nicht vorhanden - auch dann, wenn die Kennung zu einer anderen Praxis gehört.
409 Fachlicher Konflikt (Terminkollision, ausgeschöpftes Kontingent, Idempotenzschlüssel).
412 If-Match passt nicht mehr: der Datensatz wurde zwischenzeitlich geändert.
422 Eingabe oder Abfrageparameter nicht annehmbar.
428 If-Match fehlt.
429 Ratenbegrenzung je Token oder je Praxis greift.
Objekte
AccessLogEntry
| Feld | Typ | Bedeutung |
|
occurredAt* |
date-time |
Zeitpunkt an der Tür.
|
|
recordedAt* |
date-time |
Zeitpunkt des Eingangs hier. Nach einer Netzstörung liegt er deutlich später.
|
|
personId* |
string, oder leer |
Öffentliche Kennung der Person, sofern die Steuerung eine erkannt hat.
|
|
credentialType* |
string, oder leer |
Auswahl: pin, nfc
|
|
area* |
string, oder leer |
Schlüssel des Bereichs, wie im Schnappschuss.
|
|
result* |
string |
Auswahl: granted, denied
|
|
reason* |
string, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
AccessSnapshot
| Feld | Typ | Bedeutung |
|
version* |
integer |
Fassung des Formats. Steigt, wenn sich die Bedeutung eines Feldes ändert - nicht, wenn eines dazukommt.
|
|
generatedAt* |
date-time |
Zeitpunkt des Abrufs.
|
|
areas* |
Liste von Objekten |
Die Bereiche der Praxis. Kennt die Steuerung einen Schlüssel nicht, öffnet er dort nichts.
|
|
areas[].key* |
string |
Der Schlüssel, der an den Personen steht. Er ändert sich nie; die Bezeichnung schon.
|
|
areas[].label* |
string |
|
|
areas[].pinRule* |
string |
Welches Tastenfeld an diesem Bereich hängt: "nuki" nimmt nur sechs Ziffern ohne Null an, die nicht mit 12 beginnen.
Auswahl: standard, nuki
|
|
persons* |
Liste von Objekten |
|
|
persons[].id* |
string |
Öffentliche Kennung der Person. Dieselbe Kennung meldet die Gebäudesteuerung im Protokoll zurück.
|
|
persons[].name* |
string |
|
|
persons[].active* |
boolean |
Ausgeschaltete Personen stehen weiterhin im Stand - mit false und ohne Zugangsmittel. Weggelassen wären sie nicht unterscheidbar von "gelöscht".
|
|
persons[].validFrom* |
date, oder leer |
Leer heisst "ohne Grenze".
|
|
persons[].validUntil* |
date, oder leer |
Leer heisst "ohne Grenze".
|
|
persons[].weekdays* |
Liste von string |
Leere Liste heisst "an jedem Tag".
|
|
persons[].timeFrom* |
string, oder leer |
HH:MM. Leer heisst "ohne Grenze".
|
|
persons[].timeUntil* |
string, oder leer |
HH:MM. Leer heisst "ohne Grenze".
|
|
persons[].areas* |
Liste von string |
Whitelist aus Schlüsseln der Bereiche (siehe "areas" oben). Eine leere Liste heisst "kein Bereich" und nicht "alle".
|
|
persons[].credentials* |
Liste von Objekten |
Auch mehrere derselben Art - jedes öffnet. Bei einer ausgeschalteten Person leer: Die Codes bleiben gespeichert, werden aber nicht ausgeliefert.
|
|
persons[].credentials[].type* |
string |
Auswahl: pin, nfc
|
|
persons[].credentials[].value* |
string |
Der Code im Klartext.
|
|
persons[].credentials[].label* |
string, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Account
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
firstName* |
string |
|
|
lastName* |
string |
|
|
email* |
string |
|
|
emailVerified* |
boolean |
|
|
practice* |
object |
Die Praxis, an die das verwendete Token gebunden ist.
|
|
practice.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
practice.name* |
string |
|
|
practice.accentColor* |
string, oder leer |
Akzentfarbe der Praxis (#rrggbb) oder null für die Vorgabe. Der Client wählt Schrift und Flächen daraus selbst kontrastsicher.
|
|
role* |
string, oder leer |
Auswahl: owner, management, therapist, reception, billing, assistant
|
|
roleLabel* |
string, oder leer |
|
|
permissions* |
Liste von string |
Die Berechtigungen des Kontos in dieser Praxis.
|
|
tokenScopes* |
Liste von string |
Der Umfang des verwendeten Tokens. Er kann die Berechtigungen nur einschränken, nie erweitern.
|
* Pflichtfeld beziehungsweise immer vorhanden.
ApiToken
| Feld | Typ | Bedeutung |
|
id* |
string |
Kennung des Tokens.
|
|
name* |
string |
|
|
deviceName* |
string, oder leer |
|
|
abilities* |
Liste von string |
|
|
lastUsedAt* |
date-time, oder leer |
|
|
expiresAt* |
date-time, oder leer |
|
|
createdAt* |
date-time, oder leer |
|
|
current* |
boolean |
Das Token, mit dem diese Anfrage kam.
|
|
token |
string, oder leer |
Der Klartext - AUSSCHLIESSLICH in der Antwort auf das Anlegen. Danach ist er nicht mehr abrufbar, weil nur sein Hash gespeichert wird.
|
* Pflichtfeld beziehungsweise immer vorhanden.
Appointment
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
startsAt* |
date-time |
|
|
endsAt* |
date-time |
|
|
blockedFrom* |
date-time |
Beginn inklusive Vorbereitungszeit.
|
|
blockedUntil* |
date-time |
Ende inklusive Nachbereitungszeit.
|
|
durationMinutes* |
integer |
|
|
preparationMinutes* |
integer |
|
|
followUpMinutes* |
integer |
|
|
status* |
string |
Auswahl: scheduled, confirmed, attended, no_show, cancelled
|
|
statusLabel* |
string |
|
|
title* |
string, oder leer |
|
|
isSeriesException* |
boolean |
|
|
seriesId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
seriesSequence* |
integer, oder leer |
|
|
cancelledAt* |
date-time, oder leer |
|
|
patient |
object |
Fehlt bei Terminen ohne Patientenbezug (Besprechung, Sperrzeit).
|
|
patient.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
patient.lastName* |
string |
|
|
patient.firstName* |
string |
|
|
type |
object |
|
|
type.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
type.name* |
string |
|
|
type.color* |
string, oder leer |
|
|
practitioner |
object |
|
|
practitioner.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
practitioner.name* |
string |
|
|
room |
object |
|
|
room.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
room.name* |
string |
|
|
clinical |
object |
Nur mit Zugriff auf die Behandlungsdaten dieses Termins: clinical.view, oder clinical.view_own_only an einem Termin, den das Konto selbst hält.
|
|
clinical.treatmentNote* |
string, oder leer |
|
|
clinical.internalNote* |
string, oder leer |
|
|
clinical.cancellationReason* |
string, oder leer |
|
|
clinical.cancellationReasonCode* |
string, oder leer |
Der eingeordnete Absagegrund - das Feld, worüber sich Absagen auswerten lassen. null bei jedem Termin ohne Absage und bei älteren Absagen, die nur den Freitext tragen.
Auswahl: patient_cancelled, patient_sick, patient_no_show, rescheduled, practice_cancelled, practitioner_sick, prescription_expired, other
|
|
createdAt* |
date-time, oder leer |
|
|
updatedAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
AppointmentType
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
name* |
string |
|
|
description* |
string, oder leer |
|
|
color* |
string |
Farbe im Kalender, als #rrggbb.
|
|
durationMinutes* |
integer |
Vorgabedauer. Ein einzelner Termin darf davon abweichen.
|
|
preparationMinutes* |
integer |
Rüstzeit VOR dem Termin. Belegt Raum und Behandler mit, steht aber nicht in starts_at - deshalb ist die Sperre im Kalender länger als die Behandlung.
|
|
followUpMinutes* |
integer |
Rüstzeit NACH dem Termin.
|
|
requiresPatient* |
boolean |
Ohne Akte lässt sich ein Termin dieser Art nicht anlegen.
|
|
requiresRoom* |
boolean |
|
|
onlineBookable* |
boolean |
Ob die Praxis diese Art zur Selbstbuchung freigegeben hat. Eine Buchungsoberfläche für Patient:innen zeigt nur, was hier true ist.
|
|
absenceKind* |
string, oder leer |
Gesetzt heisst: Sperre im Kalender (Pause, Besprechung, Urlaub) und keine buchbare Leistung. Leer heisst: gewöhnliche Terminart. Nicht am Namen erkennen - der ist frei änderbar.
|
|
active* |
boolean |
Stillgelegte Arten stehen nur mit ?includeInactive=true in der Liste. Bestehende Termine tragen sie weiterhin.
|
* Pflichtfeld beziehungsweise immer vorhanden.
Consent
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
purpose* |
string |
Auswahl: appointment_reminder, invoice_delivery, document_delivery, practice_notice
|
|
purposeLabel* |
string |
|
|
channel* |
string |
Auswahl: sms, email, whatsapp
|
|
channelLabel* |
string |
|
|
grantedAt* |
date-time, oder leer |
|
|
revokedAt* |
date-time, oder leer |
|
|
active* |
boolean |
|
|
revocationNote* |
string, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Document
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Kennung des erzeugenden Datensatzes.
|
|
kind* |
string |
Woher der Beleg stammt.
Auswahl: invoice, dunningNotice, prescription
|
|
kindLabel* |
string |
|
|
title* |
string |
|
|
issuedOn* |
date |
|
|
mediaType* |
string |
|
|
sha256* |
string, oder leer |
Fingerabdruck der abgelegten Datei.
|
|
downloadPath* |
string, oder leer |
Pfad zum Abruf, sofern die Schnittstelle den Beleg ausliefert.
|
* Pflichtfeld beziehungsweise immer vorhanden.
FileUpload
| Feld | Typ | Bedeutung |
|
url* |
string |
Vorsignierte Adresse im Objektspeicher.
|
|
method* |
string |
Auswahl: PUT
|
|
headers* |
object |
Genau so mitschicken - Typ und Länge stehen in der Unterschrift.
|
|
headers.Content-Type* |
string |
|
|
upload* |
string |
Versiegelter Beleg für den Abschluss (POST patients/{id}/files).
|
|
expiresAt* |
date-time |
|
* Pflichtfeld beziehungsweise immer vorhanden.
FreeSlot
| Feld | Typ | Bedeutung |
|
startsAt* |
date-time |
|
|
endsAt* |
date-time |
|
|
blockedFrom* |
date-time |
|
|
blockedUntil* |
date-time |
|
|
durationMinutes* |
integer |
|
|
practitionerId* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
roomId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
* Pflichtfeld beziehungsweise immer vorhanden.
Invoice
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
number* |
string |
Die Rechnungsnummer, oder "(Entwurf)".
|
|
type* |
string |
Auswahl: private_patient, statutory_clearing
|
|
typeLabel* |
string |
|
|
status* |
string |
Auswahl: draft, open, paid, dunned, cancelled
|
|
statusLabel* |
string |
|
|
patientId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
issuedOn* |
date |
|
|
dueOn* |
date |
|
|
daysOverdue* |
integer |
|
|
totalNetCents* |
integer |
Betrag in Cent.
|
|
totalTaxCents* |
integer |
Betrag in Cent.
|
|
totalGrossCents* |
integer |
Betrag in Cent.
|
|
dunningFeesCents* |
integer |
Betrag in Cent.
|
|
paidAmountCents* |
integer, oder leer |
Betrag in Cent.
|
|
outstandingCents* |
integer |
Betrag in Cent.
|
|
paidAt* |
date-time, oder leer |
|
|
cancelledAt* |
date-time, oder leer |
|
|
dunningLevel* |
string, oder leer |
Auswahl: reminder, first, second
|
|
hasDocument* |
boolean |
|
|
items |
Liste von Objekten |
Nur mit include=items.
|
|
items[].id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
items[].kind* |
string |
Auswahl: service, remedy, copayment, missed_appointment
|
|
items[].kindLabel* |
string |
|
|
items[].code* |
string, oder leer |
|
|
items[].name* |
string |
|
|
items[].unit* |
string, oder leer |
|
|
items[].performedOn* |
date |
|
|
items[].quantity* |
integer |
|
|
items[].unitPriceCents* |
integer |
Betrag in Cent.
|
|
items[].taxRate* |
integer |
Basispunkte, 1900 = 19,00 %.
|
|
items[].netCents* |
integer |
Betrag in Cent.
|
|
items[].taxCents* |
integer |
Betrag in Cent.
|
|
items[].grossCents* |
integer |
Betrag in Cent.
|
|
createdAt* |
date-time, oder leer |
|
|
updatedAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
LoginStep
| Feld | Typ | Bedeutung |
|
status* |
string |
authenticated: token steht bereit. twoFactorRequired: Code an auth/two-factor schicken. practiceRequired: eine der practices wählen und mit challenge an auth/two-factor schicken.
Auswahl: authenticated, twoFactorRequired, practiceRequired
|
|
challenge |
string |
Versiegelte Zwischenstufe, wenige Minuten gültig.
|
|
expiresAt |
date-time |
Ablauf der Zwischenstufe.
|
|
practices |
Liste von Objekten |
|
|
practices[].id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
practices[].name* |
string |
|
|
token |
string |
Nur einmal zu sehen. Gehört ins sichere Speicherfach des Geräts.
|
|
tokenId |
string |
Kennung zum Widerruf (DELETE account/tokens/{token}).
|
|
practice |
object |
|
|
practice.id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
practice.name* |
string |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Member
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Kennung des Kontos.
|
|
firstName* |
string |
|
|
lastName* |
string |
|
|
email* |
string |
|
|
role* |
string |
Auswahl: owner, management, therapist, reception, billing, assistant
|
|
roleLabel* |
string |
|
|
status* |
string |
Auswahl: invited, active, suspended, left
|
|
statusLabel* |
string |
|
|
treatsPatients* |
boolean |
|
|
joinedAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Notification
| Feld | Typ | Bedeutung |
|
id* |
string |
|
|
kind* |
string, oder leer |
Auswahl: task, time_tracking, employment, message, mention, appointment, bounce, consent, whatsapp, import, support, prices, sms_quota, storage_quota, auto_top_up, call, malware, data_request
|
|
kindLabel* |
string, oder leer |
|
|
title* |
string |
|
|
body* |
string, oder leer |
Reiner Text, ohne Auszeichnung.
|
|
readAt* |
date-time, oder leer |
|
|
createdAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
NotificationReadState
| Feld | Typ | Bedeutung |
|
marked* |
integer |
|
|
unread* |
integer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
OpeningHour
| Feld | Typ | Bedeutung |
|
locationId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
weekday* |
integer |
ISO-8601: 1 = Montag ... 7 = Sonntag.
|
|
weekdayLabel* |
string |
|
|
opensAt* |
string |
|
|
closesAt* |
string |
|
|
breakStartsAt* |
string, oder leer |
|
|
breakEndsAt* |
string, oder leer |
|
|
note* |
string, oder leer |
|
|
slots* |
Liste von Objekten |
Der Tag ohne Pause, fertig zerlegt.
|
|
slots[].from* |
string |
|
|
slots[].to* |
string |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Patient
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
lastName* |
string |
|
|
firstName* |
string |
|
|
gender* |
string, oder leer |
Auswahl: M, F, D
|
|
genderLabel* |
string, oder leer |
|
|
birthDate* |
date, oder leer |
|
|
age* |
integer, oder leer |
|
|
status* |
string |
Auswahl: active, inactive, archived, merged
|
|
statusLabel* |
string |
|
|
guardian* |
object |
|
|
guardian.firstName* |
string, oder leer |
|
|
guardian.lastName* |
string, oder leer |
|
|
guardian.gender* |
string, oder leer |
|
|
insurance* |
object |
|
|
insurance.provider* |
string, oder leer |
|
|
insurance.type* |
string, oder leer |
|
|
insurance.typeLabel* |
string, oder leer |
|
|
contact* |
object |
|
|
contact.phone* |
string, oder leer |
|
|
contact.mobile* |
string, oder leer |
|
|
contact.email* |
string, oder leer |
|
|
address* |
object |
|
|
address.street* |
string, oder leer |
|
|
address.postalCode* |
string, oder leer |
|
|
address.city* |
string, oder leer |
|
|
clinical |
object |
Nur mit Zugriff auf die Behandlungsdaten dieser Akte: clinical.view, oder clinical.view_own_only bei einer Patientin, die das Konto behandelt. Fehlt er, fehlt der ganze Block. Anamnese und Notizen kommen als reiner Text, auch wenn sie in der Praxis mit Formatierung geschrieben wurden.
|
|
clinical.doctor* |
string, oder leer |
|
|
clinical.diagnosis* |
string, oder leer |
|
|
clinical.anamnesis* |
string, oder leer |
|
|
clinical.notes* |
string, oder leer |
|
|
mergedIntoId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
createdAt* |
date-time, oder leer |
|
|
updatedAt* |
date-time, oder leer |
|
|
consents |
Liste von Objekten |
Nur mit include=consents.
|
|
consents[].id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
consents[].purpose* |
string |
Auswahl: appointment_reminder, invoice_delivery, document_delivery, practice_notice
|
|
consents[].purposeLabel* |
string |
|
|
consents[].channel* |
string |
Auswahl: sms, email, whatsapp
|
|
consents[].channelLabel* |
string |
|
|
consents[].grantedAt* |
date-time, oder leer |
|
|
consents[].revokedAt* |
date-time, oder leer |
|
|
consents[].active* |
boolean |
|
|
consents[].revocationNote* |
string, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
PatientFile
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
title* |
string |
|
|
category* |
string |
Auswahl: doctor_letter, prescription, finding, certificate, consent, photo, correspondence, other
|
|
categoryLabel* |
string |
|
|
issuedOn* |
date, oder leer |
|
|
mediaType* |
string |
|
|
sizeBytes* |
integer |
|
|
scanStatus* |
string, oder leer |
Ergebnis der Virenprüfung. Nur "sauber" (oder null bei altem Bestand) ist abrufbar; "ausstehend" heißt "wird geprüft".
Auswahl: ausstehend, sauber, quarantaene, abgelehnt, fehler, geloescht
|
|
scanStatusLabel* |
string, oder leer |
|
|
available* |
boolean |
Darf die Datei ausgeliefert werden?
|
|
uploadedByPatient* |
boolean |
|
|
createdAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Practice
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
name* |
string |
|
|
email* |
string, oder leer |
|
|
phone* |
string, oder leer |
|
|
address* |
object |
|
|
address.street* |
string, oder leer |
|
|
address.houseNumber* |
string, oder leer |
|
|
address.postalCode* |
string, oder leer |
|
|
address.city* |
string, oder leer |
|
|
address.countryCode* |
string |
|
|
locations* |
Liste von Objekten |
|
|
locations[].id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
locations[].name* |
string |
|
|
locations[].street* |
string, oder leer |
|
|
locations[].houseNumber* |
string, oder leer |
|
|
locations[].postalCode* |
string, oder leer |
|
|
locations[].city* |
string, oder leer |
|
|
locations[].phone* |
string, oder leer |
|
|
locations[].email* |
string, oder leer |
|
|
locations[].isPrimary* |
boolean |
|
|
locations[].isActive* |
boolean |
|
|
createdAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Prescription
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
type* |
string |
Auswahl: statutory, private, accident, dental, aid, self_pay
|
|
typeLabel* |
string |
|
|
patientId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
doctor* |
string |
|
|
doctorLanr* |
string, oder leer |
|
|
payerName* |
string, oder leer |
|
|
payerIk* |
string, oder leer |
|
|
issuedOn* |
date |
|
|
receivedOn* |
date, oder leer |
|
|
diagnosisCode |
string, oder leer |
Fehlt ohne Zugriff auf die Behandlungsdaten dieser Verordnung.
|
|
diagnosisGroup |
string, oder leer |
Fehlt ohne Zugriff auf die Behandlungsdaten dieser Verordnung.
|
|
remedy* |
string, oder leer |
|
|
frequency* |
string, oder leer |
|
|
treatmentStartBy* |
date, oder leer |
|
|
validUntil* |
date, oder leer |
|
|
billingDeadlineOn* |
date, oder leer |
|
|
billingDeadlinePassed* |
boolean |
|
|
homeVisit* |
boolean |
|
|
longTermNeed* |
boolean |
|
|
completedAt* |
date-time, oder leer |
|
|
quota* |
object |
|
|
quota.prescribed* |
integer |
|
|
quota.used* |
integer |
|
|
quota.remaining* |
integer |
Nie negativ.
|
|
quota.exceeded* |
boolean |
Mehr behandelt als verordnet.
|
|
quota.exhausted* |
boolean |
|
|
report* |
object |
|
|
report.required* |
boolean |
|
|
report.dueAfterUnits* |
integer |
|
|
report.due* |
boolean |
|
|
report.finalized* |
boolean |
|
|
copayment* |
object |
|
|
copayment.required* |
boolean |
|
|
copayment.exempt* |
boolean |
|
|
copayment.status* |
string |
Auswahl: not_required, exempt, open, partially_paid, paid
|
|
copayment.statusLabel* |
string |
|
|
copayment.amountCents* |
integer, oder leer |
Betrag in Cent.
|
|
copayment.paidCents* |
integer |
Betrag in Cent.
|
|
copayment.outstandingCents* |
integer |
Betrag in Cent.
|
|
remedies |
Liste von Objekten |
Nur mit include=remedies.
|
|
remedies[].positionNumber* |
string, oder leer |
|
|
remedies[].name* |
string |
|
|
remedies[].kind* |
string |
Auswahl: primary, optional, supplementary, combination
|
|
remedies[].kindLabel* |
string |
|
|
remedies[].quantity* |
integer |
|
|
remedies[].frequency* |
string, oder leer |
|
|
createdAt* |
date-time, oder leer |
|
|
updatedAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
PrescriptionQuota
| Feld | Typ | Bedeutung |
|
prescriptionId* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
prescribed* |
integer |
|
|
used* |
integer |
|
|
remaining* |
integer |
|
|
exceeded* |
boolean |
|
|
exhausted* |
boolean |
|
|
reportRequired* |
boolean |
|
|
reportDueAfterUnits* |
integer |
|
|
reportDue* |
boolean |
|
|
reportFinalized* |
boolean |
|
|
completedAt* |
date-time, oder leer |
|
|
billingDeadlineOn* |
date, oder leer |
|
|
billingDeadlinePassed* |
boolean |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Problem
| Feld | Typ | Bedeutung |
|
type* |
uri |
|
|
title* |
string |
|
|
status* |
integer |
|
|
detail |
string |
|
|
instance |
string |
|
* Pflichtfeld beziehungsweise immer vorhanden.
RoomOccupancy
| Feld | Typ | Bedeutung |
|
generatedAt* |
date-time |
Zeitpunkt der Erhebung. Alle Angaben beziehen sich auf ihn.
|
|
rooms* |
Liste von Objekten |
Alle AKTIVEN Räume der Praxis - auch die freien. Ein Raum, der stillschweigend fehlte, ließe sich von einem freien nicht unterscheiden.
|
|
rooms[].id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
rooms[].name* |
string |
Bezeichnung des Raums, wie die Praxis sie führt.
|
|
rooms[].occupied* |
boolean |
Läuft in diesem Raum gerade eine Belegung? Gezählt wird der Zeitraum einschließlich Vor- und Nachbereitung - also genau das, was auch die Konfliktprüfung als belegt ansieht. Abgesagte Termine zählen nicht.
|
|
rooms[].until* |
date-time, oder leer |
Ende der laufenden Belegung, null bei freiem Raum. Bei zwei sich überschneidenden Terminen das spätere Ende.
|
|
rooms[].nextStart* |
date-time, oder leer |
Beginn der nächsten Belegung an DIESEM Tag, null wenn heute keine mehr folgt. Bewusst auf den laufenden Tag begrenzt: ein Wert von übermorgen taugt für keine Vorheizregel.
|
* Pflichtfeld beziehungsweise immer vorhanden.
Service
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
code* |
string, oder leer |
|
|
name* |
string |
|
|
description* |
string, oder leer |
|
|
unit* |
string, oder leer |
|
|
unitPriceCents* |
integer |
Nettopreis in Cent.
|
|
taxRate* |
integer |
Basispunkte, 1900 = 19,00 %.
|
|
validFrom* |
date, oder leer |
|
|
validUntil* |
date, oder leer |
|
|
active* |
boolean |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Session
| Feld | Typ | Bedeutung |
|
id* |
string |
Vollständige Sitzungskennung - sie wird zum Beenden gebraucht.
|
|
ipAddress* |
string, oder leer |
|
|
device* |
string |
|
|
lastActiveAt* |
date-time |
|
|
current* |
boolean |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Task
| Feld | Typ | Bedeutung |
|
id* |
ulid |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
title* |
string |
|
|
notes* |
string, oder leer |
|
|
status* |
string |
Auswahl: open, in_progress, done, cancelled
|
|
statusLabel* |
string |
|
|
priority* |
string |
Auswahl: low, normal, high
|
|
priorityLabel* |
string |
|
|
dueOn* |
date, oder leer |
|
|
overdue* |
boolean |
Offen und die Fälligkeit liegt vor heute.
|
|
recurring* |
boolean |
Vorkommen einer wiederkehrenden Aufgabe.
|
|
patientId* |
ulid, oder leer |
Öffentliche Kennung (ULID). Fortlaufende Zahlen gibt es nach außen nicht: sie verrieten die Größe des Datenbestands und luden zum Durchprobieren ein.
|
|
assignees* |
Liste von Objekten |
Leer heißt: niemand zuständig.
|
|
assignees[].id* |
ulid |
Kennung des Kontos.
|
|
assignees[].name* |
string |
|
|
createdBy* |
object, oder leer |
|
|
completedAt* |
date-time, oder leer |
|
|
completedBy* |
object, oder leer |
|
|
createdAt* |
date-time, oder leer |
|
|
updatedAt* |
date-time, oder leer |
|
* Pflichtfeld beziehungsweise immer vorhanden.
Kein Endpunkt und kein Objekt passt dazu.