Umsatz-Auswertung
Gibt aggregierten Umsatz zurück, gruppierbar nach Behandler, Leistung, Kostenstelle, Kunde, Verrechnungsstatus 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/turnover
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, insuranceService, costCenter, customer, billStatus, day, week, month, year. Höchstens ein Zeit-Token. Standard: insuranceService,month |
billStatus | string | Nein | Kommaliste aus open, invoiced, ignore, unknown (ODER-Verknüpfung). Ein anderer Wert ergibt 400 validation_error |
treatingUserId | string (UUID) | Nein | Filtert nach Behandler |
customerId | string (UUID) | Nein | Filtert nach Kunde. Erfordert zusätzlich den Scope customers |
offset | integer | Nein | Startposition (Standard: 0) |
limit | integer | Nein | Anzahl Ergebnisse (Standard: 50, Max: 200) |
Hinweis:
groupBy=customeroder ein gesetztescustomerIderfordern zusätzlich den Scopecustomers. Ohne diesen Scope antwortet der Endpoint mit403 insufficient_scope.
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 in den Umsatz ein.
Response
Erfolg (200 OK)
{
"data": [
{
"period": "2026-03",
"treatingUser": "6f1c1a2b-3c4d-5e6f-7890-abcdef123456",
"insuranceService": "3a8b1c2d-3e4f-5061-7283-94a5b6c7d8e9",
"costCenter": null,
"customer": null,
"billStatus": "invoiced",
"gross": 4820.00,
"net": 4820.00,
"quantity": 62.000,
"count": 58
},
{
"period": "2026-03",
"treatingUser": "6f1c1a2b-3c4d-5e6f-7890-abcdef123456",
"insuranceService": null,
"costCenter": null,
"customer": null,
"billStatus": "open",
"gross": 310.00,
"net": 310.00,
"quantity": 4.000,
"count": 4
}
],
"meta": { "total": 143, "offset": 0, "limit": 50 }
}"insuranceService": null ist entweder eine nicht angeforderte Dimension oder der Sammelposten für Freitext-Leistungen ohne Leistungszuordnung.
Response-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
data | Array | Liste der aggregierten Umsatzzeilen |
data[].period | string | null | Zeitraum-Bucket, Format abhängig vom Zeit-Token in groupBy (z.B. 2026-03 bei Monat), null wenn kein Zeit-Token angefordert |
data[].treatingUser | string (UUID) | null | ID des Behandlers, null wenn nicht angefordert. Nachladbar über Benutzer anzeigen |
data[].insuranceService | string (UUID) | null | ID der Leistung. null, wenn nicht angefordert oder Sammelposten für Freitext-Leistungen. Kein eigener OAuth-Endpoint zum Nachladen, siehe Konventionen |
data[].costCenter | string | null | Kostenstelle der Leistung – die „Kategorie" dieser Auswertungen, siehe Begriffsklärung. null wenn nicht angefordert |
data[].customer | string (UUID) | null | ID des Kunden, null wenn nicht angefordert. Nachladbar über Kunde anzeigen |
data[].billStatus | string | null | Verrechnungsstatus: open, invoiced, ignore, unknown, null wenn nicht angefordert |
data[].gross | float | Bruttobetrag |
data[].net | float | Nettobetrag |
data[].quantity | float | Summe der Mengen |
data[].count | integer | Anzahl der zugrunde liegenden Abrechnungsleistungen |
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/turnover?from=2026-01-01&until=2026-12-31&groupBy=insuranceService%2Cmonth&billStatus=beispiel&treatingUserId=b2c3d4e5-f6a7-8901-bcde-f01234567890&customerId=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 oder customerId 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 (bei groupBy=customer/customerId zusätzlich customers) nicht vorhanden |
| 403 | access_denied | Dem Besitzer-Benutzer deines API-Zugangs fehlt die Berechtigung Abrechnungsleistungen (Verrechnung): Journaling |
| 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 oder customerId verweist auf keinen existierenden Datensatz |