From 74ecaff4f7cca7445d4f37c9acbff4441bab5f3a Mon Sep 17 00:00:00 2001 From: vasileios Date: Tue, 30 Aug 2022 17:27:50 +0200 Subject: [PATCH 01/21] [#755] Added both versions of brp --- src/open_inwoner/conf/base.py | 3 + src/open_inwoner/haalcentraal/signals.py | 83 +- .../ingeschrevenpersonen.999993847_1.3.json | 24 + ...> ingeschrevenpersonen.999993847_2.0.json} | 0 .../tests/files/personen_1.3.yaml | 2811 +++++++++++++++++ .../{personen.yaml => personen_2.0.yaml} | 0 .../haalcentraal/tests/test_signal.py | 58 +- 7 files changed, 2943 insertions(+), 36 deletions(-) create mode 100644 src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_1.3.json rename src/open_inwoner/haalcentraal/tests/files/{ingeschrevenpersonen.999993847.json => ingeschrevenpersonen.999993847_2.0.json} (100%) create mode 100644 src/open_inwoner/haalcentraal/tests/files/personen_1.3.yaml rename src/open_inwoner/haalcentraal/tests/files/{personen.yaml => personen_2.0.yaml} (100%) diff --git a/src/open_inwoner/conf/base.py b/src/open_inwoner/conf/base.py index 5341ffc46a..2e400a1c9c 100644 --- a/src/open_inwoner/conf/base.py +++ b/src/open_inwoner/conf/base.py @@ -874,6 +874,9 @@ MAX_UPLOAD_SIZE = 1024 ** 2 * 100 # 100MB UPLOAD_FILE_TYPES = "application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,text/plain,application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.spreadsheet,application/pdf,image/jpeg,image/png" +# HaalCentraal BRP versions (default is v2.0) +BRP_VERSION = config("BRP_VERSION", default="DEFAULT") + # # DIGID # diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index 1df4231ed6..2b00480029 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -4,6 +4,7 @@ from django.db.models.signals import pre_save from django.dispatch import receiver from django.utils.translation import gettext as _ +from django.conf import settings from glom import PathAccessError, glom from requests import RequestException @@ -18,6 +19,7 @@ def fetch_data(instance): + brp_version = settings.BRP_VERSION config = HaalCentraalConfig.get_solo() if not config.service: @@ -25,33 +27,54 @@ def fetch_data(instance): return {} client = config.service.build_client() - url = urljoin(client.base_url, "personen") - - try: - data = client.operation( - operation_id="GetPersonen", - url=url, - data={ - "fields": "naam,geboorte", - "type": "RaadpleegMetBurgerservicenummer", - "burgerservicenummer": [instance.bsn], - }, - request_kwargs=dict( - headers={"Accept": "application/hal+json"}, - ), - ) - except RequestException as e: - logger.exception("exception while making request", exc_info=e) - return {} - except ClientError as e: - logger.exception("exception while making request", exc_info=e) - return {} + + if brp_version == "ENSCHEDE" or brp_version == "DEFAULT": + url = urljoin(client.base_url, "personen") + try: + data = client.operation( + operation_id="GetPersonen", + url=url, + data={ + "fields": "naam,geboorte", + "type": "RaadpleegMetBurgerservicenummer", + "burgerservicenummer": [instance.bsn], + }, + request_kwargs=dict( + headers={"Accept": "application/hal+json"}, + ), + ) + except RequestException as e: + logger.exception("exception while making request", exc_info=e) + return {} + except ClientError as e: + logger.exception("exception while making request", exc_info=e) + return {} + + elif brp_version == "GRONINGEN": + url = urljoin(client.base_url, f"ingeschrevenpersonen/{instance.bsn}") + try: + data = client.retrieve( + "ingeschrevenpersonen", + url=url, + request_kwargs=dict( + headers={"Accept": "application/hal+json"}, + params={"fields": "naam,geboorte.datum"}, + ), + ) + except RequestException as e: + logger.exception("exception while making request", exc_info=e) + return {} + except ClientError as e: + logger.exception("exception while making request", exc_info=e) + return {} return data @receiver(pre_save, sender=User) def on_bsn_change(instance, **kwargs): + brp_version = settings.BRP_VERSION + if ( instance.bsn and instance.is_prepopulated is False @@ -59,7 +82,10 @@ def on_bsn_change(instance, **kwargs): ): system_action("Retrieving data from haal centraal based on BSN") data = fetch_data(instance) - if data.get("personen"): + + if (brp_version == "ENSCHEDE" or brp_version == "DEFAULT") and data.get( + "personen" + ): person = glom(data, "personen")[0] try: instance.first_name = glom(person, "naam.voornamen") @@ -72,3 +98,16 @@ def on_bsn_change(instance, **kwargs): ) else: system_action(_("data was retrieved from haal centraal"), instance) + + elif brp_version == "GRONINGEN" and data: + try: + instance.first_name = glom(data, "naam.voornamen") + instance.last_name = glom(data, "naam.geslachtsnaam") + instance.birthday = glom(data, "geboorte.datum.datum") + instance.is_prepopulated = True + except PathAccessError as e: + logger.exception( + "exception while trying to access fetched data", exc_info=e + ) + else: + system_action(_("data was retrieved from haal centraal"), instance) diff --git a/src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_1.3.json b/src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_1.3.json new file mode 100644 index 0000000000..7ec429e3e7 --- /dev/null +++ b/src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_1.3.json @@ -0,0 +1,24 @@ +{ + "_links": { + "self": { + "href": "https://www.haalcentraal.nl/haalcentraal/api/brp/ingeschrevenpersonen/999993847" + } + }, + "naam": { + "aanhef": "Geachte mevrouw Kooyman", + "aanschrijfwijze": "M. Kooyman", + "gebruikInLopendeTekst": "mevrouw Kooyman", + "aanduidingNaamgebruik": "eigen", + "voornamen": "Merel", + "voorletters": "M.", + "geslachtsnaam": "Kooyman" + }, + "geboorte": { + "datum": { + "datum": "1982-04-10", + "jaar": 1982, + "maand": 4, + "dag": 10 + } + } +} \ No newline at end of file diff --git a/src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847.json b/src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_2.0.json similarity index 100% rename from src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847.json rename to src/open_inwoner/haalcentraal/tests/files/ingeschrevenpersonen.999993847_2.0.json diff --git a/src/open_inwoner/haalcentraal/tests/files/personen_1.3.yaml b/src/open_inwoner/haalcentraal/tests/files/personen_1.3.yaml new file mode 100644 index 0000000000..a7e9869886 --- /dev/null +++ b/src/open_inwoner/haalcentraal/tests/files/personen_1.3.yaml @@ -0,0 +1,2811 @@ +openapi: 3.0.0 +info: + title: Bevragen Ingeschreven Personen + description: | + API voor het bevragen van ingeschreven personen uit de basisregistratie personen (BRP), inclusief de registratie niet-ingezeten (RNI). Met deze API kun je personen zoeken en actuele gegevens over personen, kinderen, partners en ouders raadplegen. + Gegevens die er niet zijn of niet actueel zijn krijg je niet terug. Heeft een persoon bijvoorbeeld geen geldige nationaliteit, en alleen een beëindigd partnerschap, dan krijg je geen gegevens over nationaliteit en partner. + Zie de [Functionele documentatie](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/tree/v1.1.0/features) voor nadere toelichting. + contact: + url: https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen + license: + name: European Union Public License, version 1.2 (EUPL-1.2) + url: https://eupl.eu/1.2/nl/ + version: 1.3.0 +servers: +- url: https://www.haalcentraal.nl/haalcentraal/api/brp + description: | + APILAB testserver +paths: + /ingeschrevenpersonen: + get: + tags: + - Ingeschreven Personen + summary: Vindt personen + description: | + Zoek personen met één van de onderstaande verplichte combinaties van parameters en vul ze evt. aan met parameters uit de andere combinaties. + Default krijg je personen terug die nog in leven zijn, tenzij je de inclusiefoverledenpersonen=true opgeeft. + Gebruik de fields parameter als je alleen specifieke velden in het antwoord wil zien, [zie functionele specificaties fields-parameter](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/fields_extensie.feature) + 1. Persoon + - geboorte__datum + - naam__geslachtsnaam (minimaal 2 karakters, [wildcard toegestaan](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature) + 2. Persoon + - verblijfplaats__gemeenteVanInschrijving + - naam__geslachtsnaam (minimaal 2 karakters, [wildcard toegestaan](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature) + 3. Persoon + - burgerservicenummer + 4. Postcode + - verblijfplaats__postcode + - verblijfplaats__huisnummer + 5. Straat + - verblijfplaats__straat (minimaal 2 karakters, [wildcard toegestaan](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature) ) + - verblijfplaats__gemeenteVanInschrijving + - verblijfplaats__huisnummer + 6. Adres + - verblijfplaats__nummeraanduidingIdentificatie + operationId: GetIngeschrevenPersonen + parameters: + - name: expand + in: query + description: Hiermee kun je opgeven welke gerelateerde resources meegeleverd + moeten worden, en hun inhoud naar behoefte aanpassen. Hele resources of + enkele properties geef je in de expand parameter kommagescheiden op. Properties + die je wil ontvangen geef je op met de resource-naam gevolgd door de property + naam, met daartussen een punt. In de definitie van het antwoord kun je bij + _embedded zien welke gerelateerde resources meegeleverd kunnen worden. Zie + [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/expand.feature). + required: false + deprecated: true + style: form + explode: true + schema: + type: string + - name: fields + in: query + description: Hiermee kun je de inhoud van de resource naar behoefte aanpassen + door een door komma's gescheiden lijst van property namen op te geven. Bij + opgave van niet-bestaande properties wordt een 400 Bad Request teruggegeven. + Wanneer de fields parameter niet is opgegeven, worden alle properties met + een waarde teruggegeven. Zie [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/fields.feature) + required: false + schema: + type: string + - name: burgerservicenummer + in: query + description: | + Uniek persoonsnummer. + required: false + style: form + explode: false + schema: + type: array + items: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: 999993653,999991723,999995078 + - name: geboorte__datum + in: query + description: | + Je kunt alleen zoeken met een volledig geboortedatum. Zie [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/parametervalidatie.feature) + required: false + style: form + explode: true + schema: + type: string + format: date + example: 1964-09-24 + - name: geboorte__plaats + in: query + description: | + Gemeentenaam of een buitenlandse plaats of een plaatsbepaling, die aangeeft waar de persoon is geboren. **Zoeken met tekstvelden is [case-Insensitive](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/case_insensitive.feature).** + required: false + style: form + explode: true + schema: + maxLength: 40 + type: string + example: Utrecht + - name: geslachtsaanduiding + in: query + description: | + Geeft aan dat de persoon een man of een vrouw is, of dat het geslacht (nog) onbekend is. + required: false + style: form + explode: true + schema: + $ref: '#/components/schemas/Geslacht_enum' + - name: inclusiefOverledenPersonen + in: query + description: | + Als je ook overleden personen in het antwoord wilt, geef dan de parameter inclusiefOverledenPersonen op met waarde True. Zie [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/overleden_personen.feature) + required: false + style: form + explode: true + schema: + type: boolean + example: true + - name: naam__geslachtsnaam + in: query + description: | + De (geslachts)naam waarvan de eventueel aanwezige voorvoegsels zijn afgesplitst. **Gebruik van de wildcard is toegestaan. Zie [feature-beschrijving](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature)** **Zoeken met tekstvelden is [case-Insensitive](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/case_insensitive.feature).** + required: false + style: form + explode: true + schema: + maxLength: 200 + type: string + example: Vries + - name: naam__voorvoegsel + in: query + description: | + Deel van de geslachtsnaam dat vooraf gaat aan de rest van de geslachtsnaam. Het zoeken op het voorvoegsel is [case-Insensitive](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/case_insensitive.feature).** + required: false + style: form + explode: true + schema: + maxLength: 10 + type: string + example: de + - name: naam__voornamen + in: query + description: | + De verzameling namen die, gescheiden door spaties, aan de geslachtsnaam voorafgaat. ** Bij deze query-parameter is het gebruik van een [wildcard](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature) toegestaan in combinatie met minimaal 2 karakters.** **Zoeken met tekstvelden is [case-Insensitive](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/case_insensitive.feature).** + required: false + style: form + explode: true + schema: + maxLength: 200 + type: string + example: Dirk + - name: verblijfplaats__gemeenteVanInschrijving + in: query + description: | + Een code die aangeeft in welke gemeente de persoon woont, of de laatste gemeente waar de persoon heeft gewoond, of de gemeente waar de persoon voor het eerst is ingeschreven. + required: false + style: form + explode: true + schema: + maxLength: 4 + type: string + example: "0518" + - name: verblijfplaats__huisletter + in: query + description: | + Een toevoeging aan een huisnummer in de vorm van een letter die door de gemeente aan een adresseerbaar object is gegeven. + required: false + style: form + explode: true + schema: + maxLength: 1 + type: string + example: a + - name: verblijfplaats__huisnummer + in: query + description: | + Een nummer dat door de gemeente aan een adresseerbaar object is gegeven. + required: false + style: form + explode: true + schema: + maximum: 99999 + type: integer + example: 14 + - name: verblijfplaats__huisnummertoevoeging + in: query + description: | + Een toevoeging aan een huisnummer of een combinatie van huisnummer en huisletter die door de gemeente aan een adresseerbaar object is gegeven. + required: false + style: form + explode: true + schema: + maxLength: 4 + type: string + example: bis + - name: verblijfplaats__nummeraanduidingIdentificatie + in: query + description: | + Unieke identificatie van een nummeraanduiding (en het bijbehorende adres) in de BAG. + required: false + style: form + explode: true + schema: + maxLength: 16 + type: string + example: "0518200000366054" + - name: verblijfplaats__straat + in: query + description: | + Een naam die door de gemeente aan een openbare ruimte is gegeven. **Gebruik van de wildcard is toegestaan. Zie [feature-beschrijving](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/wildcard.feature)** **Zoeken met tekstvelden is [case-Insensitive](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/case_insensitive.feature). + required: false + style: form + explode: true + schema: + maxLength: 80 + type: string + example: Tulpstraat + - name: verblijfplaats__postcode + in: query + description: | + De door PostNL vastgestelde code die bij een bepaalde combinatie van een straatnaam en een huisnummer hoort. + required: false + style: form + explode: true + schema: + pattern: ^[1-9]{1}[0-9]{3}[A-Z]{2}$ + type: string + example: 2341SX + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/IngeschrevenPersoonHalCollectie' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + /ingeschrevenpersonen/{burgerservicenummer}: + get: + tags: + - Ingeschreven Personen + summary: Raadpleeg een persoon + description: | + Raadpleeg een (overleden) persoon. + Gebruik de fields parameter als je alleen specifieke velden in het antwoord wil zien, [zie functionele specificaties fields-parameter](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/fields_extensie.feature). + operationId: GetIngeschrevenPersoon + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + - name: expand + in: query + description: Hiermee kun je opgeven welke gerelateerde resources meegeleverd + moeten worden, en hun inhoud naar behoefte aanpassen. Hele resources of + enkele properties geef je in de expand parameter kommagescheiden op. Properties + die je wil ontvangen geef je op met de resource-naam gevolgd door de property + naam, met daartussen een punt. In de definitie van het antwoord kun je bij + _embedded zien welke gerelateerde resources meegeleverd kunnen worden. Zie + [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/expand.feature). + required: false + deprecated: true + style: form + explode: true + schema: + type: string + - name: fields + in: query + description: Hiermee kun je de inhoud van de resource naar behoefte aanpassen + door een door komma's gescheiden lijst van property namen op te geven. Bij + opgave van niet-bestaande properties wordt een 400 Bad Request teruggegeven. + Wanneer de fields parameter niet is opgegeven, worden alle properties met + een waarde teruggegeven. Zie [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/fields.feature) + required: false + schema: + type: string + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/IngeschrevenPersoonHal' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + /ingeschrevenpersonen/{burgerservicenummer}/kinderen/{id}: + get: + tags: + - Ingeschreven Personen + summary: Raadpleeg een kind van een persoon + description: | + Raadpleeg een kind van een persoon + operationId: GetKind + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + - name: id + in: path + description: | + De identificatie van het kind. + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/KindHalBasis' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true + /ingeschrevenpersonen/{burgerservicenummer}/kinderen: + get: + tags: + - Ingeschreven Personen + summary: Levert de kinderen van een persoon + description: | + Levert de kinderen van een persoon + operationId: GetKinderen + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/KindHalCollectie' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true + /ingeschrevenpersonen/{burgerservicenummer}/ouders/{id}: + get: + tags: + - Ingeschreven Personen + summary: Raadpleeg een ouder van een persoon + description: | + Raadpleeg een ouder van een persoon + operationId: GetOuder + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + - name: id + in: path + description: | + De identificatie van de ouder. + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/OuderHalBasis' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true + /ingeschrevenpersonen/{burgerservicenummer}/ouders: + get: + tags: + - Ingeschreven Personen + summary: Levert de ouders van een persoon + description: | + Levert de ouders van een persoon + operationId: GetOuders + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/OuderHalCollectie' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "404": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true + /ingeschrevenpersonen/{burgerservicenummer}/partners/{id}: + get: + tags: + - Ingeschreven Personen + summary: Raadpleeg de partner van een persoon + description: | + Raadpleeg de partner van een persoon + operationId: GetPartner + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + - name: id + in: path + description: | + De identificatie van de partner. + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/PartnerHalBasis' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true + /ingeschrevenpersonen/{burgerservicenummer}/partners: + get: + tags: + - Ingeschreven Personen + summary: Levert de actuele partners van een persoon + description: | + Levert de actuele partners van een persoon. Partners uit beëindigde huwelijken of partnerschappen worden niet geretourneerd + operationId: GetPartners + parameters: + - name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + responses: + "200": + description: | + Zoekactie geslaagd + headers: + api-version: + $ref: '#/components/headers/api_version' + warning: + $ref: '#/components/headers/warning' + content: + application/hal+json: + schema: + $ref: '#/components/schemas/PartnerHalCollectie' + "400": + description: Bad Request + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/BadRequestFoutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1 + title: Ten minste één parameter moet worden opgegeven. + status: 400 + detail: The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modification. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: paramsRequired + invalidParams: + - type: https://www.vng.nl/realisatie/api/validaties/integer + name: verblijfplaats__huisnummer + code: integer + reason: Waarde is geen geldige integer. + "401": + description: Unauthorized + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2 + title: Niet correct geauthenticeerd. + status: 401 + detail: The request requires user authentication. The response MUST + include a WWW-Authenticate header field (section 14.47) containing + a challenge applicable to the requested resource. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: authentication + "403": + description: Forbidden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4 + title: U bent niet geautoriseerd voor deze operatie. + status: 403 + detail: The server understood the request, but is refusing to fulfill + it. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: autorisation + "404": + description: Not Found + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 + title: Opgevraagde resource bestaat niet. + status: 404 + detail: The server has not found anything matching the Request-URI. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notFound + "406": + description: Not Acceptable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7 + title: Gevraagde contenttype wordt niet ondersteund. + status: 406 + detail: The resource identified by the request is only capable of + generating response entities which have content characteristics + not acceptable according to thr accept headers sent in the request + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAcceptable + "500": + description: Internal Server Error + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 + title: Interne server fout. + status: 500 + detail: The server encountered an unexpected condition which prevented + it from fulfilling the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: serverError + "501": + description: Not Implemented + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2 + title: Not Implemented + status: 501 + detail: The server does not support the functionality required to + fulfill the request. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notImplemented + "503": + description: Service Unavailable + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + example: + type: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4 + title: Bronservice {bron} is tijdelijk niet beschikbaar. + status: 503 + detail: The service is currently unable to handle the request due + to a temporary overloading or maintenance of the server. + instance: https://datapunt.voorbeeldgemeente.nl/api/v1/resourcenaam?parameter=waarde + code: notAvailable + default: + description: Er is een onverwachte fout opgetreden + headers: + api-version: + $ref: '#/components/headers/api_version' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Foutbericht' + deprecated: true +components: + schemas: + Reisdocumentnummer: + type: string + description: | + Het nummer van het verstrekte Nederlandse reisdocument. + example: "546376728" + IngeschrevenPersoon: + type: object + properties: + burgerservicenummer: + type: string + example: "555555021" + aNummer: + type: string + description: | + Het A-nummer van de persoon + geheimhoudingPersoonsgegevens: + title: Indicatie geheim + type: boolean + description: | + Gegevens mogen niet worden verstrekt aan derden / maatschappelijke instellingen. + geslachtsaanduiding: + $ref: '#/components/schemas/Geslacht_enum' + leeftijd: + type: integer + description: | + Leeftijd in jaren op het moment van bevragen. + example: 34 + datumEersteInschrijvingGBA: + $ref: '#/components/schemas/DatumOnvolledig' + kiesrecht: + $ref: '#/components/schemas/Kiesrecht' + naam: + $ref: '#/components/schemas/NaamPersoon' + inOnderzoek: + $ref: '#/components/schemas/PersoonInOnderzoek' + nationaliteiten: + type: array + items: + $ref: '#/components/schemas/Nationaliteit' + geboorte: + $ref: '#/components/schemas/Geboorte' + opschortingBijhouding: + $ref: '#/components/schemas/OpschortingBijhouding' + overlijden: + $ref: '#/components/schemas/Overlijden' + verblijfplaats: + $ref: '#/components/schemas/Verblijfplaats' + gezagsverhouding: + $ref: '#/components/schemas/Gezagsverhouding' + verblijfstitel: + $ref: '#/components/schemas/Verblijfstitel' + reisdocumentnummers: + type: array + items: + $ref: '#/components/schemas/Reisdocumentnummer' + kinderen: + type: array + items: + $ref: '#/components/schemas/Kind' + ouders: + type: array + items: + $ref: '#/components/schemas/Ouder' + partners: + type: array + items: + $ref: '#/components/schemas/Partner' + IngeschrevenPersoonHalCollectie: + type: object + properties: + _links: + $ref: '#/components/schemas/HalCollectionLinks' + _embedded: + $ref: '#/components/schemas/IngeschrevenPersoonHalCollectieEmbedded' + IngeschrevenPersoonHalCollectieEmbedded: + type: object + properties: + ingeschrevenpersonen: + type: array + items: + $ref: '#/components/schemas/IngeschrevenPersoonHal' + IngeschrevenPersoonHalBasis: + allOf: + - $ref: '#/components/schemas/IngeschrevenPersoon' + - properties: + _links: + $ref: '#/components/schemas/IngeschrevenPersoonLinks' + IngeschrevenPersoonHal: + allOf: + - $ref: '#/components/schemas/IngeschrevenPersoonHalBasis' + - properties: + _embedded: + $ref: '#/components/schemas/IngeschrevenPersoonEmbedded' + Ouder: + type: object + properties: + burgerservicenummer: + type: string + example: "555555021" + geslachtsaanduiding: + $ref: '#/components/schemas/Geslacht_enum' + ouderAanduiding: + $ref: '#/components/schemas/OuderAanduiding_enum' + datumIngangFamilierechtelijkeBetrekking: + $ref: '#/components/schemas/DatumOnvolledig' + naam: + $ref: '#/components/schemas/Naam' + inOnderzoek: + $ref: '#/components/schemas/OuderInOnderzoek' + geboorte: + $ref: '#/components/schemas/Geboorte' + description: | + Gegevens over de ouder van de persoon. + * **datumIngangFamilierechtelijkeBetrekking** - De datum waarop de familierechtelijke betrekking is ontstaan. + OuderHalCollectie: + type: object + properties: + _links: + $ref: '#/components/schemas/HalCollectionLinks' + _embedded: + $ref: '#/components/schemas/OuderHalCollectieEmbedded' + deprecated: true + OuderHalCollectieEmbedded: + type: object + properties: + ouders: + type: array + items: + $ref: '#/components/schemas/OuderHalBasis' + deprecated: true + OuderHalBasis: + deprecated: true + allOf: + - $ref: '#/components/schemas/Ouder' + - properties: + geheimhoudingPersoonsgegevens: + title: Indicatie geheim + type: boolean + description: | + Gegevens mogen niet worden verstrekt aan derden / maarschappelijke instellingen. + _links: + $ref: '#/components/schemas/OuderLinks' + Kind: + type: object + properties: + burgerservicenummer: + type: string + example: "555555021" + leeftijd: + type: integer + description: | + Leeftijd op het moment van bevragen + example: 12 + inOnderzoek: + $ref: '#/components/schemas/KindInOnderzoek' + naam: + $ref: '#/components/schemas/Naam' + geboorte: + $ref: '#/components/schemas/Geboorte' + description: | + Gegevens over een kind van de persoon. + KindHalCollectie: + type: object + properties: + _links: + $ref: '#/components/schemas/HalCollectionLinks' + _embedded: + $ref: '#/components/schemas/KindHalCollectieEmbedded' + deprecated: true + KindHalCollectieEmbedded: + type: object + properties: + kinderen: + type: array + items: + $ref: '#/components/schemas/KindHalBasis' + deprecated: true + KindHalBasis: + deprecated: true + allOf: + - $ref: '#/components/schemas/Kind' + - properties: + geheimhoudingPersoonsgegevens: + title: Indicatie geheim + type: boolean + description: | + Gegevens mogen niet worden verstrekt aan derden/ maatschappelijke instellingen. + _links: + $ref: '#/components/schemas/KindLinks' + Partner: + type: object + properties: + burgerservicenummer: + type: string + example: "555555021" + geslachtsaanduiding: + $ref: '#/components/schemas/Geslacht_enum' + soortVerbintenis: + $ref: '#/components/schemas/SoortVerbintenis_enum' + naam: + $ref: '#/components/schemas/Naam' + geboorte: + $ref: '#/components/schemas/Geboorte' + inOnderzoek: + $ref: '#/components/schemas/PartnerInOnderzoek' + aangaanHuwelijkPartnerschap: + $ref: '#/components/schemas/AangaanHuwelijkPartnerschap' + description: | + Gegevens over een gesloten huwelijk/geregistreerd partnerschap van de persoon. + PartnerHalCollectie: + type: object + properties: + _links: + $ref: '#/components/schemas/HalCollectionLinks' + _embedded: + $ref: '#/components/schemas/PartnerHalCollectieEmbedded' + deprecated: true + PartnerHalCollectieEmbedded: + type: object + properties: + partners: + type: array + items: + $ref: '#/components/schemas/PartnerHalBasis' + deprecated: true + PartnerHalBasis: + deprecated: true + allOf: + - $ref: '#/components/schemas/Partner' + - properties: + geheimhoudingPersoonsgegevens: + title: Indicatie geheim + type: boolean + description: | + Gegevens mogen niet worden verstrekt aan derden/ maatschappelijke instellingen. + _links: + $ref: '#/components/schemas/PartnerLinks' + Naam: + type: object + properties: + geslachtsnaam: + type: string + description: | + De achternaam van een persoon. + example: Vries + voorletters: + type: string + description: | + De voorletters van de persoon, afgeleid van de voornamen. + example: P.J. + voornamen: + type: string + description: | + De verzameling namen voor de geslachtsnaam, gescheiden door spaties. + example: Pieter Jan + voorvoegsel: + type: string + example: de + adellijkeTitelPredikaat: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/NaamInOnderzoek' + NaamInOnderzoek: + type: object + properties: + geslachtsnaam: + type: boolean + voornamen: + type: boolean + voorvoegsel: + type: boolean + adellijkeTitelPredikaat: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over de naam in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + NaamPersoonInOnderzoek: + allOf: + - $ref: '#/components/schemas/NaamInOnderzoek' + - properties: + aanduidingNaamgebruik: + type: boolean + OuderInOnderzoek: + type: object + properties: + burgerservicenummer: + type: boolean + datumIngangFamilierechtelijkeBetrekking: + type: boolean + geslachtsaanduiding: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens van de de ouder in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + Geboorte: + allOf: + - $ref: '#/components/schemas/Geboortedatum' + - properties: + land: + $ref: '#/components/schemas/Waardetabel' + plaats: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/GeboorteInOnderzoek' + description: | + Gegevens over de geboorte. + * **datum** : datum waarop de persoon is geboren. + * **land** : land waar de persoon is geboren + * **plaats** : gemeente waar de persoon is geboren. Is de persoon geboren buiten Nederland, dan bevat het antwoord alleen een buitenlandse plaatsnaam of aanduiding. + GeboorteInOnderzoek: + type: object + properties: + datum: + type: boolean + land: + type: boolean + plaats: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over de geboorte van de persoon in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + Kiesrecht: + type: object + properties: + europeesKiesrecht: + type: boolean + description: | + Geeft aan of persoon een oproep moet ontvangen voor verkiezingen voor het Europees parlement. + example: true + uitgeslotenVanKiesrecht: + type: boolean + example: true + einddatumUitsluitingEuropeesKiesrecht: + $ref: '#/components/schemas/DatumOnvolledig' + einddatumUitsluitingKiesrecht: + $ref: '#/components/schemas/DatumOnvolledig' + NaamPersoon: + allOf: + - $ref: '#/components/schemas/Naam' + - properties: + aanhef: + type: string + description: | + Kun je gebruiken als aanhef in een brief gericht aan persoon. + example: Hoogwelgeboren heer + aanschrijfwijze: + type: string + description: | + Samengestelde naam die je kunt gebruiken in de communicatie met de persoon. + example: H.W. baron van den Aedel + regelVoorafgaandAanAanschrijfwijze: + type: string + description: | + Deze regel moet als aparte regel boven de aanschrijfwijze worden geplaatst. Komt alleen voor bij personen met een adellijke titel of predicaat. + example: De hoogwelgeboren heer + gebruikInLopendeTekst: + type: string + description: | + Naam van persoon die je kunt gebruiken als je in lopende tekst (bijvoorbeeld in een brief) aan persoon refereert. + example: baron Van den Aedel + aanduidingNaamgebruik: + $ref: '#/components/schemas/Naamgebruik_enum' + inOnderzoek: + $ref: '#/components/schemas/NaamPersoonInOnderzoek' + PersoonInOnderzoek: + type: object + properties: + burgerservicenummer: + type: boolean + geslachtsaanduiding: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens van de persoon in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature). + Nationaliteit: + type: object + properties: + aanduidingBijzonderNederlanderschap: + $ref: '#/components/schemas/AanduidingBijzonderNederlanderschap_enum' + datumIngangGeldigheid: + $ref: '#/components/schemas/DatumOnvolledig' + nationaliteit: + $ref: '#/components/schemas/Waardetabel' + redenOpname: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/NationaliteitInOnderzoek' + description: | + * **redenOpname** : De reden op grond waarvan de persoon de nationaliteit gekregen heeft. + NationaliteitInOnderzoek: + type: object + properties: + aanduidingBijzonderNederlanderschap: + type: boolean + nationaliteit: + type: boolean + redenOpname: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over de nationaliteit in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + OpschortingBijhouding: + type: object + properties: + reden: + $ref: '#/components/schemas/RedenOpschortingBijhouding_enum' + datum: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + * **datum**: de datum waarop de bijhouding van de persoonsgegevens is gestaakt. + Overlijden: + type: object + properties: + indicatieOverleden: + type: boolean + description: | + Geeft aan dat iemand is overleden (waarde true), ongeacht of de overlijdensdatum bekend is. + datum: + $ref: '#/components/schemas/DatumOnvolledig' + land: + $ref: '#/components/schemas/Waardetabel' + plaats: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/OverlijdenInOnderzoek' + description: | + Gegevens over het overlijden van de persoon. + * **datum** : datum waarop de persoon is overleden. + * **land** : land waar de persoon is overleden. + * **plaats** : gemeente waar de persoon is overleden. Is de persoon overleden buiten Nederland, dan bevat het antwoord alleen een buitenlandse plaatsnaam of aanduiding. + OverlijdenInOnderzoek: + type: object + properties: + datum: + type: boolean + land: + type: boolean + plaats: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over het overlijden van de persoon in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + KindInOnderzoek: + type: object + properties: + burgerservicenummer: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan of de gegevens over het kind van de persoon in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + PartnerInOnderzoek: + type: object + properties: + burgerservicenummer: + type: boolean + geslachtsaanduiding: + type: boolean + soortVerbintenis: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over het huwelijk of het partnerschap in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + AangaanHuwelijkPartnerschap: + type: object + properties: + datum: + $ref: '#/components/schemas/DatumOnvolledig' + land: + $ref: '#/components/schemas/Waardetabel' + plaats: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/AangaanHuwelijkPartnerschapInOnderzoek' + description: | + Gegevens over de voltrekking van het huwelijk of het aangaan van het geregistreerd partnerschap. + * **datum** : De datum waarop het huwelijk is voltrokken of het partnerschap is aangegaan. + * **land** : Het land waar het huwelijk is voltrokken of het partnerschap is aangegaan. + * **plaats** : De gemeente waar het huwelijk is voltrokken of het partnerschap is aangegaan. Voor een plaats buiten Nederland bevat het antwoord een buitenlandse plaatsnaam of aanduiding. + AangaanHuwelijkPartnerschapInOnderzoek: + type: object + properties: + datum: + type: boolean + land: + type: boolean + plaats: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over het voltrekken van het huwelijk of aangaan van het partnerschap in onderzoek zijn. Zie de functionele specificaties. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + Verblijfplaats: + allOf: + - $ref: '#/components/schemas/Adres' + - properties: + adresseerbaarObjectIdentificatie: + type: string + description: | + De verblijfplaats van de persoon kan een ligplaats, een standplaats of een verblijfsobject zijn. + example: "0226010000038820" + aanduidingBijHuisnummer: + $ref: '#/components/schemas/AanduidingBijHuisnummer_enum' + nummeraanduidingIdentificatie: + type: string + description: | + Unieke identificatie van een nummeraanduiding (en het bijbehorende adres) in de BAG. + example: "0518200000366054" + functieAdres: + $ref: '#/components/schemas/SoortAdres_enum' + indicatieVestigingVanuitBuitenland: + type: boolean + description: | + Geeft aan dat de ingeschreven persoon zich vanuit het buitenland heeft ingeschreven. + locatiebeschrijving: + type: string + description: | + Omschrijving van de ligging van een verblijfsobject, standplaats of ligplaats. + example: Naast de derde brug + korteNaam: + type: string + description: | + De officiële openbareruimtenaam uit de Basisregistratie Gebouwen en Adressen (BAG) of een verkorte versie. + vanuitVertrokkenOnbekendWaarheen: + type: boolean + description: | + Geeft aan dat de persoon is teruggekeerd uit een situatie van 'vertrokken onbekend waarheen.' + example: true + datumAanvangAdreshouding: + $ref: '#/components/schemas/DatumOnvolledig' + datumIngangGeldigheid: + $ref: '#/components/schemas/DatumOnvolledig' + datumInschrijvingInGemeente: + $ref: '#/components/schemas/DatumOnvolledig' + datumVestigingInNederland: + $ref: '#/components/schemas/DatumOnvolledig' + gemeenteVanInschrijving: + $ref: '#/components/schemas/Waardetabel' + landVanwaarIngeschreven: + $ref: '#/components/schemas/Waardetabel' + adresregel1: + type: string + description: | + Het eerste deel van een adres is een combinatie van de straat en huisnummer. + example: Laan van de landinrichtingscommissie Duiven-Westervoort 26A-3 + adresregel2: + type: string + description: | + Het tweede deel van een adres is een combinatie van woonplaats eventueel in combinatie met de postcode. + example: 1234AA Nootdorp + adresregel3: + type: string + description: | + Het derde deel van een adres is optioneel. Het gaat om een of meer geografische gebieden van het adres in het buitenland. + example: Selangor + vertrokkenOnbekendWaarheen: + type: boolean + description: | + Indicatie dat de ingeschreven persoon is vertrokken naar het buitenland, maar dat niet bekend is waar naar toe. + land: + $ref: '#/components/schemas/Waardetabel' + inOnderzoek: + $ref: '#/components/schemas/VerblijfplaatsInOnderzoek' + description: | + Gegevens over het verblijf of de woonlocatie van een persoon. + * **datumAanvangAdreshuishouding** : de datum van aangifte of ambtshalve melding van verblijf en adres. + * **datumIngangGeldigheid** : datum waarop de gegevens over de verblijfplaats geldig zijn geworden. + * **datumInschrijvingInGemeente**: bij inschrijving op grond van een verhuisaangifte door de burger is dit de aangiftedatum. Bij inschrijving op grond van een geboorteakte is dit de geboortedatum. Bij ambtshalve inschrijving is dit de datum waarop het voornemen van ambtshalve opneming schriftelijk aan de persoon is medegedeeld. + * **datumVestigingInNederland** : datum van inschrijving in Nederland. + * **landVanWaarIngeschreven** : het land waar de persoon woonde voor (her)vestiging in Nederland. + * **gemeenteVanInschrijving** : de gemeente waar de persoon verblijft en is ingeschreven. De code kan voorloopnullen bevatten." + VerblijfplaatsInOnderzoek: + type: object + properties: + aanduidingBijHuisnummer: + type: boolean + datumAanvangAdreshouding: + type: boolean + datumIngangGeldigheid: + type: boolean + datumInschrijvingInGemeente: + type: boolean + datumVestigingInNederland: + type: boolean + functieAdres: + type: boolean + gemeenteVanInschrijving: + type: boolean + huisletter: + type: boolean + huisnummer: + type: boolean + huisnummertoevoeging: + type: boolean + nummeraanduidingIdentificatie: + type: boolean + adresseerbaarObjectIdentificatie: + type: boolean + landVanwaarIngeschreven: + type: boolean + locatiebeschrijving: + type: boolean + straat: + type: boolean + postcode: + type: boolean + korteNaam: + type: boolean + verblijfBuitenland: + type: boolean + woonplaats: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over het verblijf en adres van de persoon in onderzoek zijn. Elementen van het GBA-adres zelf (Dat zou eigenlijk een BAG-adres moeten zijn) kunnen niet in onderzoek zijn. Wel de relatie naar de nummeraanduiding. Dat wordt gedaan door de identificatiecodeNummeraanduiding in onderzoek te zetten. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + Gezagsverhouding: + type: object + properties: + indicatieCurateleRegister: + type: boolean + description: | + Geeft aan dat de persoon onder curatele is gesteld. + example: true + indicatieGezagMinderjarige: + $ref: '#/components/schemas/IndicatieGezagMinderjarige_enum' + inOnderzoek: + $ref: '#/components/schemas/GezagsverhoudingInOnderzoek' + description: | + Gegevens over het gezag over de persoon. + GezagsverhoudingInOnderzoek: + type: object + properties: + indicatieCurateleRegister: + type: boolean + indicatieGezagMinderjarige: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens van de gezagsverhouding in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + Verblijfstitel: + type: object + properties: + aanduiding: + $ref: '#/components/schemas/Waardetabel' + datumEinde: + $ref: '#/components/schemas/DatumOnvolledig' + datumIngang: + $ref: '#/components/schemas/DatumOnvolledig' + inOnderzoek: + $ref: '#/components/schemas/VerblijfstitelInOnderzoek' + description: | + Gegevens over de verblijfsrechtelijke status van de persoon. + * **datumEinde**: Datum waarop de geldigheid van de gegevens over de verblijfstitel is beëindigd. + * **datumIngang**: Datum waarop de gegevens over de verblijfstitel geldig zijn geworden. + * **aanduiding** : Verblijfstiteltabel die aangeeft over welke verblijfsrechtelijke status de persoon beschikt. + VerblijfstitelInOnderzoek: + type: object + properties: + aanduiding: + type: boolean + datumEinde: + type: boolean + datumIngang: + type: boolean + datumIngangOnderzoek: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Geeft aan welke gegevens over de verblijfstitel in onderzoek zijn. Zie de [functionele specificaties](https://github.com/VNG-Realisatie/Haal-Centraal-BRP-bevragen/blob/v1.1.0/features/in_onderzoek.feature) + IngeschrevenPersoonLinks: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + ouders: + type: array + description: | + De ouders van de persoon. + items: + $ref: '#/components/schemas/HalLink' + reisdocumenten: + type: array + description: | + De reisdocumenten die aan de persoon zijn verstrekt. + items: + $ref: '#/components/schemas/HalLink' + kinderen: + type: array + description: | + De kinderen van de persoon. + items: + $ref: '#/components/schemas/HalLink' + partners: + type: array + description: | + De actuele bij de ingeschreven persoon geregistreerde huwelijken en geregistreerd partnerschappen. Een beëindigd huwelijk of geregistreerd partnerschap wordt niet teruggegeven. + items: + $ref: '#/components/schemas/HalLink' + partnerhistorie: + $ref: '#/components/schemas/HalLink' + verblijfplaatshistorie: + $ref: '#/components/schemas/HalLink' + verblijfstitelhistorie: + $ref: '#/components/schemas/HalLink' + nationaliteitHistorie: + $ref: '#/components/schemas/HalLink' + adres: + $ref: '#/components/schemas/HalLink' + OuderLinks: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + ingeschrevenPersoon: + $ref: '#/components/schemas/HalLink' + deprecated: true + KindLinks: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + ingeschrevenPersoon: + $ref: '#/components/schemas/HalLink' + deprecated: true + PartnerLinks: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + ingeschrevenPersoon: + $ref: '#/components/schemas/HalLink' + deprecated: true + IngeschrevenPersoonEmbedded: + type: object + properties: + ouders: + type: array + description: | + De ouders van de persoon. + items: + $ref: '#/components/schemas/OuderHalBasis' + kinderen: + type: array + description: | + De kinderen van de persoon. + items: + $ref: '#/components/schemas/KindHalBasis' + partners: + type: array + description: | + De partners van de persoon. Een beëindigd huwelijk of geregistreerd partnerschap wordt niet teruggegeven. + items: + $ref: '#/components/schemas/PartnerHalBasis' + deprecated: true + AanduidingBijzonderNederlanderschap_enum: + type: string + description: | + Geeft aan dat de persoon behandeld wordt als Nederlander, of dat door de rechter is vastgesteld dat de persoon niet de Nederlandse nationaliteit bezit + * `behandeld_als_nederlander` - B + * `vastgesteld_niet_nederlander` - V + enum: + - behandeld_als_nederlander + - vastgesteld_niet_nederlander + AanduidingBijHuisnummer_enum: + type: string + description: | + De aanduiding die wordt gebruikt voor adressen die geen straatnaam en huisnummeraanduidingen hebben + * `tegenover` - to + * `bij` - by + enum: + - tegenover + - bij + Geslacht_enum: + type: string + description: | + Geeft aan dat de persoon een man of vrouw is, of dat het geslacht (nog) onbekend is + * `man` - M + * `vrouw` - V + * `onbekend` - O + enum: + - man + - vrouw + - onbekend + IndicatieGezagMinderjarige_enum: + type: string + description: | + Geeft aan wie het gezag heeft over de minderjarige persoon. + * `ouder1` - 1 + * `ouder2` - 2 + * `derden` - D + * `ouder1_en_derde` - 1D + * `ouder2_en_derde` - 2D + * `ouder1_en_ouder2` - 12 + enum: + - ouder1 + - ouder2 + - derden + - ouder1_en_derde + - ouder2_en_derde + - ouder1_en_ouder2 + Naamgebruik_enum: + type: string + description: | + De manier waarop de geslachtsnaam van persoon en partner van persoon moet worden verwerkt in de manier waarop persoon wil worden aangesproken + * `eigen` - E - gebruik alleen de eigen naam + * `eigen_partner` - N - gebruik de eigen naam voor de partnernaam + * `partner` - P gebruik alleen de partnernaam + * `partner_eigen` - V - gebruik de partnernaam voor de eigen naam. + De aanduiding naamgebruik is verwerkt in Aanhef, Aanschrijfwijze en gebruikInLopendeTekst." + enum: + - eigen + - eigen_partner + - partner + - partner_eigen + OuderAanduiding_enum: + type: string + description: | + Geeft aan om welke ouder het gaat volgens de BRP + * `ouder1` - 1 + * `ouder2` - 2 + enum: + - ouder1 + - ouder2 + RedenOpschortingBijhouding_enum: + type: string + description: | + Redenen voor opschorting van de bijhouding + * `overlijden` - O + * `emigratie` - E + * `ministerieel_besluit` - M + * `pl_aangelegd_in_de_rni` - R - opgeschort omdat persoon is ingeschreven in het Register Niet Ingezeten (RNI). + * `fout` - F + enum: + - overlijden + - emigratie + - ministerieel_besluit + - pl_aangelegd_in_de_rni + - fout + SoortAdres_enum: + type: string + description: | + Aanduiding van het soort adres + * `woonadres` - W - adres waar de persoon woont + * `briefadres` - B - het adres van een andere persoon of van een instelling (de zogenoemde briefadresgever). Met dit adres van de briefadresgever is de persoon zonder woonadres toch bereikbaar voor de overheid. + enum: + - woonadres + - briefadres + SoortVerbintenis_enum: + type: string + description: | + Soort verbintenis die bij de burgerlijke stand is ingeschreven + * `huwelijk` - H + * `geregistreerd_partnerschap` - P + enum: + - huwelijk + - geregistreerd_partnerschap + Geboortedatum: + type: object + properties: + datum: + $ref: '#/components/schemas/DatumOnvolledig' + description: | + Gegevens over de geboorte van respectievelijk de persoon, de ouder, de echtgenoot/geregistreerd partner, de eerdere echtgenoot/geregistreerd partner of het kind. + * **datum** : Datum waarop de persoon is geboren + * **land** : Land waar de persoon is geboren + * **plaats** : De plaats waar de persoon is geboren. Voor een plaats buiten Nederland is gemeentecode=1999 (RNI) en gemeentenaam de buitenlandse plaatsnaam of aanduiding. + BadRequestFoutbericht: + allOf: + - $ref: '#/components/schemas/Foutbericht' + - type: object + properties: + invalidParams: + type: array + description: Foutmelding per fout in een parameter. Alle gevonden fouten + worden één keer teruggemeld. + items: + $ref: '#/components/schemas/InvalidParams' + Foutbericht: + type: object + properties: + type: + type: string + description: Link naar meer informatie over deze fout + format: uri + title: + type: string + description: Beschrijving van de fout + status: + type: integer + description: Http status code + detail: + type: string + description: Details over de fout + instance: + type: string + description: Uri van de aanroep die de fout heeft veroorzaakt + format: uri + code: + minLength: 1 + type: string + description: Systeemcode die het type fout aangeeft + description: Terugmelding bij een fout. JSON representatie in lijn met [RFC7807](https://tools.ietf.org/html/rfc7807). + InvalidParams: + type: object + properties: + type: + type: string + format: uri + example: https://www.vng.nl/realisatie/api/{major-versie}/validaties/integer + name: + type: string + description: Naam van de parameter + example: verblijfplaats__huisnummer + code: + minLength: 1 + type: string + description: Systeemcode die het type fout aangeeft + example: integer + reason: + type: string + description: Beschrijving van de fout op de parameterwaarde + example: Waarde is geen geldige integer. + description: Details over fouten in opgegeven parameters + DatumOnvolledig: + type: object + properties: + dag: + maximum: 31 + minimum: 1 + type: integer + description: Als de dag van de datum bekend is wordt dit element gevuld, + ook als de volledige datum bekend is. + example: 3 + datum: + type: string + description: Als de volledige datum bekend is wordt de datum gevuld die + in de date definitie past. + format: date + example: 1989-05-03 + jaar: + maximum: 9999 + type: integer + description: Als het jaar van de datum bekend is wordt dit element gevuld, + ook als de volledige datum bekend is. + example: 1989 + maand: + maximum: 12 + minimum: 1 + type: integer + description: Als de maand van een datum bekend is wordt dit element gevuld, + ook als de volledige datum bekend is. + example: 5 + description: Gegevens over de datums die mogelijk niet volledig zijn. + HalCollectionLinks: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + description: | + HalCollectionLinks bevat de self link die elke HAL Resource minimaal moet hebben in zijn _links property + HalLink: + required: + - href + type: object + properties: + href: + $ref: '#/components/schemas/Href' + templated: + type: boolean + title: + type: string + description: Voor mens leesbaar label bij de link + description: De Link Object zoals gespecificeerd in https://tools.ietf.org/html/draft-kelly-json-hal-08#section-5; + Deze link kan als templated link worden aangeboden. [URI-templating is hier + beschreven](https://github.com/VNG-Realisatie/Haal-Centraal-common/blob/v1.2.0/features/uri-templating.feature). + Href: + type: string + example: https://datapunt.voorbeeldgemeente.nl/api/v{major-versie}/resourcename/{resource-identificatie} + Waardetabel: + type: object + properties: + code: + type: string + example: "6030" + omschrijving: + type: string + example: Nederland + Adres: + type: object + properties: + straat: + title: openbareruimte naam + type: string + description: Een naam die door de gemeente aan een openbare ruimte is gegeven. + example: Laan van de landinrichtingscommissie Duiven-Westervoort + huisnummer: + type: integer + description: Een nummer dat door de gemeente aan een adresseerbaar object + is gegeven. + example: 1 + huisletter: + type: string + description: Een toevoeging aan een huisnummer in de vorm van een letter + die door de gemeente aan een adresseerbaar object is gegeven. + example: A + huisnummertoevoeging: + type: string + description: Een toevoeging aan een huisnummer of een combinatie van huisnummer + en huisletter die door de gemeente aan een adresseerbaar object is gegeven. + example: bis + postcode: + type: string + description: De door PostNL vastgestelde code die bij een bepaalde combinatie + van een straatnaam en een huisnummer hoort. + example: 6922KZ + woonplaats: + title: woonplaats naam + type: string + description: Een woonplaats is een gedeelte van het grondgebied van de gemeente + met een naam. + example: Duiven + description: 'Eigenschappen van het adres die kunnen worden hergebruikt in andere + API''s waarin adresgegevens worden opgenomen. ' + parameters: + burgerservicenummer: + name: burgerservicenummer + in: path + description: | + Uniek persoonsnummer + required: true + style: simple + explode: false + schema: + maxLength: 9 + minLength: 9 + pattern: ^[0-9]*$ + type: string + example: "555555021" + headers: + api_version: + schema: + type: string + description: Geeft een specifieke API-versie aan in de context van een specifieke + aanroep. + example: 1.0.0 + warning: + schema: + type: string + description: zie RFC 7234. In het geval een major versie wordt uitgefaseerd, + gebruiken we warn-code 299 ("Miscellaneous Persistent Warning") en het API + end-point (inclusief versienummer) als de warn-agent van de warning, gevolgd + door de warn-text met de human-readable waarschuwing + example: '299 https://service.../api/.../v1 "Deze versie van de API is verouderd + en zal uit dienst worden genomen op 2018-02-01. Raadpleeg voor meer informatie + hier de documentatie: https://omgevingswet.../api/.../v1".' \ No newline at end of file diff --git a/src/open_inwoner/haalcentraal/tests/files/personen.yaml b/src/open_inwoner/haalcentraal/tests/files/personen_2.0.yaml similarity index 100% rename from src/open_inwoner/haalcentraal/tests/files/personen.yaml rename to src/open_inwoner/haalcentraal/tests/files/personen_2.0.yaml diff --git a/src/open_inwoner/haalcentraal/tests/test_signal.py b/src/open_inwoner/haalcentraal/tests/test_signal.py index 8e94f5a6f3..9462aca6e6 100644 --- a/src/open_inwoner/haalcentraal/tests/test_signal.py +++ b/src/open_inwoner/haalcentraal/tests/test_signal.py @@ -2,7 +2,7 @@ import os from datetime import date -from django.test import TestCase +from django.test import TestCase, override_settings from django.utils.translation import gettext as _ import requests_mock @@ -41,20 +41,50 @@ def _setUpService(self): config.service = service config.save() - def _setUpMocks(self, m): + def _setUpMocks_v_2(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", status_code=200, - json=load_json_mock("ingeschrevenpersonen.999993847.json"), + json=load_json_mock("ingeschrevenpersonen.999993847_2.0.json"), ) - def test_signal_updates_users_data_when_logged_in_via_digid(self, m): - self._setUpMocks(m) + def _setUpMocks_v_1_3(self, m): + m.get( + "https://personen/api/schema/openapi.yaml?v=3", + status_code=200, + content=load_binary_mock("personen_1.3.yaml"), + ) + m.get( + "https://personen/api/brp/ingeschrevenpersonen/999993847?fields=naam,geboorte.datum", + status_code=200, + json=load_json_mock("ingeschrevenpersonen.999993847_1.3.json"), + ) + + def test_signal_updates_users_data_when_logged_in_via_digid_v_2(self, m): + self._setUpMocks_v_2(m) + self._setUpService() + + user = UserFactory( + first_name="", last_name="", login_type=LoginTypeChoices.digid + ) + user.bsn = "999993847" + user.save() + + updated_user = User.objects.filter(email=user.email) + + self.assertEqual(updated_user[0].first_name, "Merel") + self.assertEqual(updated_user[0].last_name, "Kooyman") + self.assertEqual(updated_user[0].birthday, date(1982, 4, 10)) + self.assertTrue(updated_user[0].is_prepopulated) + + @override_settings(BRP_VERSION="GRONINGEN") + def test_signal_updates_users_data_when_logged_in_via_digid_v_1_3(self, m): + self._setUpMocks_v_1_3(m) self._setUpService() user = UserFactory( @@ -71,7 +101,7 @@ def test_signal_updates_users_data_when_logged_in_via_digid(self, m): self.assertTrue(updated_user[0].is_prepopulated) def test_user_is_not_updated_without_defining_service(self, m): - self._setUpMocks(m) + self._setUpMocks_v_2(m) user = UserFactory( first_name="", last_name="", login_type=LoginTypeChoices.digid @@ -93,7 +123,7 @@ def test_user_is_not_updated_without_defining_service(self, m): self.assertFalse(updated_user[0].is_prepopulated) def test_user_is_not_updated_when_not_logged_in_via_digid(self, m): - self._setUpMocks(m) + self._setUpMocks_v_2(m) user = UserFactory( first_name="", last_name="", login_type=LoginTypeChoices.default @@ -114,7 +144,7 @@ def test_empty_response_from_haalcentraal(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", @@ -139,7 +169,7 @@ def test_user_is_not_updated_when_http_404(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", @@ -165,7 +195,7 @@ def test_user_is_not_updated_when_http_500(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", @@ -193,12 +223,12 @@ def test_signal_updates_logging(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", status_code=200, - json=load_json_mock("ingeschrevenpersonen.999993847.json"), + json=load_json_mock("ingeschrevenpersonen.999993847_2.0.json"), ) config = HaalCentraalConfig.get_solo() @@ -236,7 +266,7 @@ def test_single_entry_is_logged_when_there_is_an_error(self, m): m.get( "https://personen/api/schema/openapi.yaml?v=3", status_code=200, - content=load_binary_mock("personen.yaml"), + content=load_binary_mock("personen_2.0.yaml"), ) m.post( "https://personen/api/brp/personen", From a707ad1303d2ddae1bb32b5ea7115da634c8731c Mon Sep 17 00:00:00 2001 From: vasileios Date: Tue, 30 Aug 2022 17:33:11 +0200 Subject: [PATCH 02/21] [#755] Fixed formatting --- src/open_inwoner/haalcentraal/signals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index 2b00480029..8befec463f 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -1,10 +1,10 @@ import logging from urllib.parse import urljoin +from django.conf import settings from django.db.models.signals import pre_save from django.dispatch import receiver from django.utils.translation import gettext as _ -from django.conf import settings from glom import PathAccessError, glom from requests import RequestException From 823348c5751b68696bacb7c2ff3d652f1f6bc71d Mon Sep 17 00:00:00 2001 From: vasileios Date: Wed, 31 Aug 2022 09:58:31 +0200 Subject: [PATCH 03/21] [#755] Removed duplicate code --- src/open_inwoner/haalcentraal/signals.py | 43 +++++++++--------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index 8befec463f..a72cf5848e 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -18,8 +18,7 @@ logger = logging.getLogger(__name__) -def fetch_data(instance): - brp_version = settings.BRP_VERSION +def fetch_data(instance, brp_version): config = HaalCentraalConfig.get_solo() if not config.service: @@ -81,33 +80,21 @@ def on_bsn_change(instance, **kwargs): and instance.login_type == LoginTypeChoices.digid ): system_action("Retrieving data from haal centraal based on BSN") - data = fetch_data(instance) + data = fetch_data(instance, brp_version) if (brp_version == "ENSCHEDE" or brp_version == "DEFAULT") and data.get( "personen" ): - person = glom(data, "personen")[0] - try: - instance.first_name = glom(person, "naam.voornamen") - instance.last_name = glom(person, "naam.geslachtsnaam") - instance.birthday = glom(person, "geboorte.datum.datum") - instance.is_prepopulated = True - except PathAccessError as e: - logger.exception( - "exception while trying to access fetched data", exc_info=e - ) - else: - system_action(_("data was retrieved from haal centraal"), instance) - - elif brp_version == "GRONINGEN" and data: - try: - instance.first_name = glom(data, "naam.voornamen") - instance.last_name = glom(data, "naam.geslachtsnaam") - instance.birthday = glom(data, "geboorte.datum.datum") - instance.is_prepopulated = True - except PathAccessError as e: - logger.exception( - "exception while trying to access fetched data", exc_info=e - ) - else: - system_action(_("data was retrieved from haal centraal"), instance) + data = glom(data, "personen")[0] + + try: + instance.first_name = glom(data, "naam.voornamen") + instance.last_name = glom(data, "naam.geslachtsnaam") + instance.birthday = glom(data, "geboorte.datum.datum") + instance.is_prepopulated = True + except PathAccessError as e: + logger.exception( + "exception while trying to access fetched data", exc_info=e + ) + else: + system_action(_("data was retrieved from haal centraal"), instance) From 74d6909de6507c6da9b99e417cc4b10c8c82ef67 Mon Sep 17 00:00:00 2001 From: vasileios Date: Wed, 31 Aug 2022 16:47:21 +0200 Subject: [PATCH 04/21] [#755] Changes according to PR review --- src/open_inwoner/conf/base.py | 4 ++-- src/open_inwoner/haalcentraal/signals.py | 8 +++----- src/open_inwoner/haalcentraal/tests/test_signal.py | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/open_inwoner/conf/base.py b/src/open_inwoner/conf/base.py index 2e400a1c9c..9acf20d9bf 100644 --- a/src/open_inwoner/conf/base.py +++ b/src/open_inwoner/conf/base.py @@ -874,8 +874,8 @@ MAX_UPLOAD_SIZE = 1024 ** 2 * 100 # 100MB UPLOAD_FILE_TYPES = "application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,text/plain,application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.spreadsheet,application/pdf,image/jpeg,image/png" -# HaalCentraal BRP versions (default is v2.0) -BRP_VERSION = config("BRP_VERSION", default="DEFAULT") +# HaalCentraal BRP versions +BRP_VERSION = config("BRP_VERSION", default="2.0") # # DIGID diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index a72cf5848e..eb2c9949f1 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -27,7 +27,7 @@ def fetch_data(instance, brp_version): client = config.service.build_client() - if brp_version == "ENSCHEDE" or brp_version == "DEFAULT": + if brp_version == "2.0": url = urljoin(client.base_url, "personen") try: data = client.operation( @@ -49,7 +49,7 @@ def fetch_data(instance, brp_version): logger.exception("exception while making request", exc_info=e) return {} - elif brp_version == "GRONINGEN": + elif brp_version == "1.3": url = urljoin(client.base_url, f"ingeschrevenpersonen/{instance.bsn}") try: data = client.retrieve( @@ -82,9 +82,7 @@ def on_bsn_change(instance, **kwargs): system_action("Retrieving data from haal centraal based on BSN") data = fetch_data(instance, brp_version) - if (brp_version == "ENSCHEDE" or brp_version == "DEFAULT") and data.get( - "personen" - ): + if brp_version == "2.0" and data.get("personen"): data = glom(data, "personen")[0] try: diff --git a/src/open_inwoner/haalcentraal/tests/test_signal.py b/src/open_inwoner/haalcentraal/tests/test_signal.py index 9462aca6e6..89a8e06687 100644 --- a/src/open_inwoner/haalcentraal/tests/test_signal.py +++ b/src/open_inwoner/haalcentraal/tests/test_signal.py @@ -82,7 +82,7 @@ def test_signal_updates_users_data_when_logged_in_via_digid_v_2(self, m): self.assertEqual(updated_user[0].birthday, date(1982, 4, 10)) self.assertTrue(updated_user[0].is_prepopulated) - @override_settings(BRP_VERSION="GRONINGEN") + @override_settings(BRP_VERSION="1.3") def test_signal_updates_users_data_when_logged_in_via_digid_v_1_3(self, m): self._setUpMocks_v_1_3(m) self._setUpService() From c4cce70ca2fa47d41b9a45ee84e19e90f82e8f29 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Thu, 1 Sep 2022 10:56:25 +0000 Subject: [PATCH 05/21] Adding debugging for HC on staging --- src/open_inwoner/haalcentraal/signals.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index eb2c9949f1..73dee4d810 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -26,7 +26,7 @@ def fetch_data(instance, brp_version): return {} client = config.service.build_client() - + logger.warning(brp_version) if brp_version == "2.0": url = urljoin(client.base_url, "personen") try: @@ -40,6 +40,7 @@ def fetch_data(instance, brp_version): }, request_kwargs=dict( headers={"Accept": "application/hal+json"}, + verify=False ), ) except RequestException as e: @@ -58,6 +59,7 @@ def fetch_data(instance, brp_version): request_kwargs=dict( headers={"Accept": "application/hal+json"}, params={"fields": "naam,geboorte.datum"}, + verify=False ), ) except RequestException as e: From c08ec3e91f0f00a5df0ac9392f1427a6a11bb291 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Thu, 1 Sep 2022 14:39:20 +0200 Subject: [PATCH 06/21] Blacking --- src/open_inwoner/haalcentraal/signals.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index 73dee4d810..7e20f77f4c 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -39,8 +39,7 @@ def fetch_data(instance, brp_version): "burgerservicenummer": [instance.bsn], }, request_kwargs=dict( - headers={"Accept": "application/hal+json"}, - verify=False + headers={"Accept": "application/hal+json"}, verify=False ), ) except RequestException as e: @@ -59,7 +58,7 @@ def fetch_data(instance, brp_version): request_kwargs=dict( headers={"Accept": "application/hal+json"}, params={"fields": "naam,geboorte.datum"}, - verify=False + verify=False, ), ) except RequestException as e: From c5712254d128a38f5c9afc8c725d69b25abe718b Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Sun, 4 Sep 2022 16:07:32 +0000 Subject: [PATCH 07/21] Workarounds for eSuite integration --- src/open_inwoner/accounts/views/cases.py | 4 +- src/open_inwoner/openzaak/cases.py | 66 +++++++++++++++++++++++- src/open_inwoner/openzaak/statuses.py | 21 +++++++- 3 files changed, 85 insertions(+), 6 deletions(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index d5d5294e4a..9ab5959bfc 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -65,7 +65,7 @@ def get_context_data(self, **kwargs): { "uuid": str(case.uuid), "start_date": case.startdatum, - "end_date": case.einddatum, + "end_date": case.einddatum if hasattr(case, 'einddatum') else None, "description": case_types[case.zaaktype].omschrijving if case_types else _("No data available"), @@ -135,7 +135,7 @@ def get_context_data(self, **kwargs): context["case"] = { "start_date": case.startdatum, - "end_date": case.einddatum, + "end_date": case.einddatum if hasattr(case, 'einddatum') else None, "description": case_type.omschrijving if case_type else _("No data available"), diff --git a/src/open_inwoner/openzaak/cases.py b/src/open_inwoner/openzaak/cases.py index 22795e6501..bd984fae06 100644 --- a/src/open_inwoner/openzaak/cases.py +++ b/src/open_inwoner/openzaak/cases.py @@ -4,7 +4,7 @@ from requests import RequestException from zds_client import ClientError from zgw_consumers.api_models.base import factory -from zgw_consumers.api_models.catalogi import ZaakType +from zgw_consumers.api_models.catalogi import ZGWModel from zgw_consumers.api_models.zaken import Zaak from zgw_consumers.service import get_paginated_results @@ -12,7 +12,69 @@ logger = logging.getLogger(__name__) - +### Workaround for Groningen e-Suite #773 ### + +from dataclasses import dataclass +from datetime import date, datetime +from decimal import Decimal +from typing import List, Optional, Union + +from dateutil.parser import parse +from dateutil.relativedelta import relativedelta + + +@dataclass +class ZaakType(ZGWModel): + url: str + # catalogus: str + identificatie: str + omschrijving: str + vertrouwelijkheidaanduiding: str + doel: str + aanleiding: str + indicatie_intern_of_extern: str + handeling_initiator: str + onderwerp: str + handeling_behandelaar: str + # doorlooptijd: relativedelta + # servicenorm: Optional[relativedelta] + # opschorting_en_aanhouding_mogelijk: bool + # verlenging_mogelijk: bool + # verlengingstermijn: Optional[relativedelta] + # publicatie_indicatie: bool + # producten_of_diensten: list + statustypen: list + #resultaattypen: list + #informatieobjecttypen: list + #roltypen: list + # besluittypen: list + + #begin_geldigheid: date + # versiedatum: date + +@dataclass +class Zaak(ZGWModel): + url: str + identificatie: str + bronorganisatie: str + omschrijving: str +# toelichting: str + zaaktype: str + registratiedatum: date + startdatum: date +# einddatum: Optional[date] + einddatum_gepland: Optional[date] + uiterlijke_einddatum_afdoening: Optional[date] +# publicatiedatum: Optional[date] + vertrouwelijkheidaanduiding: str + status: str +# resultaat: str +# relevante_andere_zaken: list +# zaakgeometrie: dict + + +### ### + def fetch_cases(user_bsn: str) -> List[Zaak]: client = build_client("zaak") diff --git a/src/open_inwoner/openzaak/statuses.py b/src/open_inwoner/openzaak/statuses.py index ed0573cb0c..4320ccac1e 100644 --- a/src/open_inwoner/openzaak/statuses.py +++ b/src/open_inwoner/openzaak/statuses.py @@ -5,7 +5,7 @@ from zds_client import ClientError from zgw_consumers.api_models.base import factory from zgw_consumers.api_models.catalogi import StatusType -from zgw_consumers.api_models.zaken import Status, ZaakInformatieObject +from zgw_consumers.api_models.zaken import ZGWModel, Status from zgw_consumers.concurrent import parallel from zgw_consumers.service import get_paginated_results @@ -13,6 +13,23 @@ logger = logging.getLogger(__name__) +### Workaround for Groningen e-Suite #773 ### + +from dataclasses import dataclass +from datetime import date, datetime + +@dataclass +class ZaakInformatieObject(ZGWModel): + url: str + informatieobject: str + zaak: str + # aard_relatie_weergave: str + titel: str + # beschrijving: str + registratiedatum: datetime + +### ### + def fetch_status_history(case_url: str) -> List[Status]: client = build_client("zaak") @@ -39,7 +56,7 @@ def fetch_specific_statuses(status_urls: List[str]) -> List[Status]: if client is None: return [] - + status_urls = [u.replace("dacceptatiemidoffice", "service-tst.gateway") for u in status_urls] with parallel() as executor: _statuses = executor.map( lambda url: client.retrieve("status", url=url), From be1e0cb7f4982d1906b2c6d55e5578df3da56f9d Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Mon, 5 Sep 2022 18:12:00 +0000 Subject: [PATCH 08/21] Fixed #773 -- Adding 1-hour caching of zaaktypes, but may require further work --- src/open_inwoner/accounts/views/cases.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index 9ab5959bfc..039d482239 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -4,6 +4,7 @@ from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView +from django.core.cache import cache from view_breadcrumbs import BaseBreadcrumbMixin @@ -44,7 +45,10 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) cases = fetch_cases(self.request.user.bsn) - case_types = {case_type.url: case_type for case_type in fetch_case_types()} + case_types = cache.get('case_types') + if not case_types: + case_types = {case_type.url: case_type for case_type in fetch_case_types()} + cache.set('case_types', case_types, 60*60) status_types = { status_type.url: status_type for status_type in fetch_status_types() } From bdcd9c724471fc67a28fe7aed7bd0a37f30af11a Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Mon, 5 Sep 2022 20:20:52 +0200 Subject: [PATCH 09/21] Fixed #773 -- Removing URL rewriting, shouldn't be necessary anymore --- src/open_inwoner/openzaak/statuses.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/open_inwoner/openzaak/statuses.py b/src/open_inwoner/openzaak/statuses.py index 4320ccac1e..ee937868f3 100644 --- a/src/open_inwoner/openzaak/statuses.py +++ b/src/open_inwoner/openzaak/statuses.py @@ -5,7 +5,7 @@ from zds_client import ClientError from zgw_consumers.api_models.base import factory from zgw_consumers.api_models.catalogi import StatusType -from zgw_consumers.api_models.zaken import ZGWModel, Status +from zgw_consumers.api_models.zaken import Status, ZGWModel from zgw_consumers.concurrent import parallel from zgw_consumers.service import get_paginated_results @@ -18,6 +18,7 @@ from dataclasses import dataclass from datetime import date, datetime + @dataclass class ZaakInformatieObject(ZGWModel): url: str @@ -28,6 +29,7 @@ class ZaakInformatieObject(ZGWModel): # beschrijving: str registratiedatum: datetime + ### ### @@ -56,7 +58,7 @@ def fetch_specific_statuses(status_urls: List[str]) -> List[Status]: if client is None: return [] - status_urls = [u.replace("dacceptatiemidoffice", "service-tst.gateway") for u in status_urls] + with parallel() as executor: _statuses = executor.map( lambda url: client.retrieve("status", url=url), From 104488e6e113c6a903652dd8e0280074cac128f2 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Mon, 5 Sep 2022 20:22:53 +0200 Subject: [PATCH 10/21] Fixed #773 -- Blacking --- src/open_inwoner/accounts/views/cases.py | 10 +++++----- src/open_inwoner/openzaak/cases.py | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index 039d482239..835b72a3bd 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -1,10 +1,10 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin +from django.core.cache import cache from django.shortcuts import redirect from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView -from django.core.cache import cache from view_breadcrumbs import BaseBreadcrumbMixin @@ -45,10 +45,10 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) cases = fetch_cases(self.request.user.bsn) - case_types = cache.get('case_types') + case_types = cache.get("case_types") if not case_types: case_types = {case_type.url: case_type for case_type in fetch_case_types()} - cache.set('case_types', case_types, 60*60) + cache.set("case_types", case_types, 60 * 60) status_types = { status_type.url: status_type for status_type in fetch_status_types() } @@ -69,7 +69,7 @@ def get_context_data(self, **kwargs): { "uuid": str(case.uuid), "start_date": case.startdatum, - "end_date": case.einddatum if hasattr(case, 'einddatum') else None, + "end_date": case.einddatum if hasattr(case, "einddatum") else None, "description": case_types[case.zaaktype].omschrijving if case_types else _("No data available"), @@ -139,7 +139,7 @@ def get_context_data(self, **kwargs): context["case"] = { "start_date": case.startdatum, - "end_date": case.einddatum if hasattr(case, 'einddatum') else None, + "end_date": case.einddatum if hasattr(case, "einddatum") else None, "description": case_type.omschrijving if case_type else _("No data available"), diff --git a/src/open_inwoner/openzaak/cases.py b/src/open_inwoner/openzaak/cases.py index bd984fae06..904d926115 100644 --- a/src/open_inwoner/openzaak/cases.py +++ b/src/open_inwoner/openzaak/cases.py @@ -44,37 +44,41 @@ class ZaakType(ZGWModel): # publicatie_indicatie: bool # producten_of_diensten: list statustypen: list - #resultaattypen: list - #informatieobjecttypen: list - #roltypen: list + # resultaattypen: list + # informatieobjecttypen: list + # roltypen: list # besluittypen: list - #begin_geldigheid: date + # begin_geldigheid: date # versiedatum: date + @dataclass class Zaak(ZGWModel): url: str identificatie: str bronorganisatie: str omschrijving: str -# toelichting: str + # toelichting: str zaaktype: str registratiedatum: date startdatum: date -# einddatum: Optional[date] + # einddatum: Optional[date] einddatum_gepland: Optional[date] uiterlijke_einddatum_afdoening: Optional[date] -# publicatiedatum: Optional[date] + # publicatiedatum: Optional[date] vertrouwelijkheidaanduiding: str status: str + + # resultaat: str # relevante_andere_zaken: list # zaakgeometrie: dict ### ### - + + def fetch_cases(user_bsn: str) -> List[Zaak]: client = build_client("zaak") From 55ec9e255613ee158575a912a8d25de7eda62ca6 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Tue, 6 Sep 2022 08:13:33 +0000 Subject: [PATCH 11/21] Workaround for invalid Haal Centraal config --- src/open_inwoner/haalcentraal/signals.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index 73dee4d810..e6d1d2d051 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -27,6 +27,7 @@ def fetch_data(instance, brp_version): client = config.service.build_client() logger.warning(brp_version) + data = {} if brp_version == "2.0": url = urljoin(client.base_url, "personen") try: From 1476f3f4d9b5350f2e41a17e9f6dc2e50558a422 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Tue, 6 Sep 2022 10:58:56 +0000 Subject: [PATCH 12/21] Making certain fields optional --- .../components/templates/components/Footer/Footer.html | 2 ++ src/open_inwoner/templates/pages/product/detail.html | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/open_inwoner/components/templates/components/Footer/Footer.html b/src/open_inwoner/components/templates/components/Footer/Footer.html index a6e5b1a76d..8cf9d4cb74 100644 --- a/src/open_inwoner/components/templates/components/Footer/Footer.html +++ b/src/open_inwoner/components/templates/components/Footer/Footer.html @@ -10,7 +10,9 @@

{{footer_texts.footer_visiting_title}}

{{footer_texts.footer_visiting_intro|linebreaksbr}}

+ {% if footer_texts.footer_visiting_map %} {% button icon="arrow_forward" icon_position='before' transparent=True text=_("Bekijk op Google Maps") href=footer_texts.footer_visiting_map %} + {% endif %} diff --git a/src/open_inwoner/templates/pages/product/detail.html b/src/open_inwoner/templates/pages/product/detail.html index a31b7d8594..232b95d87b 100644 --- a/src/open_inwoner/templates/pages/product/detail.html +++ b/src/open_inwoner/templates/pages/product/detail.html @@ -123,6 +123,7 @@

{% trans 'Contact' %}

{{ contact.first_name }} {{ contact.last_name }}

{% endrender_column %} + {% if contact.phonenumber %} {% render_column span=6 %} {{ contact.role|default:_('Telefoonnummer') }} {% endrender_column %} @@ -130,14 +131,17 @@

{{ contact.first_name }} {{ contact.last_name }}

{% render_column start=7 span=6 %} {% link href='tel:'|add:contact.phonenumber text=contact.phonenumber primary=True %} {% endrender_column %} + {% endif %} + {% if contact.email %} {% render_column span=6 %}

{{ contact.organization|default:_('E-mail')}}

{% endrender_column %} {% render_column start=7 span=6 %} {% link href='mailto:'|add:contact.email text=contact.email primary=True %} - {% endrender_column %} + {% endrender_column %} + {% endif %} {% endrender_grid %} {% endfor %} {% endrender_notification %} From 1821a931f8a9c0aebac733796d5fcf471205b568 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Wed, 7 Sep 2022 19:24:15 +0000 Subject: [PATCH 13/21] Tweaks on acceptance of the statuspage --- src/open_inwoner/accounts/views/cases.py | 4 +++- src/open_inwoner/components/templatetags/dashboard_tags.py | 2 +- src/open_inwoner/templates/pages/cases/status.html | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index 835b72a3bd..66059b5040 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -138,9 +138,11 @@ def get_context_data(self, **kwargs): status.statustype = status_type context["case"] = { + "identification": case.identificatie, "start_date": case.startdatum, "end_date": case.einddatum if hasattr(case, "einddatum") else None, - "description": case_type.omschrijving + "description": case.omschrijving, + "type_description": case_type.omschrijving if case_type else _("No data available"), "current_status": statuses[-1].statustype.omschrijving diff --git a/src/open_inwoner/components/templatetags/dashboard_tags.py b/src/open_inwoner/components/templatetags/dashboard_tags.py index ad3d8b271c..8c6c597882 100644 --- a/src/open_inwoner/components/templatetags/dashboard_tags.py +++ b/src/open_inwoner/components/templatetags/dashboard_tags.py @@ -35,7 +35,7 @@ def case_dashboard(case: dict, **kwargs) -> dict: { "icon": "inventory_2", "label": _("Aanvraag"), - "value": case.get("description"), + "value": case.get("identification"), }, { "icon": "calendar_today", diff --git a/src/open_inwoner/templates/pages/cases/status.html b/src/open_inwoner/templates/pages/cases/status.html index 9d7088ced1..b9dd06b953 100644 --- a/src/open_inwoner/templates/pages/cases/status.html +++ b/src/open_inwoner/templates/pages/cases/status.html @@ -13,7 +13,7 @@ {% render_column span=9 %} {# Title/dashboard. #} -

{{ case.obj.omschrijving }}

+

{{ case.description }}

{% case_dashboard case %} {# Status history. #} @@ -26,7 +26,8 @@

{% trans 'Status' %}

{% if case.documents %}

{% trans 'Documenten' %}

{% case_document_list case.documents %} - {% endif %} + {% endif %} +

{{ case.type_description }}

{% endrender_column %} {% endrender_grid %} {% else %} From 987873b85672b6f681b0a6886dfa6a0a81e59e79 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Thu, 8 Sep 2022 08:22:02 +0000 Subject: [PATCH 14/21] Workaround for retrieving statusses without YAML ScannerError/ParseError Updating listview --- src/open_inwoner/accounts/views/cases.py | 7 ++++--- src/open_inwoner/openzaak/statuses.py | 10 ++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index 66059b5040..8963a76eb3 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -70,7 +70,8 @@ def get_context_data(self, **kwargs): "uuid": str(case.uuid), "start_date": case.startdatum, "end_date": case.einddatum if hasattr(case, "einddatum") else None, - "description": case_types[case.zaaktype].omschrijving + "description": case.omschrijving, + "zaaktype_description": case_types[case.zaaktype].omschrijving if case_types else _("No data available"), "current_status": status_types[ @@ -86,9 +87,9 @@ def get_context_data(self, **kwargs): ("#completed_apps", _("Afgeronde aanvragen")), ] - context["open_cases"] = [case for case in updated_cases if not case["end_date"]] + context["open_cases"] = [case for case in updated_cases if not case["end_date"] and not case["current_status"] == "Afgerond"] context["open_cases"].sort(key=lambda case: case["start_date"]) - context["closed_cases"] = [case for case in updated_cases if case["end_date"]] + context["closed_cases"] = [case for case in updated_cases if case["end_date"] or case["current_status"] == "Afgerond"] context["closed_cases"].sort(key=lambda case: case["end_date"]) return context diff --git a/src/open_inwoner/openzaak/statuses.py b/src/open_inwoner/openzaak/statuses.py index ee937868f3..1ac7acde87 100644 --- a/src/open_inwoner/openzaak/statuses.py +++ b/src/open_inwoner/openzaak/statuses.py @@ -59,12 +59,10 @@ def fetch_specific_statuses(status_urls: List[str]) -> List[Status]: if client is None: return [] - with parallel() as executor: - _statuses = executor.map( - lambda url: client.retrieve("status", url=url), - status_urls, - ) - + _statuses = [] + for url in status_urls: + _statuses += [client.retrieve("status", url=url)] + statuses = factory(Status, list(_statuses)) return statuses From 7aeea6bb33eec47cc8973f4fd9a370f68fb7249a Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Fri, 9 Sep 2022 15:04:18 +0000 Subject: [PATCH 15/21] Fixed #755 -- Hardcoded X-Doelbinding and X-origin-oin for now --- src/open_inwoner/haalcentraal/signals.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index e6d1d2d051..a94e6faf58 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -58,7 +58,9 @@ def fetch_data(instance, brp_version): "ingeschrevenpersonen", url=url, request_kwargs=dict( - headers={"Accept": "application/hal+json"}, + headers={"Accept": "application/hal+json", + "x-doelbinding": "Huisvesting", # See Taiga #755 + "x-origin-oin": "00000003273229750000"}, # See Taiga #755 params={"fields": "naam,geboorte.datum"}, verify=False ), From 14e5f5c3548bbad8f2cb9913bca9656e5f63a17e Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Fri, 9 Sep 2022 17:17:26 +0200 Subject: [PATCH 16/21] Blacking --- src/open_inwoner/accounts/views/cases.py | 12 ++++++++++-- src/open_inwoner/haalcentraal/signals.py | 13 +++++++------ src/open_inwoner/openzaak/statuses.py | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/open_inwoner/accounts/views/cases.py b/src/open_inwoner/accounts/views/cases.py index 8963a76eb3..243c3b5913 100644 --- a/src/open_inwoner/accounts/views/cases.py +++ b/src/open_inwoner/accounts/views/cases.py @@ -87,9 +87,17 @@ def get_context_data(self, **kwargs): ("#completed_apps", _("Afgeronde aanvragen")), ] - context["open_cases"] = [case for case in updated_cases if not case["end_date"] and not case["current_status"] == "Afgerond"] + context["open_cases"] = [ + case + for case in updated_cases + if not case["end_date"] and not case["current_status"] == "Afgerond" + ] context["open_cases"].sort(key=lambda case: case["start_date"]) - context["closed_cases"] = [case for case in updated_cases if case["end_date"] or case["current_status"] == "Afgerond"] + context["closed_cases"] = [ + case + for case in updated_cases + if case["end_date"] or case["current_status"] == "Afgerond" + ] context["closed_cases"].sort(key=lambda case: case["end_date"]) return context diff --git a/src/open_inwoner/haalcentraal/signals.py b/src/open_inwoner/haalcentraal/signals.py index a94e6faf58..2f51f5a3fc 100644 --- a/src/open_inwoner/haalcentraal/signals.py +++ b/src/open_inwoner/haalcentraal/signals.py @@ -40,8 +40,7 @@ def fetch_data(instance, brp_version): "burgerservicenummer": [instance.bsn], }, request_kwargs=dict( - headers={"Accept": "application/hal+json"}, - verify=False + headers={"Accept": "application/hal+json"}, verify=False ), ) except RequestException as e: @@ -58,11 +57,13 @@ def fetch_data(instance, brp_version): "ingeschrevenpersonen", url=url, request_kwargs=dict( - headers={"Accept": "application/hal+json", - "x-doelbinding": "Huisvesting", # See Taiga #755 - "x-origin-oin": "00000003273229750000"}, # See Taiga #755 + headers={ + "Accept": "application/hal+json", + "x-doelbinding": "Huisvesting", # See Taiga #755 + "x-origin-oin": "00000003273229750000", + }, # See Taiga #755 params={"fields": "naam,geboorte.datum"}, - verify=False + verify=False, ), ) except RequestException as e: diff --git a/src/open_inwoner/openzaak/statuses.py b/src/open_inwoner/openzaak/statuses.py index 1ac7acde87..4176001bab 100644 --- a/src/open_inwoner/openzaak/statuses.py +++ b/src/open_inwoner/openzaak/statuses.py @@ -62,7 +62,7 @@ def fetch_specific_statuses(status_urls: List[str]) -> List[Status]: _statuses = [] for url in status_urls: _statuses += [client.retrieve("status", url=url)] - + statuses = factory(Status, list(_statuses)) return statuses From b3e2cf21b6b5ffadf1e18e5da224aeeeb71e4eec Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Fri, 9 Sep 2022 19:10:57 +0200 Subject: [PATCH 17/21] Fixing ZGW/openzaak tests after modifications for e-Suite --- .../components/templatetags/file_tags.py | 2 +- src/open_inwoner/openzaak/cases.py | 2 +- src/open_inwoner/openzaak/tests/test_cases.py | 18 ++++++++++++------ .../openzaak/tests/test_statuses.py | 8 ++++++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/open_inwoner/components/templatetags/file_tags.py b/src/open_inwoner/components/templatetags/file_tags.py index eec2409775..6adfb9df18 100644 --- a/src/open_inwoner/components/templatetags/file_tags.py +++ b/src/open_inwoner/components/templatetags/file_tags.py @@ -63,7 +63,7 @@ def case_document_list(documents: list[ZaakInformatieObject], **kwargs) -> dict: files = [ { - "file": document.titel or document.beschrijving or _("Geen titel"), + "file": document.titel or _("Geen titel"), } for document in documents ] diff --git a/src/open_inwoner/openzaak/cases.py b/src/open_inwoner/openzaak/cases.py index 904d926115..c224b27210 100644 --- a/src/open_inwoner/openzaak/cases.py +++ b/src/open_inwoner/openzaak/cases.py @@ -63,12 +63,12 @@ class Zaak(ZGWModel): zaaktype: str registratiedatum: date startdatum: date - # einddatum: Optional[date] einddatum_gepland: Optional[date] uiterlijke_einddatum_afdoening: Optional[date] # publicatiedatum: Optional[date] vertrouwelijkheidaanduiding: str status: str + einddatum: Optional[date] = None # resultaat: str diff --git a/src/open_inwoner/openzaak/tests/test_cases.py b/src/open_inwoner/openzaak/tests/test_cases.py index af98db541a..cf9fec6156 100644 --- a/src/open_inwoner/openzaak/tests/test_cases.py +++ b/src/open_inwoner/openzaak/tests/test_cases.py @@ -178,14 +178,16 @@ def test_sorted_cases_are_retrieved_when_user_logged_in_via_digid(self, m): "uuid": "6f8de38f-85ea-42d3-978c-845a033335a7", "start_date": datetime.date(2021, 7, 26), "end_date": None, - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Finish", }, { "uuid": "e4d469b9-6666-4bdd-bf42-b53445298102", "start_date": datetime.date(2022, 1, 12), "end_date": None, - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Finish", }, ], @@ -197,7 +199,8 @@ def test_sorted_cases_are_retrieved_when_user_logged_in_via_digid(self, m): "uuid": "d8bbdeb7-770f-4ca9-b1ea-77b4730bf67d", "start_date": datetime.date(2022, 1, 2), "end_date": datetime.date(2022, 1, 16), - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Initial request", } ], @@ -218,14 +221,16 @@ def test_status_type_is_manually_retrieved_if_not_in_status_types(self, m): "uuid": "6f8de38f-85ea-42d3-978c-845a033335a7", "start_date": datetime.date(2021, 7, 26), "end_date": None, - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Finish", }, { "uuid": "e4d469b9-6666-4bdd-bf42-b53445298102", "start_date": datetime.date(2022, 1, 12), "end_date": None, - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Finish", }, ], @@ -237,7 +242,8 @@ def test_status_type_is_manually_retrieved_if_not_in_status_types(self, m): "uuid": "d8bbdeb7-770f-4ca9-b1ea-77b4730bf67d", "start_date": datetime.date(2022, 1, 2), "end_date": datetime.date(2022, 1, 16), - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "zaaktype_description": "Coffee zaaktype", "current_status": "Initial request", } ], diff --git a/src/open_inwoner/openzaak/tests/test_statuses.py b/src/open_inwoner/openzaak/tests/test_statuses.py index f23c710e11..bb9a1d830e 100644 --- a/src/open_inwoner/openzaak/tests/test_statuses.py +++ b/src/open_inwoner/openzaak/tests/test_statuses.py @@ -8,7 +8,7 @@ from django_webtest import WebTest from zgw_consumers.api_models.base import factory from zgw_consumers.api_models.catalogi import StatusType -from zgw_consumers.api_models.zaken import Status, ZaakInformatieObject +from zgw_consumers.api_models.zaken import Status from zgw_consumers.constants import APITypes from zgw_consumers.test import generate_oas_component, mock_service_oas_get @@ -17,6 +17,7 @@ from open_inwoner.utils.test import paginated_response from ..models import OpenZaakConfig +from ..statuses import ZaakInformatieObject from .factories import ServiceFactory ZAKEN_ROOT = "https://zaken.nl/api/v1/" @@ -27,6 +28,7 @@ @requests_mock.Mocker() class TestListStatusView(WebTest): def setUp(self): + self.maxDiff = None self.user = UserFactory( login_type=LoginTypeChoices.digid, bsn="900222086", email="johm@smith.nl" ) @@ -159,9 +161,11 @@ def test_status_is_retrieved_when_user_logged_in_via_digid(self, m): self.assertEqual( response.context.get("case"), { + "identification": "ZAAK-2022-0000000024", "start_date": datetime.date(2022, 1, 2), "end_date": None, - "description": "Coffee zaaktype", + "description": "Zaak naar aanleiding van ingezonden formulier", + "type_description": "Coffee zaaktype", "current_status": "Finish", "statuses": [status1_obj, status2_obj], "documents": [ From f8bc248a132d3f4ea321b0d9fbcf071032d4f9c0 Mon Sep 17 00:00:00 2001 From: Alex de Landgraaf Date: Mon, 12 Sep 2022 14:26:21 +0000 Subject: [PATCH 18/21] Fixed #787 -- Using clearer icon for reading the current webpage --- .../templates/components/Header/AccessibilityHeader.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/open_inwoner/components/templates/components/Header/AccessibilityHeader.html b/src/open_inwoner/components/templates/components/Header/AccessibilityHeader.html index fef8032084..f4ab5812a5 100644 --- a/src/open_inwoner/components/templates/components/Header/AccessibilityHeader.html +++ b/src/open_inwoner/components/templates/components/Header/AccessibilityHeader.html @@ -4,7 +4,7 @@