[breaking] [large] big update:

* Make stuff consistent
* camelCase everything
* re-use elements
* add checkupList and fundusByGroup
* add Terms Dictionary
EH/population-statistics-authorisation
Reinier Zwitserloot 2 years ago
parent 7c367c0e47
commit 4c5817084a
No known key found for this signature in database
GPG Key ID: DADEDCAA42950296

@ -1,24 +1,19 @@
get:
tags:
- Patient
summary: Get basic personal info not directly related to their medical dossier
summary: Get basic personal patient info not directly related to their medical dossier
parameters:
- name: agb
in: query
description: |-
The AGB code (dutch: _Algemeen Gegevens Beheer_ - unique identifier for medical professionals and GP practices) of the GP practice
whose patient population should be searched.
required: true
schema:
type: number
example: 1012345
- $ref: '../zoo-api.yaml#/components/parameters/AgbGP'
- name: bsn
in: query
description: |-
The SSN (dutch: _BSN_) of a patient to look up. May only contain digits, cannot contain more than 9 digits, and cannot be 0.
required: true
schema:
type: string
type: integer
format: int32
minimum: 1
maximum: 999999999
example: 123456789
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
@ -33,9 +28,9 @@ get:
- name
- gender
- patid
- pat_unid
- patUnid
- category
- start_date
- startDate
properties:
bsn:
$ref: '../schemas/PatIdentity.yaml#/bsn'
@ -57,14 +52,14 @@ get:
$ref: '../schemas/PatIdentity.yaml#/insurance'
patid:
$ref: '../schemas/PatIdentity.yaml#/patid'
pat_unid:
$ref: '../schemas/PatIdentity.yaml#/pat_unid'
start_date:
$ref: '../schemas/PatIdentity.yaml#/start_date'
end_date:
$ref: '../schemas/PatIdentity.yaml#/end_date'
end_reason:
$ref: '../schemas/PatIdentity.yaml#/end_reason'
patUnid:
$ref: '../schemas/PatIdentity.yaml#/patUnid'
startDate:
$ref: '../schemas/PatIdentity.yaml#/startDate'
endDate:
$ref: '../schemas/PatIdentity.yaml#/endDate'
endReason:
$ref: '../schemas/PatIdentity.yaml#/endReason'
careprograms:
$ref: '../schemas/PatIdentity.yaml#/careprograms'
'400':

@ -13,35 +13,32 @@ get:
- q - edit it a bit, can be for example 'dm' or even 'dm/dietetiek'. Send all relevant parts in one response.
- required response categories: Journaal, Bepalingen, Medicatie, episodes.
parameters:
- name: agb
in: query
description: |-
The AGB code (dutch: _Algemeen Gegevens Beheer_ - unique identifier for medical professionals and GP practices) of the GP practice
whose patient population should be searched.
required: true
schema:
type: number
example: 1012345
- $ref: '../zoo-api.yaml#/components/parameters/AgbGP'
- name: bsn
in: query
description: |-
The SSN (dutch: _BSN_) of a patient to look up. May only contain digits, cannot contain more than 9 digits, and cannot be 0.
Either `bsn` or `pu` must be present.
schema:
type: string
type: integer
format: int32
minimum: 1
maximum: 999999999
example: 123456789
- name: pu
in: query
required: false
description: |-
The Patient unique ID, as e.g. reported by `/patient/base`'s `pat_unid` response.
The Patient unique ID, as e.g. reported by `/patient/base`'s `patUnid` response.
Either `bsn` or `pu` must be present. We do not recommend including both; if this is done, _both_ filters are applied, and
patient info is only returned if a patient exists with both
patient info is only returned if a patient exists matching both.
schema:
type: string
example: ""
- name: q
in: query
required: false
description: |-
A comma-separated list of dossier aspects to query. If omitted, everything is returned.
The keys match the keys in the JSON structure that is returned on a success, such as `medication` or `measurements`.
@ -57,8 +54,11 @@ get:
- contraindications
- journals
schema:
type: string
example: "medication,measurements"
type: array
items:
type: string
minItems: 1
example: "q=medication,measurements"
- name: purpose
in: query
description: |-
@ -71,6 +71,7 @@ get:
schema:
type: string
example: diet-dm2
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'400':
$ref: '../zoo-api.yaml#/components/responses/ReqFailure'
@ -119,14 +120,14 @@ get:
$ref: '../schemas/PatIdentity.yaml#/insurance'
patid:
$ref: '../schemas/PatIdentity.yaml#/patid'
pat_unid:
$ref: '../schemas/PatIdentity.yaml#/pat_unid'
start_date:
$ref: '../schemas/PatIdentity.yaml#/start_date'
end_date:
$ref: '../schemas/PatIdentity.yaml#/end_date'
end_reason:
$ref: '../schemas/PatIdentity.yaml#/end_reason'
patUnid:
$ref: '../schemas/PatIdentity.yaml#/patUnid'
startDate:
$ref: '../schemas/PatIdentity.yaml#/startDate'
endDate:
$ref: '../schemas/PatIdentity.yaml#/endDate'
endReason:
$ref: '../schemas/PatIdentity.yaml#/endReason'
episodes:
type: array
description: |-

