Skip to content

Commit

Permalink
✨ [open-zaak/open-notificaties#156] Kenmerk for Zaak.zaaktype.catalogus
Browse files Browse the repository at this point in the history
because this kenmerk is not part of the standard, it is marked as experimental
  • Loading branch information
stevenbal committed Sep 26, 2024
1 parent 10eef05 commit 0469d03
Show file tree
Hide file tree
Showing 3 changed files with 257 additions and 2 deletions.
190 changes: 190 additions & 0 deletions src/notificaties.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
## Notificaties
## Berichtkenmerken voor Open Zaak API

Kanalen worden typisch per component gedefinieerd. Producers versturen berichten op bepaalde kanalen,
consumers ontvangen deze. Consumers abonneren zich via een notificatiecomponent (zoals <a href="https://notificaties-api.vng.cloud/api/v1/schema/" rel="nofollow">https://notificaties-api.vng.cloud/api/v1/schema/</a>) op berichten.

Hieronder staan de kanalen beschreven die door deze component gebruikt worden, met de kenmerken bij elk bericht.

De architectuur van de notificaties staat beschreven op <a href="https://github.com/VNG-Realisatie/notificaties-api" rel="nofollow">https://github.com/VNG-Realisatie/notificaties-api</a>.


### autorisaties

**Kanaal**
`autorisaties`

**Main resource**

`applicatie`



**Kenmerken**



**Resources en acties**


* <code>applicatie</code>: create, update, destroy


### besluiten

**Kanaal**
`besluiten`

**Main resource**

`besluit`



**Kenmerken**

* `verantwoordelijke_organisatie`: Het RSIN van de niet-natuurlijk persoon zijnde de organisatie die het besluit heeft vastgesteld.
* `besluittype`: URL-referentie naar het BESLUITTYPE (in de Catalogi API).

**Resources en acties**


* <code>besluit</code>: create, update, destroy

* <code>besluitinformatieobject</code>: create, destroy


### besluittypen

**Kanaal**
`besluittypen`

**Main resource**

`besluittype`



**Kenmerken**

* `catalogus`: URL-referentie naar de CATALOGUS waartoe dit BESLUITTYPE behoort.

**Resources en acties**


* <code>besluittype</code>: create, update, destroy


### documenten

**Kanaal**
`documenten`

**Main resource**

`enkelvoudiginformatieobject`



**Kenmerken**

* `bronorganisatie`: Het RSIN van de Niet-natuurlijk persoon zijnde de organisatie die het informatieobject heeft gecreëerd of heeft ontvangen en als eerste in een samenwerkingsketen heeft vastgelegd.
* `informatieobjecttype`: URL-referentie naar het INFORMATIEOBJECTTYPE (in de Catalogi API).
* `vertrouwelijkheidaanduiding`: Aanduiding van de mate waarin het INFORMATIEOBJECT voor de openbaarheid bestemd is.

**Resources en acties**


* <code>enkelvoudiginformatieobject</code>: create, update, destroy

* <code>gebruiksrechten</code>: create, update, destroy

* <code>verzending</code>: create, update, destroy


### informatieobjecttypen

**Kanaal**
`informatieobjecttypen`

**Main resource**

`informatieobjecttype`



**Kenmerken**

* `catalogus`: URL-referentie naar de CATALOGUS waartoe dit INFORMATIEOBJECTTYPE behoort.

**Resources en acties**


* <code>informatieobjecttype</code>: create, update, destroy


### zaaktypen

**Kanaal**
`zaaktypen`

**Main resource**

`zaaktype`



**Kenmerken**

* `catalogus`: URL-referentie naar de CATALOGUS waartoe dit ZAAKTYPE behoort.

**Resources en acties**


* <code>zaaktype</code>: create, update, destroy


### zaken

**Kanaal**
`zaken`

**Main resource**

`zaak`



**Kenmerken**

* `bronorganisatie`: Het RSIN van de Niet-natuurlijk persoon zijnde de organisatie die de zaak heeft gecreeerd. Dit moet een geldig RSIN zijn van 9 nummers en voldoen aan <a href="https://nl.wikipedia.org/wiki/Burgerservicenummer#11-proef" rel="nofollow">https://nl.wikipedia.org/wiki/Burgerservicenummer#11-proef</a>
* `zaaktype`: URL-referentie naar het ZAAKTYPE (in de Catalogi API).
* `zaaktype.catalogus`: **EXPERIMENTEEL** URL-referentie naar de CATALOGUS waartoe dit ZAAKTYPE behoort.
* `vertrouwelijkheidaanduiding`: Aanduiding van de mate waarin het zaakdossier van de ZAAK voor de openbaarheid bestemd is.

**Resources en acties**


* <code>zaak</code>: create, update, destroy

* <code>status</code>: create

* <code>zaakobject</code>: create, update, destroy

* <code>zaakinformatieobject</code>: create

* <code>zaakeigenschap</code>: create, update, destroy

* <code>klantcontact</code>: create

* <code>rol</code>: create, destroy

* <code>resultaat</code>: create, update, destroy

* <code>zaakbesluit</code>: create

* <code>zaakcontactmoment</code>: create

* <code>zaakverzoek</code>: create


68 changes: 66 additions & 2 deletions src/openzaak/components/zaken/api/kanalen.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,75 @@
# SPDX-License-Identifier: EUPL-1.2
# Copyright (C) 2019 - 2020 Dimpact
from notifications_api_common.kanalen import Kanaal
from typing import Dict, cast

from django.db.models import Field, Model

from glom import glom
from notifications_api_common.kanalen import Kanaal as _Kanaal
from rest_framework.request import Request
from vng_api_common.tests import reverse

from openzaak.utils.help_text import mark_experimental

from ..models import Zaak


class Kanaal(_Kanaal):
@staticmethod
def get_field(model: Model, field: str) -> Field:
"""
Function to retrieve a field from a Model, can also be passed a path to a field
(e.g. `zaaktype.catalogus`)
"""
if "." in field:
model_field = None
bits = field.split(".")
for i, part in enumerate(bits):
model_field = model._meta.get_field(part)
if fk_field := getattr(model_field, "fk_field", None):
model_field = model._meta.get_field(fk_field)
if i != len(bits):
model = cast(Model, model_field.related_model)
assert model_field, "Could not find field on model"
return model_field
return model._meta.get_field(field)

def get_kenmerken(
self, obj: Model, data: dict | None = None, request: Request | None = None
) -> Dict:
"""
Overridden to support sending kenmerken that are not directly part of the main
resource (e.g `Zaak.zaaktype.catalogus`)
"""
data = data or {}
kenmerken = {}
for kenmerk in self.kenmerken:
value = data.get(kenmerk, glom(obj, kenmerk, default=""))
if isinstance(value, Model):
if _loose_fk_data := getattr(value, "_loose_fk_data", None):
value = _loose_fk_data["url"]
else:
value = reverse(value)
if request:
value = request.build_absolute_uri(value)
kenmerken[kenmerk] = value
return kenmerken


KANAAL_ZAKEN = Kanaal(
"zaken",
main_resource=Zaak,
kenmerken=("bronorganisatie", "zaaktype", "vertrouwelijkheidaanduiding"),
kenmerken=(
"bronorganisatie",
"zaaktype",
"zaaktype.catalogus",
"vertrouwelijkheidaanduiding",
),
extra_kwargs={
"zaaktype.catalogus": {
"help_text": mark_experimental(
"URL-referentie naar de CATALOGUS waartoe dit ZAAKTYPE behoort."
)
}
},
)
1 change: 1 addition & 0 deletions src/openzaak/components/zaken/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ info:

* `bronorganisatie`: Het RSIN van de Niet-natuurlijk persoon zijnde de organisatie die de zaak heeft gecreeerd. Dit moet een geldig RSIN zijn van 9 nummers en voldoen aan https://nl.wikipedia.org/wiki/Burgerservicenummer#11-proef
* `zaaktype`: URL-referentie naar het ZAAKTYPE (in de Catalogi API).
* `zaaktype.catalogus`: **EXPERIMENTEEL** URL-referentie naar de CATALOGUS waartoe dit ZAAKTYPE behoort.
* `vertrouwelijkheidaanduiding`: Aanduiding van de mate waarin het zaakdossier van de ZAAK voor de openbaarheid bestemd is.

**Resources en acties**
Expand Down

0 comments on commit 0469d03

Please sign in to comment.