Produktivitäts-Auswertung
Gibt Termindauer, Terminanzahl, Umsatz und Umsatz pro Behandler-Stunde zurück, gruppierbar nach Behandler, Ressource, Kurs und Zeitraum.
Die Datengrundlage und die Einschränkungen dieses Bereichs sind in der Bereichsübersicht beschrieben – insbesondere, dass hier Abrechnungsleistungen und keine Rechnungen ausgewertet werden.
Request
GET /api/oauth/v2/resource/fee-note-services/productivity
Header
| Header | Wert |
|---|---|
Authorization | Bearer {access_token} |
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
from | string (ISO-Datum) | Ja | Beginn des Zeitraums |
until | string (ISO-Datum) | Ja | Ende des Zeitraums |
groupBy | string | Nein | Kommaliste aus treatingUser, resource, course. Plus höchstens ein Zeit-Token (day, week, month, year). Standard: treatingUser,month |
treatingUserId | string (UUID) | Nein | Filtert nach Behandler |
offset | integer | Nein | Startposition (Standard: 0) |
limit | integer | Nein | Anzahl Ergebnisse (Standard: 50, Max: 200) |
Hinweis zur Sortierung: Die Zeilen kommen stabil sortiert – bei gleichem Filter und gleicher Seite liefert ein wiederholter Aufruf dieselbe Reihenfolge. Ein angefordertes Zeit-Bucket (
day,week,month,year) steht dabei vorne in der Sortierung, Zeitreihen kommen also chronologisch.
Hinweis zu gelöschten Patienten: Abrechnungsleistungen gelöschter Patienten fließen nicht mehr in die Produktivität ein, genau wie in der Umsatz-Auswertung.
Response
Erfolg (200 OK)
{
"data": [
{
"period": "2026-03",
"treatingUser": "6f1c1a2b-3c4d-5e6f-7890-abcdef123456",
"resource": null,
"course": null,
"hasAppointment": true,
"appointmentCount": 214,
"durationMinutes": 6420,
"gross": 48200.00,
"net": 48200.00,
"turnoverPerHour": 450.47
},
{
"period": "2026-03",
"treatingUser": "6f1c1a2b-3c4d-5e6f-7890-abcdef123456",
"resource": null,
"course": null,
"hasAppointment": false,
"appointmentCount": 0,
"durationMinutes": 0,
"gross": 1250.00,
"net": 1250.00,
"turnoverPerHour": null
}
],
"meta": { "total": 26, "offset": 0, "limit": 50 }
}Die zweite Zeile (hasAppointment: false) zeigt Abrechnungsleistungen ohne Terminbezug: Sie tragen zu gross/net bei, aber nicht zu durationMinutes.
Response-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
data | Array | Liste der aggregierten Produktivitätszeilen |
data[].period | string | null | Zeitraum-Bucket, Format abhängig vom Zeit-Token in groupBy, null wenn kein Zeit-Token angefordert |
data[].treatingUser | string (UUID) | null | ID des Behandlers, null wenn nicht angefordert. Nachladbar über Benutzer anzeigen |
data[].resource | string (UUID) | null | ID der Ressource (z.B. auch ein OP-Raum), null wenn nicht angefordert. Kein eigener OAuth-Endpoint zum Nachladen, siehe Konventionen |
data[].course | string (UUID) | null | ID des Kurses, null wenn nicht angefordert. Nachladbar über Kurs-Details |
data[].hasAppointment | boolean | Ob die Zeile Abrechnungsleistungen mit Terminbezug zusammenfasst (true) oder solche ohne (false) |
data[].appointmentCount | integer | Anzahl der zugrunde liegenden Termine |
data[].durationMinutes | integer | Summierte Termindauer in Minuten. 0 bei Zeilen ohne Terminbezug |
data[].gross | float | Bruttobetrag |
data[].net | float | Nettobetrag |
data[].turnoverPerHour | float | null | Umsatz pro Behandler-Stunde (gross / (durationMinutes / 60), gerundet auf zwei Stellen). null bei durationMinutes = 0 |
meta.total | integer | Gesamtanzahl der Gruppen |
meta.offset | integer | Aktuelle Startposition |
meta.limit | integer | Anzahl der zurückgegebenen Einträge |
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/fee-note-services/productivity?from=2026-01-01&until=2026-12-31&groupBy=treatingUser%2Cmonth&treatingUserId=b2c3d4e5-f6a7-8901-bcde-f01234567890&offset=0&limit=50" \
-H "Authorization: Bearer {access_token}"Mögliche Fehler
| Status | Code | Beschreibung |
|---|---|---|
| 400 | validation_error | Fehlendes oder ungültiges from/until, ungültige Dimension, mehr als ein Zeit-Token, oder Zeitraum zu lang |
| 400 | validation_error | treatingUserId ist kein gültiges UUID-Format |
| 400 | invalid_request | Der API-Zugang ist keinem Benutzer zugeordnet – ordne ihm in den Offisy-Einstellungen einen Benutzer zu |
| 401 | invalid_client | Ungültiger oder fehlender Access Token |
| 403 | insufficient_scope | Scope reports nicht vorhanden |
| 403 | access_denied | Dem Besitzer-Benutzer deines API-Zugangs fehlt die Berechtigung Report Benutzer |
| 403 | access_denied | Add-on Mandanten aktiv, aber dem Besitzer-Benutzer deines API-Zugangs ist kein Mandant zugänglich (error_description: No tenancy is accessible to this user.) |
| 404 | not_found | treatingUserId verweist auf keinen existierenden Datensatz |