@ -0,0 +1,284 @@
get:
tags:
- Patient
summary: Get per-patient funduscopy status for one care group
description: |-
Returns patients that have an indication for requiring funduscopy across all practices of a care group, taking into account
the medical dossier of each patient as well as the care group's policies.
For each patient, information about their funduscopy status as well as basic personal information is provided.
This endpoint may take quite a while to respond (may take more than 5 minutes) which can cause issues with timeouts; configure your
endpoint call function appropriately and ensure intermediate proxies don't time out either.
Due to the potentially large amount of data, this endpoint rejects requests that don't support compression. A header of at least
`Accept-Encoding: gzip` is therefore required.
parameters:
- $ref: '../zoo-api.yaml#/components/parameters/AgbCareGroup'
- name: purpose
in: query
required: true
description: |-
A key describing the purpose of requesting funduscopy status of many patients.
Affects what data is supplied (for example, whether personally identifying information is provided), and whether certain
filters are applied.
* `fundus-broker` An entity that takes care of arranging appointments between patients and funduscopy professionals.
* `gp` Medical personnel reviewing their funduscopy-relevant patient population.
* `reporting` Reporting on the status of the funduscopy-relevant patient population as a whole.
The `reporting` purpose limits PII, the `fundus-broker` purpose applies filtering as per the preferences of the care group's policies.
schema:
type: string
enum: ['fundus-broker', 'gp', 'reporting']
- name: director
in: query
required: false
description: |-
If present, filter the returned population on the registered director for funduscopy.
* `gp` Returns only those patients whose most recent registration of responsible-for-funduscopy is 'The GP'.
* `specialist` Returns only those patients whose most recent registration of responsible-for-funduscopy is 'The specialist'.
* `unknown` Returns only those patients whose most recent registration of responsible-for-funduscopy is not present, registered as 'Unknown', or has an invalid registration.
If not present, no filtering is applied.
schema:
type: string
enum: ['gp', 'specialist', 'unknown', '']
- $ref: '../zoo-api.yaml#/components/parameters/Pretty'
- $ref: '../zoo-api.yaml#/components/parameters/RefDateDefaultToday'
- $ref: '../zoo-api.yaml#/components/parameters/CareGroup'
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: All patients where funduscopy status is relevant is returned.
content:
application/json:
schema:
type: object
required:
- agb
- regionName
- refDate
- practices
properties:
dict:
$ref: '../schemas/TermsDictionary.yaml'
agb:
description: |-
The same AGB as supplied via authentication or the `agb` parameter: The AGB of the care group being queried.
type: integer
format: int32
minimum: 1
maximum: 99999999
regionName:
description: |-
A human readable name describing the care group being queried (The entity whose AGB code is sent as `agb`).
type: string
refDate:
description: |-
The date used for all calculations: Any time spans are relative to this date, any measurement requirements
as stated in the care group's policies such as 'must be registered every year or cannot be considered' are applied
to this date, anything that occured after this date is ignored.
type: string
format: date
example: '2024-04-01'
practices:
description: |-
One entry for each practice that is part of this care group and participates in at least one funduscopy-related care program.
type: array
items:
type: object
required:
- agb
- name
- gpis
- patients
properties:
agb:
description: |-
The AGB code of the GP practice whose patients are provided in this object.
type: integer
format: int32
minimum: 1
maximum: 99999999
name:
description: |-
A human readable name describing the GP practice (The entity whose AGB code is sent as `agb`).
type: string
gpis:
$ref: '../schemas/GPIS.yaml'
patients:
type: array
items:
type: object
description: |-
Which patients are returned, and which Personal Identifying Information properties are sent
depends on the chosen `purpose` when making this API call.
required:
- patid
- patUnid
- doctor
- category
- fundus
properties:
bsn:
$ref: '../schemas/PatIdentity.yaml#/bsn'
name:
$ref: '../schemas/PatIdentity.yaml#/name'
gender:
$ref: '../schemas/PatIdentity.yaml#/gender'
dob:
$ref: '../schemas/PatIdentity.yaml#/dob'
category:
$ref: '../schemas/PatIdentity.yaml#/category'
doctor:
$ref: '../schemas/PatIdentity.yaml#/doctor'
address:
$ref: '../schemas/PatIdentity.yaml#/address'
contact:
$ref: '../schemas/PatIdentity.yaml#/contact'
insurance:
$ref: '../schemas/PatIdentity.yaml#/insurance'
patid:
$ref: '../schemas/PatIdentity.yaml#/patid'
patUnid:
$ref: '../schemas/PatIdentity.yaml#/patUnid'
startDate:
$ref: '../schemas/PatIdentity.yaml#/startDate'
endDate:
$ref: '../schemas/PatIdentity.yaml#/endDate'
endReason:
$ref: '../schemas/PatIdentity.yaml#/endReason'
fundus:
type: object
required:
- careprogram
- director
- lastEval
- retinoVal
- left
- right
properties:
careprogram:
description: |-
The care program that is the primary reason Funduscopy status is applicable to this patient.
type: string
example: Ouderenzorg
director:
type: object
description: |-
Contains info about the funduscopy director: Who is responsible for this patient's funduscopy care and followup?
required:
- source
- nhgResult
properties:
source:
description: |-
The aspect of the medical dossier used to determine who is director. Usually one of:
* `DMRFTZ` indicates that NHG-standard lab/measurement registration 'Regie funduscopie' is used.
* `implied` Nothing explicit is available in the medical dossier, and the default as per the policies of this care group is provided.
type: string
example: DMRFTZ
timestamp:
type: string
format: date
description: |-
If present, the medical dossier entry used to conclude the funduscopy director was measured/entered on this date.
For example, if `DMRFTZ` registration is used, the date of that measurement as per the dossier.
nhgResult:
description: |-
The director, in NHG answercode for `DMRFTZ` form, regardless of what `source` actually provided this result:
* `48` - The GP is responsible for managing funduscopy
* `49` - The specialist is responsible
* `212` - Unknown
type: integer
format: int32
enum: [48, 49, 212]
lastEval:
description: |-
The date of the last time the patient has received Funduscopy; will be `null` if no funduscopy is registered.
The most recent measurement date is provided, even if only one eye was measured on that date.
type: string
format: date
retinoVal:
description: |-
The normalized retinopathy category for the worst eye, in terms of the 2017 Retinopathy level standard (richtlijn Diabetische Retinopathie 2017).
* `-1` retinopathy level is unknown or cannot be determined.
* `0` Retinopathy level R0: No visible retinopathy.
* `1` - Retinopathy level R1: Mild background retinopathy.
* `2` - Retinopathy level R2: Pre-proliferative retinopathy.
* `3` - Retinopathy level R3: Proliferative retinopathy.
type: integer
format: int32
minimum: -1
maximum: 3
left:
description: |-
Details about specifically the left eye.
type: object
required:
- lastEval
- retinoVal
properties:
lastEval:
description: Same as previous level, specifically for left eye.
type: string
format: date
retinoVal:
description: Same as previous level, specifically for left eye.
type: integer
format: int32
minimum: -1
maximum: 3
note:
description: |-
If present, describes why this measurement is missing, unclear, or suboptimal.
For example, might mention that the result from the lab is likely available, but has not
been properly registered in the medical dossier, or that a result is available but only after
the provided `refDate`. In dutch, and human readable.
type: string
nhgCode:
description: |-
If present, the NHG memocode used to register the retinopathy level. Will be in the terms dictionary.
type: string
example: DMR7FALI
nhgResult:
description: |-
If present, the NHG result value describing the retinopathy level. Will be in the terms dictionary.
type: integer
format: int32
example: 562
right:
type: object
description: |-
Like the left eye.
required:
- lastEval
- retinoVal
properties:
lastEval:
type: string
format: date
retinoVal:
type: integer
format: int32
minimum: -1
maximum: 3
note:
type: string
nhgCode:
type: string
nhgResult:
type: integer
format: int32
'400':
description: The request is invalid; for example, it doesn't contain the required `agb` parameter.
'401':
$ref: '../zoo-api.yaml#/components/responses/JwtFailure'
'403':
description: Indicated group is known but has not authorized ZOO to share this information with signer.

@ -1,51 +1,49 @@
get:
tags:
- Population statistics
operationId: "populationStatistics"
summary: "Get a population count"
operationId: populationStatistics
summary: Get a population count
description: |-
Groups the patient population by any combination of age, preferred doctor, etc. and calculates the count of each category.
Groups the patient population by any combination of age, preferred doctor, etc. and calculates the count of each category.
parameters:
- name: referenceDate
in: query
required: true
schema:
type: "string"
pattern: "\\d\\d\\d\\d-\\d\\d-\\d\\d"
format: "date"
description: ISO formatted date
example: 2015-12-15
- $ref: '../zoo-api.yaml#/components/parameters/RefDateDefaultToday'
- name: groupByItems
in: query
required: true
style: form
explode: false
schema:
type: string
enum:
- age
- preferredDoctor
- insurer
- gender
description: "Several items can be added to the group by using a comma separated list, e.g. `groupByItems=gender,age`. If an item is twice or more repeated the first occurrence is used."
type: array
minItems: 1
items:
type: string
enum:
- age
- preferredDoctor
- insurer
- gender
description: |-
Several items can be added to the group by using a comma separated list, e.g. `groupByItems=gender,age`.
If an item is twice or more repeated the first occurrence is used.
- name: insurer
in: query
style: form
explode: false
required: false
schema:
$ref: ../schemas/insurer-Uzovi.yaml
description: "Supply zero, one or more Uzovi's to limit the responses to certain insurer. Use 0 to select all patients without insurer registered. Supply the Uzovi code as an integer in a comma separated list, e.g. `insurer=101,211,3344`."
type: array
items:
$ref: '../schemas/insurer-Uzovi.yaml'
description: |-
Supply zero, one or more Uzovis to limit the responses to certain insurer. Use 0 to select all patients without insurer registered. Supply the Uzovi code as an integer in a comma separated list, e.g. `insurer=101,211,3344`.
- name: passerBy
in: query
required: false
schema:
type: boolean
description: "True to include passer-by patients. This also includes Medicom's noni patients. (Noni = niet op naam ingeschreven.) By default passer-by patients are excluded from the response."
description: |-
`true` to include passer-by patients. This also includes Medicom's noni patients. (Noni = niet op naam ingeschreven.) By default passer-by patients are excluded from the response.
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
200:
description: "The response body is a JSON-array with for each group, defined by a sequence of `groupByItem` query parameters, an object with a count `n`. Only patients with an active registration on the reference date are included. When age is chosen as a category, only patients with a birthdate are included and only known ages are included in the response. The insurer is outputted as an Uzovi (with name and concern). The most recent Uzovi table is used to convert codes to names and concerns. If an Uzovi is missing in that table it is still added to the response, but without name and/or concern. The sequence of the items in the URL is the same as the sequence in the grouping of the output."
description: |-
The response body is a JSON-array with for each group, defined by a sequence of `groupByItem` query parameters, an object with a count `n`. Only patients with an active registration on the reference date are included. When age is chosen as a category, only patients with a birthdate are included and only known ages are included in the response. The insurer is outputted as an Uzovi (with name and concern). The most recent Uzovi table is used to convert codes to names and concerns. If an Uzovi is missing in that table it is still added to the response, but without name and/or concern. The sequence of the items in the URL is the same as the sequence in the grouping of the output.
content:
application/json:
schema:
@ -54,16 +52,34 @@ get:
type: object
properties:
age:
type: number
type: integer
minimum: 0
format: int32
example: 42
preferredDoctor:
$ref: '../schemas/PatIdentity.yaml#/doctor'
insurer:
$ref: '../schemas/PatIdentity.yaml#/insurer'
type: object
properties:
uzovi:
$ref: '../schemas/insurer-Uzovi.yaml'
name:
type: string
description: |-
The name of the insurer according the [Vektis register](https://www.vektis.nl/uzovi-register). If the Uzovi is unknown, the Uzovi code is used as the name. The latest register is used to lookup the name for the code.
example: FBTO Zorgverzekeringen N.V.
concern:
type: string
description: The concern name, if any, otherwise the empty string.
example: ACHMEA
valid:
type: boolean
description: True if the insurer can be validated using the Uzovi table on the reference date.
gender:
$ref: '../schemas/PatIdentity.yaml#/gender'
n:
type: number
type: integer
format: int32
description: "The number of unique patients in the group."
example: 7
400:

@ -1,45 +1,50 @@
get:
tags:
- Population statistics
operationId: "populationStatisticsDeprivedNeighborhood"
summary: "Patients in a deprived neighborhood"
description: "A simple report with a count of all patients living in a deprived neighborhood or regular one based on the well-known postcode table."
operationId: populationStatisticsDeprivedNeighborhood
summary: Patients in a deprived neighborhood
description: A simple report with a count of all patients living in a deprived neighborhood or regular one based on the well-known postcode table.
parameters:
- name: referenceDate
in: query
required: true
schema:
type: "string"
pattern: "\\d\\d\\d\\d-\\d\\d-\\d\\d"
format: "date"
description: ISO formatted date
example: 2015-12-15
- $ref: '../zoo-api.yaml#/components/parameters/RefDateDefaultToday'
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
200:
description: "The response body is a JSON-array with exactly three objects. Patients who are no longer registered are excluded from the response, so only patients with an active registration are included. Passer-by and NONI-patients are excluded."
description: |-
Returns the counts of all patients divided into 3 categories:
* Known to live in a deprived neighborhood
* known to live in a regular neighborhood
* Status of neighborhood unknown (for example, because living address of patient is not known or deprived status of that location is not known).
content:
application/json:
schema:
type: array
items:
oneOf:
- type: object
properties:
deprivedNeighborhood:
type: number
example: 42
- type: object
properties:
regularNeighborhood:
type: number
example: 256
- type: object
description: "When an irregular postcode is used for a patient it can't be used for determining the neighborhood. These patients are added to unknown."
properties:
unknown:
type: number
example: 3
type: object
required:
- deprived
- regular
- unknown
properties:
deprived:
description: Number of patients living in a deprived neighborhood
schema:
type: integer
format: int32
minimum: 0
example: 42
regular:
description: Number of patients living in a regular neighborhood
schema:
type: integer
format: int32
minimum: 0
example: 256
unknown:
description: Number of patients either living in an unknown location or a known location with unknown depraved status
schema:
type: integer
format: int32
minimum: 0
example: 0
400:
description: "Common HTTP semantics, see the response body."
401:

@ -2,16 +2,19 @@ get:
tags:
- Quality of Care
summary: List all available care programs
description: Includes all care programs that the user is allowed to enable or preview, i.e. even ones that shouldn't be shown by default.e
description: |-
Includes all care programs that the user is allowed to enable or preview, i.e. even ones that shouldn't be shown by default.
parameters:
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: |-
Care programs are returned.
Examples:<ul>
<li><a href="examples/qoc_careprogram.1.json">Example complete response</a></li>
<li><a href="examples/qoc_careprogram.ui_example.png">Example UI render (<em>Somewhat outdated</em>)</a></li>
</ul>
Examples:
* <a href="examples/qoc_careprogram.1.json">Example complete response</a>
* <a href="examples/qoc_careprogram.ui_example.png">Example UI render (<em>Somewhat outdated</em>)</a>
content:
application/json:
schema:

@ -9,13 +9,17 @@ put:
required: true
schema:
type: string
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
requestBody:
content:
application/x-www-form-urlencoded:
schema:
type: string
description: |-
The value `T`/`F`/`X`, respectively: "favourited", "unfavourited", "no favourite status"
One of:
* `T` favourited (show it)
* `F` - unfavourited (do not show it)
* `X` - No favourite status (show it if this entity has this program in its default set, otherwise don't).
example: T
enum:
- T

@ -0,0 +1,180 @@
get:
tags:
- Quality of Care
summary: Load call-up status for patients in a care program
description: |-
Returns each patient in a care program along with the progress on required or suggested measurements indicated for this care program.
parameters:
- name: setKey
in: path
description: The key as listed in the `CareProgram` schema.
required: true
schema:
type: string
example: ZEL-dm
- name: refDate
in: query
description: |-
The date in `2023-04-01` format; defaults to the first day in the next quarter, e.g. on april 5th 2023, defaults to `2023-07-01`.
required: false
schema:
type: string
format: date
example: 2023-04-01
- name: addr
in: query
required: false
description: Request inclusion of address information
schema:
type: boolean
- name: bsn
in: query
required: false
description: Request inclusion of BSN information (dutch social security number)
schema:
type: boolean
- name: email
in: query
required: false
description: Request inclusion of email addresses
schema:
type: boolean
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: |-
list of patients
content:
application/json:
schema:
type: object
properties:
gpis:
$ref: '../schemas/IndicatorSet.yaml#/properties/gpis'
key:
$ref: '../schemas/IndicatorSet.yaml#/properties/key'
name:
$ref: '../schemas/IndicatorSet.yaml#/properties/name'
refDate:
$ref: '../schemas/IndicatorSet.yaml#/properties/refDate'
calculating:
$ref: '../schemas/IndicatorSet.yaml#/properties/calculating'
doctors:
description: |-
Lists all relevant doctors. A doctor is relevant if they are responsible
for at least 1 patient in the list.
type: array
items:
type: object
properties:
name:
description: |-
The name (or possibly memocode; something an employee of the practice will recognize) of the general practitioner.
type: string
agb:
description: If known, the AGB code of this general practitioner.
type: integer
format: int32
minimum: 1
maximum: 99999999
required:
- name
indicators:
type: array
description: |-
One entry for each kind of measurement that (may) require call-up.
items:
type: object
properties:
title:
description: |-
The title of this indicator
type: string
example: Bloeddruk
optional:
description: |-
If present, this indicator is optional, and the value contains dutch human readable text explaining why.
type: string
example: Volgens HKN protocol is BMI meten optioneel bij Astma patiënten; echter stelt het protocol wel een relatie tussen overgewicht en de mate van klachten.
required:
- title
patients:
type: array
items:
type: object
properties:
patid:
$ref: '../schemas/PatIdentity.yaml#/patid
doctor:
type: integer
format: int32
description: |-
An index (0-based) into the `doctors` entry: This is the GP responsible for this patient.
status:
type: string
example: open
enum:
- open
description: |-
A key indicating the appointment status for this patient:
* `open` An appointment still needs to be made.
(Work in progress)
address1:
type: string
description: |-
The first line of this patient's postal address (Street name and number, generally).
city:
type: string
description: Patient lives in this city or township.
postcode:
type: string
description: Postcode of the patient.
bsn:
type: integer
minimum: 1
maximum: 999999999
format: int32
description: The BSN (dutch social security number) of the patient.
dob:
type: string
format: date
description: Date of birth of the patient.
email:
type: string
format: email
description: Email address of the patient.
state:
type: string
description: |-
A string containing 1 character for each indicator as listed in `indicators`.
This character represents the patient's call-up state for that indicator:
* `-` This indicator is not relevant for this patient; no call-up needed.
* `R` This is an optional indicator, but, the patient doesn't have this measurement.
* `0` This is a required indicator and the patient doesn't have it.
* `1` The patient has this measurement; but unless it is measured again, next quarter it'll be too long ago and no longer counts.
* `2`-`8` `2` is like `1`, except the measurement lasts for 2 quarters up to 8 quarters.
* `+` The measurement lasts for 9 or more quarters (for example, the measurement only needs to be done once ever and it has been done).
* `x` unknown situation (should not occur).
required:
- patid
- doctor
- status
- dob
- state
required:
- gpis
- key
- name
- refDate
- calculating
'401':
$ref: '../zoo-api.yaml/#/components/responses/NoAuth'
'403':
$ref: '../zoo-api.yaml#/components/responses/NoAccess'
'404':
description: The provided `setKey` doesn't refer to a valid program.

@ -17,13 +17,6 @@ get:
schema:
type: string
example: ZOO-dm2-hb-3
- name: group
in: query
description: The key as listed in the `list-groups` endpoint. Defaults to the only allowed group if the authentication party only has one; otherwise required.
required: false
schema:
type: string
example: hwf
- name: refDate
in: query
description: |-
@ -33,6 +26,8 @@ get:
type: string
format: date
example: 2023-04-01
- $ref: '../zoo-api.yaml#/components/parameters/CareGroup'
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: >-

@ -25,6 +25,7 @@ get:
type: string
format: date
example: 2023-04-01
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: >-

@ -19,15 +19,16 @@ get:
type: string
format: date
example: 2023-04-01
- $ref: '../zoo-api.yaml#/components/parameters/Authorization'
responses:
'200':
description: >-
description: |-
all data required to render an indicatorset is returned.
Examples:<ul>
<li><a href="examples/qoc_indicatorset.1.json">Example complete response</a></li>
<li><a href="examples/qoc_indicatorset.ui_example.png">Example UI render</a></li>
</ul>
Examples:
* <a href="examples/qoc_indicatorset.1.json">Example complete response</a>
* <a href="examples/qoc_indicatorset.ui_example.png">Example UI render</a>
content:
application/json:
schema:

@ -14,7 +14,7 @@ properties:
description: |-
*OPTIONAL* in dutch and in *HTML*, can consist of multiple paragraphs, but won't be more than ~5 lines or so.
type: string
example: Ketenzorg DM2 volgens de standaard werkwijze van zorgggroep ZEL.
example: Ketenzorg DM2 volgens de standaard werkwijze van zorggroep ZEL.
tags:
description: |-
A list of very short dutch strings categorizing the care program.
@ -66,9 +66,9 @@ properties:
The kind of chronic care that this care program caters to. Can be omitted in cases where this care program doesn't cover a generally
accepted protocollized chronic care condition (Often, new research).
<em>WARNING</em>: HVZ and VVR are being debated; this really is a single care program (probably called `CVRM`). This may change soon.
_WARNING_: HVZ and VVR are being debated; this really is a single care program (probably called `CVRM`). This may change soon.
<em>NOTE</em>: This list is expanded any time new care programs are introduced. API callers are encouraged not to hardcode the list
_NOTE_: This list is expanded any time new care programs are introduced. API callers are encouraged not to hardcode the list
of enumerated values, or at least be prepared to accept other values.
<dl>
@ -87,6 +87,6 @@ properties:
type: string
url:
description: |-
Only for `type: "link"` (<em>Work in progress</em>: For now also for `type: "casefinder"`).
Only for `type: "link"` (_Work in progress_: For now also for `type: "casefinder"`).
type: string
example: '/indicators/casefinder?t=dm'

@ -1,4 +1,10 @@
type: object
required:
- key
- title
- type
- style
- bars
properties:
key:
description: Unique identifier, not to be shown to the user, for referring to this indicator in other API calls
@ -11,7 +17,7 @@ properties:
type: string
example: ZEL-dm2-bp
title:
description: Short, in dutch, *HTML* (but rarely includes formatting; at most, sup/superscript).
description: Short, in dutch, plain text.
type: string
example: Prevalentie Diabetes
type:
@ -40,7 +46,9 @@ properties:
ordered list (like html `<ol>`), and it is convenient for indicators to copy this numbering scheme.
For most UI applications, simply prefix this to the title, e.g. render as `1. Title Here`.
If missing, do not show an index in the title.
type: number
type: integer
format: int32
minimum: 1
example: 1
xMin:
description: |-
@ -154,14 +162,16 @@ properties:
items:
description: >-
Each bar describes the calculated result for one entity at one measurement date. For example, an indicator box could contain 3 such entries:
<ul>
<li>The practice, this quarter.</li>
<li>The practice, previous quarter (to put this quarter into context).</li>
<li>GP group (<em>zorg groep</em>)'s results this quarter.</li>
</ul>
* The practice, this quarter.
* The practice, previous quarter (to put this quarter into context).
* GP group (<em>zorg groep</em>)'s results this quarter.
There is always at least one. The first one is the main bar, that is, what this report is reporting on; all further bars exist solely
to provide context.
type: object
required:
- segments
properties:
legend:
description: |-
@ -181,11 +191,14 @@ properties:
Place each segment in sequence in the bar. They are guaranteed to fit. The values for each part are relative to `xMin`/`xMax`, e.g.
a percentage. They may not add up to 100 - in that case, leave the remainder blank.
For example: <ul>
<li>3 segments for 'blood pressure results': 40-Good, 35-Concern, 25-Problematic.</li>
<li>1 segment for 'blood pressure has been measured': 85-Measured</li>
</ul>
For example:
* 3 segments for 'blood pressure results': 40-Good, 35-Concern, 25-Problematic.
* 1 segment for 'blood pressure has been measured': 85-Measured
type: object
required:
- style
- value
properties:
style:
description: |-

@ -2,6 +2,8 @@ description: |-
A report about a specific aspect of a care program, listing how each patient is categorized.
type: object
properties:
dict:
$ref: 'TermsDictionary.yaml'
gpis:
$ref: 'GPIS.yaml'
key:
@ -48,7 +50,7 @@ properties:
items:
type: object
properties:
pat_unid:
patUnid:
$ref: 'pat-patUnid.yaml'
bsn:
$ref: 'pat-BSN.yaml'
@ -63,7 +65,7 @@ properties:
example: |-
[NHG DMHB TZ] = [NHGA 49] op [DATE 20220223].
required:
- pat_unid
- patUnid
- bsn
- name
- dob
@ -74,4 +76,4 @@ required:
- name
- refDate
- description
- chapters
- blocks

@ -40,6 +40,9 @@ properties:
agb:
description: AGB of the GP practice, if known.
type: integer
format: int32
minimum: 1
maximum: 99999999
skipReason:
description: Human readable string describing why this GP practice is excluded (in dutch, *HTML*).
type: string

@ -1,6 +1,11 @@
description: |-
A report about a care program based on showing a number of ratios, such as 'how many people in your practice have diabetes', or 'for all diabetes patients in your care with a recent blood pressure measurement, how do these blood pressure measurements split into "problematic" / "concern" / "okay" categories
type: object
required:
- key
- name
- refDate
- calculating
properties:
gpis:
$ref: 'GPIS.yaml'
@ -13,19 +18,30 @@ properties:
type: string
example: Diabetes Mellitus type 2 per InEen 2023 accreditatie
refDate:
description: 'All calculations are done on this date (dutch: _peildatum_).'
description: 'All calculations are done based on this date (dutch: _peildatum_).'
type: string
format: date
example: 2023-04-01
calculating:
description: |-
Calculating an indicator set report takes some time; this API responds with a `calculating` value of less than 1.0 and
no `chapters` section (thus, no data). Call this endpoint a few times to get status updates. Once calculation is complete,
`1.0` will be returned and `chapters` will be provided.
format: number
minimum: 0.0
maximum: 1.0
chapters:
description: |-
Each chapter has a title and contains 1 or more indicators.
type: array
items:
type: object
required:
- title
- indicatorGroups
properties:
title:
description: In dutch, *HTML* formatted; should fit on one line.
description: In dutch, plain text formatted; should fit on one line.
type: string
example: Populatie
indicatorGroups:

@ -112,27 +112,11 @@ insurance:
example: 123456789012345
uzovi:
$ref: 'insurer-Uzovi.yaml'
insurer:
type: object
properties:
uzovi:
$ref: 'insurer-Uzovi.yaml'
name:
type: string
description: "The name of the insurer according the [Vektis register](https://www.vektis.nl/uzovi-register). If the Uzovi is unknown, the Uzovi code is used as the name. The latest register is used to lookup the name for the code."
example: "FBTO Zorgverzekeringen N.V."
concern:
type: string
description: "The concern name, if any, otherwise the empty string."
example: "ACHMEA"
valid:
type: boolean
description: "True if the insurer can be validated using the Uzovi table on the reference date."
patid:
$ref: 'pat-patId.yaml'
pat_unid:
patUnid:
$ref: 'pat-patUnid.yaml'
start_date:
startDate:
type: string
format: date
description: |-
@ -143,17 +127,17 @@ start_date:
(which is to consider this patient as part of this practice's population regardless of how far
back you want to go).
example: 1994-08-20
end_date:
endDate:
type: string
format: date
description: |-
If present, patient has exited the practice on this date. (dutch: _uitschrijf datum_).
default: ""
end_reason:
endReason:
description: |-
Reason patient left the practice (dutch: _reden vertrek_).
This property is never present if `end_date` isn't present. Otherwise, this value _might_ contain
This property is never present if `endDate` isn't present. Otherwise, this value _might_ contain
a non-blank letter as per [NHG-table-9](https://referentiemodel.nhg.org/sites/default/files/NHG-Tabel%209-Reden%20vertrek-versie-5-Inkijkexemplaar_1.pdf):
* `A` = To other practice

@ -0,0 +1,58 @@
description: |-
Provides definitions of codes used in the rest of this response.
Always sent first.
type: object
properties:
bepalingen:
description: |-
Represents measurements (such as bloodpressure) and snapshot determinations (such as 'who is responsible for Type 2 diabetes chronic care'),
based on NHG memocodes. Each key in this object is a full NHG memocode (with no spaces), and each value is an object. That object
contains a key/value pair `"wcia"` containing the NHG numeric code for that memocode, a k/v pair `"text"` containing a dutch human
readable description. If the valid values for this measurement are enumerated, a k/v pair `"nhgVal": true` is present, as well as
key `"nhg-antwoorden"` mapping to an object containing simple k/v pairs where the key contains a number and the value is a dutch human
readable description of that means, such as `"48": "Huisarts"`.
type: object
additionalProperties: true
example: |-
{
"DMHBTZ": {
"wcia": 2206,
"text": "hoofdbehandelaar diabetes",
"nhgVal": true,
"nhgAnswers": {
"48": "Huisarts",
"49": "Specialist"
}
}
}
icpc:
description: |-
Represents diagnoses and medical conditions, based on the ICPC1.1-NL standard. Keys in this object represent ICPC codes, always
formatted as a capital letter, followed by 2 digits, a dot, and 2 more digits. These map to value objects that contain 2
k/v pairs: `"text"` which contains dutch human readable text explaining what this ICPC code represents, and a `"classText"` k/v pair
containing the dutch human readable name of the class (the letter).
type: object
additionalProperties: true
example: |-
{
"T90.02": {
"text": "Diabetes mellitus type 2",
"classText": "Endocriene klieren/metabol./voeding"
}
}
atcs:
description: |-
Represents medications, mapping ATC codes to value objects containing one k/v pair: `"text"` to a dutch human readable
description of the medication. The ATC codes may represent groups of medications (less than 7 characters).
type: object
additionalProperties: true
example: |-
{
"A02AB": {
"text": "Aluminiumverbindingen"
},
"A11GA01": {
"text": "Ascorbinezuur"
}
}

@ -3,4 +3,7 @@ description: |-
A value between 0 (no insurance) and 9999; these numbers are customary rendered as 4 digits. When rendering, we suggest callers to left-pad with zeroes.
type: number
example: 0211
format: int32
minimum: 0
maximum: 9999
example: 211

@ -4,5 +4,8 @@ description: |-
It is customary that BSNs are 9 digits; this API returns a number, i.e., no leading zeroes.
API callers may want to transform this value into a string by explicitly left-padding `0`
characters to the front to make the bsn value 9 digits.
type: number
type: integer
format: int32
minimum: 0
maximum: 999999999
example: 123456789

@ -1,12 +1,12 @@
description: All relevant info about the patient's name.
type: object
properties:
display_name:
displayName:
description: |-
The full name as commonly displayed in dutch custom: initials, partner name, followed by own name.
type: string
example: M.A. van der Dussen-de Villepin
firstname:
firstName:
description: |-
Patient's first name(s), separated by spaces.
@ -22,27 +22,27 @@ properties:
the source.
type: string
example: MA
infix_own:
infixOwn:
description: |-
The prefix of the patient's own last name (what they were born with; not the name inherited from
a spouse): `van`, `de`, `van der` - a mostly uniquely dutch aspect to last names.
type: string
example: de
default: ""
own_lastname:
ownLastName:
description: |-
The patient's own last name without a prefix (what they were born with; not the name inherited from
a spouse).
type: string
example: Villepin
infix_partner:
infixPartner:
description: |-
The prefix of the patient's (ex-)spouse's last name; not all patients that are married go by their
spouse's last name and often, if they don't, this field will be blank (i.e. not sent).
type: string
example: van der
default: ""
partner_lastname:
partnerLastName:
description: |-
The the patient's (ex-)spouse's last name without prefix; not all patients that are married go by
their spouse's last name and often, if they don't, this field will be blank.

@ -10,6 +10,7 @@ description: |-
The number is guaranteed to be positive, and have at most 14 digits. We suggest using a 64-bit numeric
type to store the number; transferring this number via IEEE-double math (common, in JSON) is safe, as
the number will not exceed the range within which all whole integers are perfectly representable (~`2^52`).
type: number
type: integer
format: int64
example: 1234

@ -4,4 +4,3 @@ description: |-
if supplying HIS does not send them.
type: string
example: 1234

@ -12,7 +12,7 @@ info:
#servers:
# - url: https://tools.zorgoporde.nl/api1
# description: Production
# - url: https://test.zorgoporde.nl/api1
# - url: https://acc.zorgoporde.nl/api1
# description: Testing
security:
-
@ -41,22 +41,22 @@ tags:
As well as a 'config' view where they see _all_ care programs that could possibly be relevant for that customer, where the customer can preview the report (essentially, run the report as normal), favourite something they don't get by default, or unfavourite something they get by default.
paths:
/springboard/apps:
$ref: 'paths/springboard_apps.yaml'
/patient/dossier:
$ref: 'paths/patient_dossier.yaml'
/patient/base:
$ref: 'paths/patient_base.yaml'
/patient/fundusByGroup:
$ref: 'paths/patient_fundusByGroup.yaml'
/population/statistics:
$ref: 'paths/population_statistics.yaml'
/population/statistics/deprivedNeighborhood:
$ref: 'paths/population_statistics_deprived.yaml'
/qoc/careprogram:
$ref: 'paths/qoc_careprogram.yaml'
/qoc/careprogram/{careprogramKey}/fave:
$ref: 'paths/qoc_careprogram_{careprogramKey}_fave.yaml'
/qoc/indicatorset/{setKey}:
$ref: 'paths/qoc_indicatorset_{setKey}.yaml'
/qoc/checkupList/{setKey}:
$ref: 'paths/qoc_checkupList_{setKey}.yaml'
/qoc/indicator/{setKey}/{indicatorKey}/patients:
$ref: 'paths/qoc_indicator_{setKey}_{indicatorKey}_patients.yaml'
/qoc/indicator/{setKey}/{indicatorKey}/participants:
@ -72,20 +72,71 @@ components:
in: header
description: |-
The string `"Bearer "` followed by a single-use signed JWT token with the following mandatory claims:
<ul>
<li><code>kid</code> <strong>key id</strong>: A string identifying a trusted signer; agreed upon between user and Zorg op Orde beforehand.</li>
<li><code>iat</code> <strong>Issued at</strong>: Time when this JWT was created and signed. Must be no more than 1 hour ago.
<li><code>jti</code> <strong>JWT ID</strong>: A unique string used to prevent replay: Any given ID can not be used more than once.
<li><code>agb</code> <strong>GP AGB</strong>: AGB code (Medical entity identifier); the lookup will be done on the medical dossier data of this practice or entity.
<li><code>exp</code> <em>OPTIONAL</em> <strong>Expires at</strong>: If included, the request must not be received after this time.
<li><code>nbf</code> <em>OPTIONAL</em> <strong>Not before</strong>: If included, the request must not be received before this time.
</ul>
The JWT must be signed, preferably with <code>HS256</code>.
* `kid` **key id**: A string identifying a trusted signer; agreed upon between user and Zorg op Orde beforehand.</li>
* `iat` **Issued at**: Time when this JWT was created and signed. Must be no more than 1 hour ago.
* `jti` **JWT ID**: A unique string used to prevent replay: Any given ID can not be used more than once.
* `agb` **GP AGB**: AGB code (Medical entity identifier); the lookup will be done on the medical dossier data of this practice or entity.
* `exp` _OPTIONAL_ **Expires at**: If included, the request must not be received after this time.
* `nbf` _OPTIONAL_ **Not before**: If included, the request must not be received before this time.
The JWT must be signed, preferably with `HS256`.
required: true
schema:
type: string
example: >-
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJraWQiOiJaT08tQVBJLVBLSS1JRCIsImFnYiI6IjAxMDEyMzQ1IiwiaWF0IjoxNTE2MjM5MDIyLCJqdGkiOiJ0MTIzNC01Njc4LUFCQ0QifQ.wTesCfFTq1Mz8z7hUWU6zzKSc3dopWnpeETR7eDzFtc
AgbGP:
name: agb
in: query
description: |-
The AGB code (dutch: _Algemeen Gegevens Beheer_ - unique identifier for medical professionals and GP practices) of the GP practice.
This value can be a claim in the JWT (preferred), or, if no `agb` claim exists in the authenticating JWT token, it must be a query parameter.
The JWT token must be authorized for this entity.
required: false
schema:
type: integer
minimum: 1
maximum: 99999999
AgbCareGroup:
name: agb
in: query
description: |-
The AGB code (dutch: _Algemeen Gegevens Beheer_ - unique identifier for medical professionals and GP practices) of the entity
that represents multiple GP practices. This value can be a claim in the JWT (preferred), or, if no `agb` claim exists in the
authenticating JWT token, it must be a query parameter. The JWT token must be authorized for this entity.
required: false
schema:
type: integer
minimum: 1
maximum: 99999999
Pretty:
name: pretty
in: query
description: If `true` the emitted JSON is pretty-printed. Use only for debugging purposes.
schema:
type: boolean
default: false
RefDateDefaultToday:
name: refDate
in: query
description: |-
If present, the date used as context (any measurements available done afterwards aren't taken into account, any expiry calculations
use this date as reference, and so forth).
Defaults to today.
schema:
type: string
format: date
example: '2024-04-01'
CareGroup:
name: group
in: query
description: |-
The 'key' for the care group you want to retrieve data for. Providing this parameter is pointless unless the AGB code supplied
via the `agb` parameter is responsible for more than one care group which is rare. A list of valid groups can be obtained via
the `list-groups` endpoint.
required: false
schema:
type: string
responses:
ReqFailure:
description: |-

Loading…
Cancel
Save