diff --git a/src/openklant/components/klantinteracties/admin/digitaal_adres.py b/src/openklant/components/klantinteracties/admin/digitaal_adres.py index 8f784632..c5a6cdec 100644 --- a/src/openklant/components/klantinteracties/admin/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/admin/digitaal_adres.py @@ -6,3 +6,4 @@ @admin.register(DigitaalAdres) class DigitaalAdresAdmin(admin.ModelAdmin): search_fields = ("adres",) + autocomplete_fields = ("partij",) diff --git a/src/openklant/components/klantinteracties/admin/klantcontacten.py b/src/openklant/components/klantinteracties/admin/klantcontacten.py index 8b739887..8765c156 100644 --- a/src/openklant/components/klantinteracties/admin/klantcontacten.py +++ b/src/openklant/components/klantinteracties/admin/klantcontacten.py @@ -12,13 +12,14 @@ class BetrokkeneInlineAdmin(admin.StackedInline): "contactnaam_voorvoegsel_achternaam", "contactnaam_achternaam", ) + autocomplete_fields = ("partij",) fieldsets = [ ( None, { "fields": [ + "partij", "klantcontact", - "digitaal_adres", "rol", "organisatienaam", "initiator", @@ -71,14 +72,14 @@ class BetrokkeneAdmin(admin.ModelAdmin): "contactnaam_voorvoegsel_achternaam", "contactnaam_achternaam", ) - raw_id_fields = ["digitaal_adres"] + autocomplete_fields = ("partij",) fieldsets = [ ( None, { "fields": [ + "partij", "klantcontact", - "digitaal_adres", "rol", "organisatienaam", "initiator", diff --git a/src/openklant/components/klantinteracties/admin/partijen.py b/src/openklant/components/klantinteracties/admin/partijen.py index 752394a8..3de3f86d 100644 --- a/src/openklant/components/klantinteracties/admin/partijen.py +++ b/src/openklant/components/klantinteracties/admin/partijen.py @@ -2,9 +2,21 @@ from django.utils.translation import gettext_lazy as _ from ..models.constants import SoortPartij +from ..models.digitaal_adres import DigitaalAdres +from ..models.klantcontacten import Betrokkene from ..models.partijen import Contactpersoon, Organisatie, Partij, Persoon +class DigitaalAdresInlineAdmin(admin.StackedInline): + model = DigitaalAdres + extra = 0 + + +class BetrokkeneInlineAdmin(admin.StackedInline): + model = Betrokkene + extra = 0 + + class PersoonInlineAdmin(admin.StackedInline): model = Persoon extra = 0 @@ -32,19 +44,20 @@ class PartijAdmin(admin.ModelAdmin): "soort_partij", "indicatie_actief", ) - inlines = (PersoonInlineAdmin, ContactpersoonInlineAdmin, OrganisatieInlineAdmin) - autocomplete_fields = ( - "betrokkene", - "digitaal_adres", - "voorkeurs_digitaal_adres", + inlines = ( + PersoonInlineAdmin, + ContactpersoonInlineAdmin, + OrganisatieInlineAdmin, + DigitaalAdresInlineAdmin, + BetrokkeneInlineAdmin, ) + search_fields = ("partij",) + autocomplete_fields = ("voorkeurs_digitaal_adres",) fieldsets = [ ( None, { "fields": [ - "betrokkene", - "digitaal_adres", "voorkeurs_digitaal_adres", "vertegenwoordigde", "nummer", @@ -82,6 +95,15 @@ class PartijAdmin(admin.ModelAdmin): ), ] + def get_queryset(self, request): + return ( + super() + .get_queryset(request) + .select_related( + "voorkeurs_digitaal_adres", + ) + ) + @admin.display(empty_value="---") def get_name(self, obj): match obj.soort_partij: diff --git a/src/openklant/components/klantinteracties/api/__init__.py b/src/openklant/components/klantinteracties/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/openklant/components/klantinteracties/api/filterset/actoren.py b/src/openklant/components/klantinteracties/api/filterset/actoren.py new file mode 100644 index 00000000..2c9fe98a --- /dev/null +++ b/src/openklant/components/klantinteracties/api/filterset/actoren.py @@ -0,0 +1,23 @@ +from django.utils.translation import gettext_lazy as _ + +from django_filters.rest_framework import FilterSet, filters + +from openklant.components.klantinteracties.models.actoren import Actor + + +class ActorenFilterSet(FilterSet): + naam = filters.CharFilter( + lookup_expr="icontains", + help_text=_("Zoek klantcontacten met specifieke tekst in inhoud"), + ) + + class Meta: + model = Actor + fields = ( + "naam", + "soort_actor", + "indicatie_actief", + "objectidentificator_objecttype", + "objectidentificator_soort_object_id", + "objectidentificator_object_id", + ) diff --git a/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py b/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py new file mode 100644 index 00000000..59dd0575 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py @@ -0,0 +1,162 @@ +import uuid + +from django.utils.translation import gettext_lazy as _ + +from django_filters.rest_framework import FilterSet, filters + +from openklant.components.klantinteracties.models.klantcontacten import ( + Betrokkene, + Klantcontact, +) + + +class KlantcontactFilterSet(FilterSet): + had_betrokkene__url = filters.CharFilter( + help_text=_("Zoek klantcontract object op basis van het betrokkene url"), + method="filter_betrokkene_url", + ) + had_betrokkene__uuid = filters.CharFilter( + help_text=_("Zoek klantcontract object op basis van het betrokkene uuid"), + method="filter_betrokkene_uuid", + ) + inhoud = filters.CharFilter( + lookup_expr="icontains", + help_text=_("Zoek klantcontacten met specifieke tekst in inhoud"), + ) + onderwerp = filters.CharFilter( + lookup_expr="icontains", + help_text=_("Zoek klantcontacten met specifieke tekst in onderwerp"), + ) + + class Meta: + model = Klantcontact + fields = ( + "had_betrokkene__url", + "had_betrokkene__uuid", + "nummer", + "kanaal", + "inhoud", + "onderwerp", + ) + + def filter_betrokkene_uuid(self, queryset, name, value): + try: + betrokkene_uuid = uuid.UUID(value) + return queryset.filter(betrokkene__uuid=betrokkene_uuid) + except ValueError: + return queryset.none() + + def filter_betrokkene_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.split("/")[-1]) + return queryset.filter(betrokkene__uuid=url_uuid) + except ValueError: + return queryset.none() + + +class BetrokkeneFilterSet(FilterSet): + klantcontact__nummer = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het klantcontact nummer"), + method="filter_klantcontact_nummer", + ) + klantcontact__url = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het klantcontact url"), + method="filter_klantcontact_url", + ) + klantcontact__uuid = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het klantcontact uuid"), + method="filter_klantcontact_uuid", + ) + verstrektedigitaal_adres__adres = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het digitaaladres adres"), + method="filter_digitaaladres_adres", + ) + verstrektedigitaal_adres__url = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het digitaaladres url"), + method="filter_digitaaladres_url", + ) + verstrektedigitaal_adres__uuid = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het digitaaladres uuid"), + method="filter_digitaaladres_uuid", + ) + + was_partij__nummer = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het partij nummer"), + method="filter_partij_nummer", + ) + was_partij__url = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het partij url"), + method="filter_partij_url", + ) + was_partij__uuid = filters.CharFilter( + help_text=_("Zoek betrokkene object op basis van het partij uuid"), + method="filter_partij_uuid", + ) + + class Meta: + model = Betrokkene + fields = ( + "klantcontact__nummer", + "klantcontact__uuid", + "klantcontact__url", + "verstrektedigitaal_adres__adres", + "verstrektedigitaal_adres__uuid", + "verstrektedigitaal_adres__url", + "was_partij__nummer", + "was_partij__url", + "was_partij__uuid", + ) + + def filter_klantcontact_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.split("/")[-1]) + return queryset.filter(klantcontact__uuid=url_uuid) + except ValueError: + return queryset.none() + + def filter_klantcontact_uuid(self, queryset, name, value): + try: + klantcontact_uuid = uuid.UUID(value) + return queryset.filter(klantcontact__uuid=klantcontact_uuid) + except ValueError: + return queryset.none() + + def filter_klantcontact_nummer(self, queryset, name, value): + try: + return queryset.filter(klantcontact__nummer=value) + except ValueError: + return queryset.none() + + def filter_digitaaladres_adres(self, queryset, name, value): + return queryset.filter(digitaaladres__adres=value) + + def filter_digitaaladres_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.split("/")[-1]) + return queryset.filter(digitaaladres__uuid=url_uuid) + except ValueError: + return queryset.none() + + def filter_digitaaladres_uuid(self, queryset, name, value): + try: + digitaaladres_uuid = uuid.UUID(value) + return queryset.filter(digitaaladres__uuid=digitaaladres_uuid) + except ValueError: + return queryset.none() + + def filter_partij_nummer(self, queryset, name, value): + return queryset.filter(partij__nummer=value) + + def filter_partij_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.split("/")[-1]) + return queryset.filter(partij__uuid=url_uuid) + except ValueError: + return queryset.none() + + def filter_partij_uuid(self, queryset, name, value): + try: + partij_uuid = uuid.UUID(value) + return queryset.filter(partij__uuid=partij_uuid) + except ValueError: + return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/filterset/partijen.py b/src/openklant/components/klantinteracties/api/filterset/partijen.py new file mode 100644 index 00000000..e52abc1c --- /dev/null +++ b/src/openklant/components/klantinteracties/api/filterset/partijen.py @@ -0,0 +1,119 @@ +import uuid + +from django.utils.translation import gettext_lazy as _ + +from django_filters.rest_framework import FilterSet, filters + +from openklant.components.klantinteracties.models.partijen import Partij + + +class PartijFilterSet(FilterSet): + werkt_voor_partij__url = filters.CharFilter( + help_text=_("Zoek partij object op basis van het vertegenwoordigde partij url"), + method="filter_werkt_voor_partij_url", + ) + werkt_voor_partij__uuid = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het vertegenwoordigde partij uuid" + ), + method="filter_werkt_voor_partij_uuid", + ) + werkt_voor_partij__nummer = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het vertegenwoordigde partij nummer" + ), + method="filter_werkt_voor_partij_nummer", + ) + + partij_identificator__objecttype = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het partij identificator objecttype" + ), + method="filter_identificator_objecttype", + ) + partij_identificator__soort_object_id = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het partij identificator soort object ID" + ), + method="filter_identificator_soort_object_id", + ) + partij_identificator__object_id = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het partij identificator object ID" + ), + method="filter_identificator_object_id", + ) + partij_identificator__register = filters.CharFilter( + help_text=_( + "Zoek partij object op basis van het partij identificator register" + ), + method="filter_identificator_register", + ) + + class Meta: + model = Partij + fields = ( + "werkt_voor_partij__url", + "werkt_voor_partij__uuid", + "werkt_voor_partij__nummer", + "partij_identificator__objecttype", + "partij_identificator__soort_object_id", + "partij_identificator__object_id", + "partij_identificator__register", + "nummer", + "indicatie_geheimhouding", + "indicatie_actief", + "soort_partij", + ) + + def filter_werkt_voor_partij_uuid(self, queryset, name, value): + try: + partij_uuid = uuid.UUID(value) + return queryset.filter(vertegenwoordigde__uuid=partij_uuid) + except ValueError: + return queryset.none() + + def filter_werkt_voor_partij_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.split("/")[-1]) + return queryset.filter(vertegenwoordigde__uuid=url_uuid) + except ValueError: + return queryset.none() + + def filter_werkt_voor_partij_nummer(self, queryset, name, value): + try: + return queryset.filter(vertegenwoordigde__nummer=value) + except ValueError: + return queryset.none() + + def filter_identificator_objecttype(self, queryset, name, value): + try: + return queryset.filter( + partijidentificator__partij_identificator_objecttype=value + ) + except ValueError: + return queryset.none() + + def filter_identificator_soort_object_id(self, queryset, name, value): + try: + return queryset.filter( + partijidentificator__partij_identificator_soort_object_id=value + ) + except ValueError: + return queryset.none() + + def filter_identificator_object_id(self, queryset, name, value): + try: + return queryset.filter( + partijidentificator__partij_identificator_object_id=value + ) + except ValueError: + return queryset.none() + + def filter_identificator_register(self, queryset, name, value): + try: + return queryset.filter( + partijidentificator__partij_identificator_register=value + ) + except ValueError: + return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/schema.py b/src/openklant/components/klantinteracties/api/schema.py new file mode 100644 index 00000000..f0280f82 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/schema.py @@ -0,0 +1,21 @@ +from django.conf import settings + +from drf_yasg import openapi + +# TODO: write a propper description +description = """ +Description WIP. +""" + +info = openapi.Info( + title="klantinteracties", + default_version=settings.KLANTINTERACTIES_API_VERSION, + description=description, + contact=openapi.Contact( + email="standaarden.ondersteuning@vng.nl", + url="https://zaakgerichtwerken.vng.cloud", + ), + license=openapi.License( + name="EUPL 1.2", url="https://opensource.org/licenses/EUPL-1.2" + ), +) diff --git a/src/openklant/components/klantinteracties/api/serializers/actoren.py b/src/openklant/components/klantinteracties/api/serializers/actoren.py new file mode 100644 index 00000000..06bac418 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/serializers/actoren.py @@ -0,0 +1,208 @@ +from django.db import transaction +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers +from vng_api_common.serializers import GegevensGroepSerializer, NestedGegevensGroepMixin + +from openklant.components.klantinteracties.api.validators import actor_exists +from openklant.components.klantinteracties.models.actoren import ( + Actor, + GeautomatiseerdeActor, + Medewerker, + OrganisatorischeEenheid, +) + + +class ObjectidentificatorSerializer(GegevensGroepSerializer): + class Meta: + model = Actor + gegevensgroep = "objectidentificator" + + +class ActorForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Actor + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [actor_exists]}, + "url": { + "view_name": "klantinteracties:actor-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze actor binnen deze API.", + }, + } + + +class ActorSerializer( + NestedGegevensGroepMixin, + serializers.HyperlinkedModelSerializer, +): + objectidentificator = ObjectidentificatorSerializer( + required=False, + allow_null=True, + help_text=_( + "Gegevens die een onderwerpobject in een extern register uniek identificeren." + ), + ) + + class Meta: + model = Actor + fields = ( + "uuid", + "url", + "naam", + "soort_actor", + "indicatie_actief", + "objectidentificator", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:actor-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze actor binnen deze API.", + }, + } + + +class GeautomatiseerdeActorSerializer(serializers.HyperlinkedModelSerializer): + actor = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Iets dat of iemand die voor de gemeente werkzaamheden uitvoert."), + ) + + class Meta: + model = GeautomatiseerdeActor + fields = ( + "id", + "url", + "actor", + "functie", + "omschrijving", + ) + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:geautomatiseerdeactor-detail", + "lookup_field": "id", + "help_text": "De unieke URL van deze geautomatiseerde actor binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "actor" in validated_data: + if actor := validated_data.pop("actor", None): + validated_data["actor"] = Actor.objects.get(uuid=str(actor.get("uuid"))) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + actor_uuid = str(validated_data.pop("actor").get("uuid")) + validated_data["actor"] = Actor.objects.get(uuid=actor_uuid) + + return super().create(validated_data) + + +class MedewerkerSerializer(serializers.HyperlinkedModelSerializer): + actor = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Iets dat of iemand die voor de gemeente werkzaamheden uitvoert."), + ) + + class Meta: + model = Medewerker + fields = ( + "id", + "url", + "actor", + "functie", + "emailadres", + "telefoonnummer", + ) + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:medewerker-detail", + "lookup_field": "id", + "help_text": "De unieke URL van deze medewerker binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "actor" in validated_data: + if actor := validated_data.pop("actor", None): + validated_data["actor"] = Actor.objects.get(uuid=str(actor.get("uuid"))) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + actor_uuid = str(validated_data.pop("actor").get("uuid")) + validated_data["actor"] = Actor.objects.get(uuid=actor_uuid) + + return super().create(validated_data) + + +class OrganisatorischeEenheidSerializer(serializers.HyperlinkedModelSerializer): + actor = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Iets dat of iemand die voor de gemeente werkzaamheden uitvoert."), + ) + + class Meta: + model = OrganisatorischeEenheid + fields = ( + "id", + "url", + "actor", + "omschrijving", + "emailadres", + "faxnummer", + "telefoonnummer", + ) + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:organisatorischeeenheid-detail", + "lookup_field": "id", + "help_text": "De unieke URL van deze organisatorische eenheid binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if actor := validated_data.pop("actor", None): + actor_uuid = str(actor.get("uuid")) + if actor_uuid != str(instance.actor.uuid): + actoren = OrganisatorischeEenheid.objects.filter(actor__uuid=actor_uuid) + if len(actoren) != 0: + raise serializers.ValidationError( + {"actor.uuid": _("Er bestaat al een actor met eenzelfde uuid.")} + ) + + validated_data["actor"] = Actor.objects.get(uuid=actor_uuid) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + actor_uuid = str(validated_data.pop("actor").get("uuid")) + actoren = OrganisatorischeEenheid.objects.filter(actor__uuid=actor_uuid) + + if len(actoren) != 0: + raise serializers.ValidationError( + {"actor.uuid": _("Er bestaat al een actor met eenzelfde uuid.")} + ) + + validated_data["actor"] = Actor.objects.get(uuid=actor_uuid) + + return super().create(validated_data) diff --git a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py new file mode 100644 index 00000000..4d8daeae --- /dev/null +++ b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py @@ -0,0 +1,102 @@ +from django.db import transaction +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers + +from openklant.components.klantinteracties.api.validators import digitaal_adres_exists +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres +from openklant.components.klantinteracties.models.klantcontacten import Betrokkene +from openklant.components.klantinteracties.models.partijen import Partij + + +class DigitaalAdresForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = DigitaalAdres + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [digitaal_adres_exists]}, + "url": { + "view_name": "klantinteracties:digitaaladres-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit digitaal adres binnen deze API.", + }, + } + + +class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer): + from openklant.components.klantinteracties.api.serializers.klantcontacten import ( + BetrokkeneForeignKeySerializer, + ) + from openklant.components.klantinteracties.api.serializers.partijen import ( + PartijForeignKeySerializer, + ) + + verstrekt_door_partij = PartijForeignKeySerializer( + required=True, + allow_null=True, + help_text=_( + "Digitaal adres dat een partij verstrekte voor gebruik bij " + "toekomstig contact met de gemeente." + ), + source="partij", + ) + verstrekt_door_betrokkene = BetrokkeneForeignKeySerializer( + required=True, + allow_null=True, + help_text=_( + "Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij " + "opvolging van een klantcontact." + ), + source="betrokkene", + ) + + class Meta: + model = DigitaalAdres + fields = ( + "uuid", + "url", + "verstrekt_door_betrokkene", + "verstrekt_door_partij", + "adres", + "soort_digitaal_adres", + "omschrijving", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:digitaaladres-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit digitaal adres binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "partij" in validated_data: + if partij := validated_data.pop("partij", None): + partij = Partij.objects.get(uuid=str(partij.get("uuid"))) + + validated_data["partij"] = partij + + if "betrokkene" in validated_data: + if betrokkene := validated_data.pop("betrokkene", None): + betrokkene = Betrokkene.objects.get(uuid=str(betrokkene.get("uuid"))) + + validated_data["betrokkene"] = betrokkene + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + if partij := validated_data.pop("partij", None): + validated_data["partij"] = Partij.objects.get(uuid=str(partij.get("uuid"))) + + if betrokkene := validated_data.pop("betrokkene", None): + validated_data["betrokkene"] = Betrokkene.objects.get( + uuid=str(betrokkene.get("uuid")) + ) + + return super().create(validated_data) diff --git a/src/openklant/components/klantinteracties/api/serializers/internetaken.py b/src/openklant/components/klantinteracties/api/serializers/internetaken.py new file mode 100644 index 00000000..c74026c6 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/serializers/internetaken.py @@ -0,0 +1,130 @@ +from django.db import transaction +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers + +from openklant.components.klantinteracties.api.serializers.actoren import ( + ActorForeignKeySerializer, +) +from openklant.components.klantinteracties.api.serializers.klantcontacten import ( + KlantcontactForeignKeySerializer, +) +from openklant.components.klantinteracties.api.validators import internetaak_exists +from openklant.components.klantinteracties.models.actoren import Actor +from openklant.components.klantinteracties.models.internetaken import InterneTaak +from openklant.components.klantinteracties.models.klantcontacten import Klantcontact + + +class InterneTaakForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = InterneTaak + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [internetaak_exists]}, + "url": { + "view_name": "klantinteracties:internetaak-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze interne taak binnen deze API.", + }, + } + + +class InterneTaakSerializer(serializers.HyperlinkedModelSerializer): + toegewezen_aan_actor = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Actor die een interne taak toegewezen kreeg."), + source="actor", + ) + aanleidinggevend_klantcontact = KlantcontactForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Klantcontact dat leidde tot een interne taak."), + source="klantcontact", + ) + + class Meta: + model = InterneTaak + fields = ( + "uuid", + "url", + "nummer", + "gevraagde_handeling", + "aanleidinggevend_klantcontact", + "toegewezen_aan_actor", + "toelichting", + "status", + "toegewezen_op", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:internetaak-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze interne taak binnen deze API.", + }, + } + + @transaction.atomic + def create(self, validated_data): + actor_uuid = str(validated_data.pop("actor").get("uuid")) + klantcontact_uuid = str(validated_data.pop("klantcontact").get("uuid")) + + validated_data["actor"] = Actor.objects.get(uuid=actor_uuid) + validated_data["klantcontact"] = Klantcontact.objects.get( + uuid=klantcontact_uuid + ) + + return super().create(validated_data) + + @transaction.atomic + def update(self, instance, validated_data): + if "actor" in validated_data: + if actor := validated_data.pop("actor", None): + validated_data["actor"] = Actor.objects.get(uuid=str(actor.get("uuid"))) + + if "klantcontact" in validated_data: + if klantcontact := validated_data.pop("klantcontact", None): + validated_data["klantcontact"] = Klantcontact.objects.get( + uuid=str(klantcontact.get("uuid")) + ) + + return super().update(instance, validated_data) + + +class KlantcontactInterneTaakSerializer(serializers.HyperlinkedModelSerializer): + actor = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Actor die een interne taak toegewezen kreeg."), + ) + klantcontact = KlantcontactForeignKeySerializer( + read_only=True, + allow_null=False, + help_text=_("Klantcontact dat leidde tot een interne taak."), + ) + + class Meta: + model = InterneTaak + fields = ( + "uuid", + "url", + "nummer", + "gevraagde_handeling", + "actor", + "klantcontact", + "toelichting", + "status", + "toegewezen_op", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:internetaak-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze interne taak binnen deze API.", + }, + } diff --git a/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py b/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py new file mode 100644 index 00000000..89462b58 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py @@ -0,0 +1,619 @@ +from django.db import transaction +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers +from vng_api_common.serializers import GegevensGroepSerializer, NestedGegevensGroepMixin + +from openklant.components.klantinteracties.api.serializers.actoren import ( + ActorForeignKeySerializer, +) +from openklant.components.klantinteracties.api.validators import ( + betrokkene_exists, + bijlage_exists, + klantcontact_exists, + onderwerpobject_exists, +) +from openklant.components.klantinteracties.models.actoren import Actor +from openklant.components.klantinteracties.models.internetaken import InterneTaak +from openklant.components.klantinteracties.models.klantcontacten import ( + Betrokkene, + Bijlage, + Klantcontact, + Onderwerpobject, +) +from openklant.components.klantinteracties.models.partijen import Partij + + +class BetrokkeneForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Betrokkene + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [betrokkene_exists]}, + "url": { + "view_name": "klantinteracties:betrokkene-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze betrokkene binnen deze API.", + }, + } + + +class KlantcontactForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Klantcontact + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [klantcontact_exists]}, + "url": { + "view_name": "klantinteracties:klantcontact-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit klantcontact binnen deze API.", + }, + } + + +class OnderwerpobjectForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Onderwerpobject + fields = ( + "uuid", + "url", + ) + + extra_kwargs = { + "uuid": {"required": True, "validators": [onderwerpobject_exists]}, + "url": { + "view_name": "klantinteracties:onderwerpobject-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit onderwerp object binnen deze API.", + }, + } + + +class BijlageForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Bijlage + fields = ( + "uuid", + "url", + ) + + extra_kwargs = { + "uuid": {"required": True, "validators": [bijlage_exists]}, + "url": { + "view_name": "klantinteracties:bijlage-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze bijlage binnen deze API.", + }, + } + + +class BetrokkeneForeignkeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Betrokkene + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [betrokkene_exists]}, + "url": { + "view_name": "klantinteracties:betrokkene-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze betrokkene binnen deze API.", + }, + } + + +class BezoekadresSerializer(GegevensGroepSerializer): + class Meta: + model = Betrokkene + gegevensgroep = "bezoekadres" + + +class CorrespondentieadresSerializer(GegevensGroepSerializer): + class Meta: + model = Betrokkene + gegevensgroep = "correspondentieadres" + ref_name = "betrokkene correspondentieadres" + + +class ContactnaamSerializer(GegevensGroepSerializer): + class Meta: + model = Betrokkene + gegevensgroep = "contactnaam" + + +class BetrokkeneSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + from openklant.components.klantinteracties.api.serializers.partijen import ( + PartijForeignKeySerializer, + ) + + was_partij = PartijForeignKeySerializer( + required=True, + allow_null=True, + source="partij", + help_text=_("Betrokkene bij klantcontact die een partij was."), + ) + had_klantcontact = KlantcontactForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Persoon of organisatie die betrokken was bij een klantcontact."), + source="klantcontact", + ) + bezoekadres = BezoekadresSerializer( + required=False, + allow_null=True, + help_text=_( + "Adres waarop de betrokkene bij klantcontact in naar aanleiding " + "van dat contact af te leggen bezoeken wil ontvangen. Dit mag " + "afwijken van voor de verstrekker eventueel in een basisregistratie bekende adressen." + ), + ) + correspondentieadres = CorrespondentieadresSerializer( + required=False, + allow_null=True, + help_text=_( + "Adres waarop de betrokkene bij klantcontact naar aanleiding van " + "dat contact te versturen post wil ontvangen. Dit mag afwijken van " + "voor de verstrekker eventueel in een basisregistratie bekende adressen." + ), + ) + contactnaam = ContactnaamSerializer( + required=False, + allow_null=True, + help_text=_( + "Naam die de betrokkene bij klantcontact tijdens vervolghandelingen naar " + "aanleiding van dat contact wil gebruiken. Deze mag afwijken van eventueel " + "in de Basisregistratie Personen (BRP) bekende naam van de betrokkene." + ), + ) + + class Meta: + model = Betrokkene + fields = ( + "uuid", + "url", + "was_partij", + "had_klantcontact", + "bezoekadres", + "correspondentieadres", + "contactnaam", + "rol", + "organisatienaam", + "initiator", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:betrokkene-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze betrokkene binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "partij" in validated_data: + if partij := validated_data.pop("partij", None): + partij = Partij.objects.get(uuid=str(partij.get("uuid"))) + + validated_data["partij"] = partij + + if "klantcontact" in validated_data: + if klantcontact := validated_data.pop("klantcontact", None): + validated_data["klantcontact"] = Klantcontact.objects.get( + uuid=str(klantcontact.get("uuid")) + ) + + if "partij_set" in validated_data: + existing_partijen = instance.partij_set.all() + partij_uuids = [ + partij["uuid"] for partij in validated_data.pop("partij_set") + ] + + # unset relation of partij that weren't given with the update + for partij in existing_partijen: + if partij.uuid not in partij_uuids: + partij.betrokkene = None + partij.save() + + # create relation between partij and betrokkene of new entries + for partij_uuid in partij_uuids: + if partij_uuid not in existing_partijen.values_list("uuid", flat=True): + partij = Partij.objects.get(uuid=partij_uuid) + partij.betrokkene = instance + partij.save() + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + klantcontact_uuid = str(validated_data.pop("klantcontact").get("uuid")) + validated_data["klantcontact"] = Klantcontact.objects.get( + uuid=klantcontact_uuid + ) + + if partij := validated_data.pop("partij", None): + partij = Partij.objects.get(uuid=str(partij.get("uuid"))) + + validated_data["partij"] = partij + + return super().create(validated_data) + + +class KlantcontactSerializer(serializers.HyperlinkedModelSerializer): + from openklant.components.klantinteracties.api.serializers.internetaken import ( + InterneTaakForeignKeySerializer, + ) + + had_betrokken_actoren = ActorForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Actor die bij een klantcontact betrokken was."), + many=True, + source="actoren", + ) + ging_over_onderwerpobjecten = OnderwerpobjectForeignKeySerializer( + required=True, + allow_null=True, + source="onderwerpobject_set", + help_text=_("Onderwerpobject dat tijdens een klantcontact aan de orde was."), + many=True, + ) + omvatte_bijlagen = BijlageForeignKeySerializer( + required=True, + allow_null=True, + source="bijlage_set", + help_text=_( + "Bijlage die (een deel van) de inhoud van het klantcontact beschrijft." + ), + many=True, + ) + had_betrokkenen = BetrokkeneForeignkeySerializer( + required=True, + allow_null=True, + source="betrokkene_set", + help_text=_("Persoon of organisatie die betrokken was bij een klantcontact."), + many=True, + ) + leidde_tot_interne_taken = InterneTaakForeignKeySerializer( + required=True, + allow_null=True, + source="internetaak_set", + help_text=_("Klantcontact dat leidde tot een interne taak."), + many=True, + ) + + class Meta: + model = Klantcontact + fields = ( + "uuid", + "url", + "ging_over_onderwerpobjecten", + "omvatte_bijlagen", + "had_betrokkenen", + "leidde_tot_interne_taken", + "nummer", + "kanaal", + "onderwerp", + "had_betrokken_actoren", + "inhoud", + "indicatie_contact_gelukt", + "taal", + "vertrouwelijk", + "plaatsgevonden_op", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:klantcontact-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit klantcontact binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "actoren" in validated_data: + actoren = [ + str(actor.get("uuid")) for actor in validated_data.pop("actoren") + ] + validated_data["actoren"] = Actor.objects.filter(uuid__in=actoren) + + if "bijlage_set" in validated_data: + existing_bijlagen = instance.bijlage_set.all() + bijlagen_uuids = [ + bijlage["uuid"] for bijlage in validated_data.pop("bijlage_set") + ] + + # unset relation of bijlage that weren't given with the update + for bijlage in existing_bijlagen: + if bijlage.uuid not in bijlagen_uuids: + bijlage.klantcontact = None + bijlage.save() + + # create relation between bijlage and klantcontact of new entries + for bijlage_uuid in bijlagen_uuids: + if bijlage_uuid not in existing_bijlagen.values_list("uuid", flat=True): + bijlage = Bijlage.objects.get(uuid=bijlage_uuid) + bijlage.klantcontact = instance + bijlage.save() + + if "onderwerpobject_set" in validated_data: + existing_onderwerpobjecten = instance.onderwerpobject_set.all() + onderwerpobjecten_uuids = [ + onderwerpobject["uuid"] + for onderwerpobject in validated_data.pop("onderwerpobject_set") + ] + + # unset relation of onderwerpobject that weren't given with the update + for onderwerpobject in existing_onderwerpobjecten: + if onderwerpobject.uuid not in onderwerpobjecten_uuids: + onderwerpobject.klantcontact = None + onderwerpobject.save() + + # create relation between onderwerpobject and klantcontact of new entries + for onderwerpobject_uuid in onderwerpobjecten_uuids: + if onderwerpobject_uuid not in existing_onderwerpobjecten.values_list( + "uuid", flat=True + ): + onderwerpobject = Onderwerpobject.objects.get( + uuid=onderwerpobject_uuid + ) + onderwerpobject.klantcontact = instance + onderwerpobject.save() + + if "betrokkene_set" in validated_data: + existing_betrokkene = instance.betrokkene_set.all() + betrokkene_uuids = [ + betrokkene["uuid"] + for betrokkene in validated_data.pop("betrokkene_set") + ] + + # delete relation of betrokkene that weren't given with the update + for betrokkene in existing_betrokkene: + if betrokkene.uuid not in betrokkene_uuids: + betrokkene.delete() + + # create relation between betrokkene and klantcontact of new entries + for betrokkene_uuid in betrokkene_uuids: + if betrokkene_uuid not in existing_betrokkene.values_list( + "uuid", flat=True + ): + betrokkene = Betrokkene.objects.get(uuid=betrokkene_uuid) + betrokkene.klantcontact = instance + betrokkene.save() + + if "internetaak_set" in validated_data: + existing_internetaken = instance.internetaak_set.all() + internetaak_uuids = [ + internetaak["uuid"] + for internetaak in validated_data.pop("internetaak_set") + ] + + # delete relation of internetaak that weren't given with the update + for internetaak in existing_internetaken: + if internetaak.uuid not in internetaak_uuids: + internetaak.delete() + + # create relation between internetaak and klantcontact of new entries + for internetaak_uuid in internetaak_uuids: + if internetaak_uuid not in existing_internetaken.values_list( + "uuid", flat=True + ): + internetaak = InterneTaak.objects.get(uuid=internetaak_uuid) + internetaak.klantcontact = instance + internetaak.save() + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + betrokkenen = validated_data.pop("betrokkene_set") + internetaken = validated_data.pop("internetaak_set") + bijlagen = validated_data.pop("bijlage_set") + onderwerpobjecten = validated_data.pop("onderwerpobject_set") + + actoren = [str(actor["uuid"]) for actor in validated_data.pop("actoren")] + validated_data["actoren"] = Actor.objects.filter(uuid__in=actoren) + + klantcontact = super().create(validated_data) + + if onderwerpobjecten: + for index, onderwerpobject in enumerate(onderwerpobjecten): + onderwerpobject = Onderwerpobject.objects.get( + uuid=str(onderwerpobject["uuid"]) + ) + if onderwerpobject.klantcontact: + raise serializers.ValidationError( + { + f"gingOverOnderwerpobjecten.{index}.uuid": _( + "Onderwerpobject object already is linked to a klantcontact object." + ) + } + ) + onderwerpobject.klantcontact = klantcontact + onderwerpobject.save() + + if bijlagen: + for index, bijlage in enumerate(bijlagen): + bijlage = Bijlage.objects.get(uuid=str(bijlage["uuid"])) + if bijlage.klantcontact: + raise serializers.ValidationError( + { + f"omvatteBijlagen.{index}.uuid": _( + "Bijlage object already is linked to a klantcontact object." + ) + } + ) + bijlage.klantcontact = klantcontact + bijlage.save() + + if betrokkenen: + for betrokkene in betrokkenen: + betrokkene = Betrokkene.objects.get(uuid=str(betrokkene["uuid"])) + betrokkene.klantcontact = klantcontact + betrokkene.save() + + if internetaken: + for internetaak in internetaken: + internetaak = InterneTaak.objects.get(uuid=str(internetaak["uuid"])) + internetaak.klantcontact = klantcontact + internetaak.save() + + return klantcontact + + +class OnderwerpobjectObjectidentificatorSerializer(GegevensGroepSerializer): + class Meta: + model = Onderwerpobject + gegevensgroep = "objectidentificator" + + +class OnderwerpobjectSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + klantcontact = KlantcontactForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("'Klantcontact' ging over 'Onderwerpobject'"), + ) + was_klantcontact = KlantcontactForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("'Onderwerpobject' was 'Klantcontact'"), + ) + objectidentificator = OnderwerpobjectObjectidentificatorSerializer( + required=False, + allow_null=True, + help_text=_( + "Gegevens die een onderwerpobject in een extern register uniek " + "identificeren." + ), + ) + + class Meta: + model = Onderwerpobject + fields = ( + "uuid", + "url", + "klantcontact", + "was_klantcontact", + "objectidentificator", + ) + + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:klantcontact-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit klantcontact binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "klantcontact" in validated_data: + if klantcontact := validated_data.pop("klantcontact", None): + klantcontact = Klantcontact.objects.get( + uuid=str(klantcontact.get("uuid")) + ) + + validated_data["klantcontact"] = klantcontact + + if "was_klantcontact" in validated_data: + if was_klantcontact := validated_data.pop("was_klantcontact", None): + was_klantcontact = Klantcontact.objects.get( + uuid=str(was_klantcontact.get("uuid")) + ) + + validated_data["was_klantcontact"] = was_klantcontact + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + if klantcontact := validated_data.pop("klantcontact", None): + klantcontact = Klantcontact.objects.get(uuid=str(klantcontact.get("uuid"))) + + if was_klantcontact := validated_data.pop("was_klantcontact", None): + was_klantcontact = Klantcontact.objects.get( + uuid=str(was_klantcontact.get("uuid")) + ) + + validated_data["klantcontact"] = klantcontact + validated_data["was_klantcontact"] = was_klantcontact + + return super().create(validated_data) + + +class BijlageObjectidentificatorSerializer(GegevensGroepSerializer): + class Meta: + model = Bijlage + gegevensgroep = "objectidentificator" + + +class BijlageSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + was_bijlage_van_klantcontact = KlantcontactForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("'Klantcontact' ging over 'Onderwerpobject'"), + source="klantcontact", + ) + objectidentificator = BijlageObjectidentificatorSerializer( + required=False, + allow_null=True, + help_text=_( + "Gegevens die een inhoudsobject in een extern register " + "uniek identificeren." + ), + ) + + class Meta: + model = Bijlage + fields = ( + "uuid", + "url", + "was_bijlage_van_klantcontact", + "objectidentificator", + ) + + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:klantcontact-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van dit klantcontact binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "klantcontact" in validated_data: + if klantcontact := validated_data.pop("klantcontact", None): + klantcontact = Klantcontact.objects.get( + uuid=str(klantcontact.get("uuid")) + ) + validated_data["klantcontact"] = klantcontact + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + if klantcontact := validated_data.pop("klantcontact", None): + validated_data["klantcontact"] = Klantcontact.objects.get( + uuid=str(klantcontact.get("uuid")) + ) + + return super().create(validated_data) diff --git a/src/openklant/components/klantinteracties/api/serializers/partijen.py b/src/openklant/components/klantinteracties/api/serializers/partijen.py new file mode 100644 index 00000000..cb4c602b --- /dev/null +++ b/src/openklant/components/klantinteracties/api/serializers/partijen.py @@ -0,0 +1,734 @@ +from django.db import transaction +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers +from vng_api_common.serializers import GegevensGroepSerializer, NestedGegevensGroepMixin + +from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( + DigitaalAdresForeignKeySerializer, +) +from openklant.components.klantinteracties.api.serializers.klantcontacten import ( + BetrokkeneForeignKeySerializer, +) +from openklant.components.klantinteracties.api.validators import ( + contactpersoon_exists, + organisatie_exists, + partij_exists, + partij_identificator_exists, +) +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres +from openklant.components.klantinteracties.models.klantcontacten import Betrokkene +from openklant.components.klantinteracties.models.partijen import ( + Contactpersoon, + Organisatie, + Partij, + PartijIdentificator, + Persoon, +) + + +class PartijForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Partij + fields = ( + "uuid", + "url", + ) + extra_kwargs = { + "uuid": {"required": True, "validators": [partij_exists]}, + "url": { + "view_name": "klantinteracties:partij-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze partij binnen deze API.", + }, + } + + +class PartijIdentificatorForeignkeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = PartijIdentificator + fields = ( + "uuid", + "url", + ) + + extra_kwargs = { + "uuid": {"required": True, "validators": [partij_identificator_exists]}, + "url": { + "view_name": "klantinteracties:partijidentificator-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze partij indentificator binnen deze API.", + }, + } + + +class PartijBezoekadresSerializer(GegevensGroepSerializer): + class Meta: + model = Partij + gegevensgroep = "bezoekadres" + + +class CorrespondentieadresSerializer(GegevensGroepSerializer): + class Meta: + model = Partij + gegevensgroep = "correspondentieadres" + ref_name = "partij correspondentieadres serializer" + + +class PartijSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + betrokkenen = BetrokkeneForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("Betrokkene bij klantcontact die een partij was."), + many=True, + source="betrokkene_set", + ) + digitale_adressen = DigitaalAdresForeignKeySerializer( + required=True, + allow_null=True, + help_text=_( + "Digitaal adres dat een partij verstrekte voor gebruik bij " + "toekomstig contact met de gemeente." + ), + source="digitaaladres_set", + many=True, + ) + voorkeurs_digitaal_adres = DigitaalAdresForeignKeySerializer( + required=True, + allow_null=True, + help_text=_( + "Digitaal adres waarop een partij bij voorkeur door de gemeente benaderd wordt." + ), + ) + vertegenwoordigde = PartijForeignKeySerializer( + required=True, + allow_null=True, + many=True, + help_text=_("Partij die een andere partij vertegenwoordigde."), + ) + partij_identificatoren = PartijIdentificatorForeignkeySerializer( + required=True, + allow_null=True, + many=True, + source="partijidentificator_set", + help_text=_("Partij-identificatoren die hoorde bij deze partij."), + ) + bezoekadres = PartijBezoekadresSerializer( + required=False, + allow_null=True, + help_text=_( + "Adres waarop de partij door gemeente bezocht wil worden. " + "Dit mag afwijken van voor de verstrekker eventueel in een " + "basisregistratie bekende adressen." + ), + ) + correspondentieadres = CorrespondentieadresSerializer( + required=False, + allow_null=True, + help_text=_( + "Adres waarop de partij post van de gemeente wil ontvangen. " + "Dit mag afwijken van voor de verstrekker eventueel in een " + "basisregistratie bekende adressen." + ), + ) + + class Meta: + model = Partij + fields = ( + "uuid", + "url", + "nummer", + "interne_notitie", + "betrokkenen", + "digitale_adressen", + "voorkeurs_digitaal_adres", + "vertegenwoordigde", + "partij_identificatoren", + "soort_partij", + "indicatie_geheimhouding", + "voorkeurstaal", + "indicatie_actief", + "bezoekadres", + "correspondentieadres", + ) + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:partij-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze partij binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + method = self.context.get("request").method + + if "betrokkene_set" in validated_data: + existing_betrokkenen = instance.betrokkene_set.all() + betrokkene_uuids = [ + betrokkene["uuid"] + for betrokkene in validated_data.pop("betrokkene_set") + ] + + # unset relation of betrokkenen that weren't given with the update + for betrokkene in existing_betrokkenen: + if betrokkene.uuid not in betrokkene_uuids: + betrokkene.partij = None + betrokkene.save() + + # create relation between betrokkene and partij of new entries + for betrokkene_uuid in betrokkene_uuids: + if betrokkene_uuid not in existing_betrokkenen.values_list( + "uuid", flat=True + ): + betrokkene = Betrokkene.objects.get(uuid=betrokkene_uuid) + betrokkene.partij = instance + betrokkene.save() + + if "partijidentificator_set" in validated_data: + existing_partij_identificatoren = instance.partijidentificator_set.all() + partij_identificator_uuids = [ + partij_identificator["uuid"] + for partij_identificator in validated_data.pop( + "partijidentificator_set" + ) + ] + + # delete relation of partij identificator that weren't given with the update + for partij_identificator in existing_partij_identificatoren: + if partij_identificator.uuid not in partij_identificator_uuids: + partij_identificator.delete() + + # create relation between partij identificator and partij of new entries + for partij_identificator_uuid in partij_identificator_uuids: + if ( + partij_identificator_uuid + not in existing_partij_identificatoren.values_list( + "uuid", flat=True + ) + ): + partij_identificator = PartijIdentificator.objects.get( + uuid=partij_identificator_uuid + ) + partij_identificator.partij = instance + partij_identificator.save() + + if "digitaaladres_set" in validated_data: + existing_digitale_adressen = instance.digitaaladres_set.all() + digitaal_adres_uuids = [ + digitaal_adres["uuid"] + for digitaal_adres in validated_data.pop("digitaaladres_set") + ] + + # unset relation of digitaal adres that weren't given with the update + for digitaal_adres in existing_digitale_adressen: + if digitaal_adres.uuid not in digitaal_adres_uuids: + digitaal_adres.partij = None + digitaal_adres.save() + + # create relation between digitaal adres and partij of new entries + for digitaal_adres_uuid in digitaal_adres_uuids: + if digitaal_adres_uuid not in existing_digitale_adressen.values_list( + "uuid", flat=True + ): + digitaal_adres = DigitaalAdres.objects.get(uuid=digitaal_adres_uuid) + digitaal_adres.partij = instance + digitaal_adres.save() + + if "voorkeurs_digitaal_adres" in validated_data: + if voorkeurs_digitaal_adres := validated_data.pop( + "voorkeurs_digitaal_adres", None + ): + voorkeurs_digitaal_adres_uuid = voorkeurs_digitaal_adres.get("uuid") + match (method): + case "PUT": + if len(digitaal_adres_uuids) == 0: + raise serializers.ValidationError( + { + "voorkeurs_digitaal_adres": _( + "voorkeursDigitaalAdres mag niet meegegeven worden " + "als digitaleAdressen leeg is." + ) + } + ) + if voorkeurs_digitaal_adres_uuid not in digitaal_adres_uuids: + raise serializers.ValidationError( + { + "voorkeurs_digitaal_adres": _( + "Het voorkeurs adres moet een gelinkte digitaal adres zijn." + ) + } + ) + case "PATCH": + if ( + voorkeurs_digitaal_adres_uuid + not in instance.digitaaladres_set.all().values_list( + "uuid", flat=True + ) + ): + raise serializers.ValidationError( + { + "voorkeurs_digitaal_adres": _( + "Het voorkeurs adres moet een gelinkte digitaal adres zijn." + ) + } + ) + + voorkeurs_digitaal_adres = DigitaalAdres.objects.get( + uuid=str(voorkeurs_digitaal_adres_uuid) + ) + + validated_data["voorkeurs_digitaal_adres"] = voorkeurs_digitaal_adres + + if "vertegenwoordigde" in validated_data: + if vertegenwoordigde := validated_data.pop("vertegenwoordigde", []): + partijen = [str(partij["uuid"]) for partij in vertegenwoordigde] + vertegenwoordigde = Partij.objects.filter(uuid__in=partijen) + + instance.vertegenwoordigde.set(vertegenwoordigde) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + digitale_adressen = validated_data.pop("digitaaladres_set") + partij_identificatoren = validated_data.pop("partijidentificator_set") + betrokkenen = validated_data.pop("betrokkene_set") + + if voorkeurs_digitaal_adres := validated_data.pop( + "voorkeurs_digitaal_adres", None + ): + voorkeurs_digitaal_adres_uuid = voorkeurs_digitaal_adres.get("uuid") + if voorkeurs_digitaal_adres and voorkeurs_digitaal_adres_uuid not in [ + digitaal_adres["uuid"] for digitaal_adres in digitale_adressen + ]: + raise serializers.ValidationError( + { + "voorkeurs_digitaal_adres": _( + "Het voorkeurs adres moet een gelinkte digitaal adres zijn." + ) + } + ) + voorkeurs_digitaal_adres = DigitaalAdres.objects.get( + uuid=str(voorkeurs_digitaal_adres_uuid) + ) + + if vertegenwoordigde := validated_data.pop("vertegenwoordigde", None): + partijen = [str(partij["uuid"]) for partij in vertegenwoordigde] + validated_data["vertegenwoordigde"] = Partij.objects.filter( + uuid__in=partijen + ) + + validated_data["voorkeurs_digitaal_adres"] = voorkeurs_digitaal_adres + + partij = super().create(validated_data) + + if digitale_adressen: + for digitaal_adres in digitale_adressen: + digitaal_adres = DigitaalAdres.objects.get( + uuid=str(digitaal_adres["uuid"]) + ) + digitaal_adres.partij = partij + digitaal_adres.save() + + if partij_identificatoren: + for partij_identificator in partij_identificatoren: + partij_identificator = PartijIdentificator.objects.get( + uuid=str(partij_identificator["uuid"]) + ) + partij_identificator.partij = partij + partij_identificator.save() + + if betrokkenen: + for betrokkene in betrokkenen: + betrokkene = Betrokkene.objects.get(uuid=str(betrokkene["uuid"])) + betrokkene.partij = partij + betrokkene.save() + + return partij + + +class ContactPersoonForeignkeySerializer(serializers.HyperlinkedModelSerializer): + partij = PartijForeignKeySerializer( + read_only=True, + help_text=_("Persoon of organisatie waarmee de gemeente een relatie heeft."), + ) + + class Meta: + model = Contactpersoon + fields = ( + "id", + "url", + "partij", + ) + extra_kwargs = { + "id": { + "required": True, + "read_only": False, + "validators": [contactpersoon_exists], + }, + "url": { + "view_name": "klantinteracties:contactpersoon-detail", + "lookup_field": "id", + "help_text": "De unieke URL van dit contact persoon binnen deze API.", + }, + } + + +class OrganisatieForeignKeySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Organisatie + fields = ( + "id", + "url", + ) + extra_kwargs = { + "id": { + "required": True, + "read_only": False, + "validators": [organisatie_exists], + }, + "url": { + "view_name": "klantinteracties:organisatie-detail", + "lookup_field": "id", + "help_text": "De unieke URL van deze organisatie binnen deze API.", + }, + } + + +class OrganisatieSerializer(serializers.HyperlinkedModelSerializer): + partij = PartijForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Persoon of organisatie waarmee de gemeente een relatie heeft."), + ) + contactpersoon = ContactPersoonForeignkeySerializer( + required=True, + allow_null=True, + many=True, + source="contactpersoon_set", + help_text=_("Organisatie waarvoor een contactpersoon werkte."), + ) + + class Meta: + model = Organisatie + fields = ( + "id", + "url", + "naam", + "partij", + "contactpersoon", + ) + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:organisatie-detail", + "lookup_field": "id", + "help_text": "De unieke URL van deze organisatie binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "partij" in validated_data: + if partij := validated_data.pop("partij", None): + partij_uuid = str(partij.get("uuid")) + if partij_uuid != str(instance.partij.uuid): + if Organisatie.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + { + "partij.uuid": _( + "Er bestaat al een organisatie met eenzelfde uuid." + ) + } + ) + + validated_data["partij"] = Partij.objects.get( + uuid=str(partij.get("uuid")) + ) + + if "contactpersoon_set" in validated_data: + existing_contactpersonen = instance.contactpersoon_set.all() + contactpersonen_ids = [ + contactpersoon["id"] + for contactpersoon in validated_data.pop("contactpersoon_set") + ] + + # unset relation of contactpersoon that weren't given with the update + for contactpersoon in existing_contactpersonen: + if contactpersoon.id not in contactpersonen_ids: + contactpersoon.organisatie = None + contactpersoon.save() + + # create relation between contactpersoon and organisatie of new entries + for contactpersoon_id in contactpersonen_ids: + if contactpersoon_id not in existing_contactpersonen.values_list( + "id", flat=True + ): + contactpersoon = Contactpersoon.objects.get(id=contactpersoon_id) + contactpersoon.organisatie = instance + contactpersoon.save() + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + partij_uuid = str(validated_data.pop("partij").get("uuid")) + if Organisatie.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + {"partij.uuid": _("Er bestaat al een organisatie met eenzelfde uuid.")} + ) + + contactpersonen = validated_data.pop("contactpersoon_set") + + validated_data["partij"] = Partij.objects.get(uuid=partij_uuid) + + oranisatie = super().create(validated_data) + + if contactpersonen: + for index, contactpersoon in enumerate(contactpersonen): + contactpersoon = Contactpersoon.objects.get( + id=str(contactpersoon["id"]) + ) + if contactpersoon.organisatie: + raise serializers.ValidationError( + { + f"contactpersoon.{index}.id": _( + "Contactpersoon object already is linked to a organisatie object." + ) + } + ) + contactpersoon.organisatie = oranisatie + contactpersoon.save() + + return oranisatie + + +class PersoonContactSerializer(GegevensGroepSerializer): + class Meta: + model = Persoon + gegevensgroep = "contactnaam" + + +class PersoonSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + partij = PartijForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Persoon of organisatie waarmee de gemeente een relatie heeft."), + ) + contactnaam = PersoonContactSerializer( + required=True, + allow_null=True, + help_text=_( + "Naam die een persoon wil gebruiken tijdens contact met de gemeente. " + "Deze mag afwijken van de eventueel in de Basisregistratie Personen " + "(BRP) bekende naam van de persoon." + ), + ) + + class Meta: + model = Persoon + fields = ( + "id", + "url", + "partij", + "contactnaam", + ) + + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:persoon-detail", + "lookup_field": "id", + "help_text": "De unieke URL van dit persoon binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "partij" in validated_data: + if partij := validated_data.pop("partij", None): + partij_uuid = str(partij.get("uuid")) + if partij_uuid != str(instance.partij.uuid): + if Persoon.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + { + "partij.uuid": _( + "Er bestaat al een partij met eenzelfde uuid." + ) + } + ) + + validated_data["partij"] = Partij.objects.get( + uuid=str(partij.get("uuid")) + ) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + partij_uuid = str(validated_data.pop("partij").get("uuid")) + if Persoon.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + {"partij.uuid": _("Er bestaat al een partij met eenzelfde uuid.")} + ) + + validated_data["partij"] = Partij.objects.get(uuid=partij_uuid) + + return super().create(validated_data) + + +class ContactpersoonPersoonSerializer(GegevensGroepSerializer): + class Meta: + model = Contactpersoon + gegevensgroep = "contactnaam" + + +class ContactpersoonSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + partij = PartijForeignKeySerializer( + required=True, + allow_null=False, + help_text=_("Persoon of organisatie waarmee de gemeente een relatie heeft."), + ) + werkte_voor_organisatie = OrganisatieForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("Organisatie waarvoor een contactpersoon werkte."), + source="organisatie", + ) + contactnaam = ContactpersoonPersoonSerializer( + required=False, + allow_null=True, + help_text=_( + "Naam die een contactpersoon wil gebruiken tijdens contact met de gemeente. " + "Deze mag afwijken van de eventueel in de Basisregistratie Personen " + "(BRP) bekende naam van de contactpersoon." + ), + ) + + class Meta: + model = Contactpersoon + fields = ( + "id", + "url", + "partij", + "werkte_voor_organisatie", + "contactnaam", + ) + + extra_kwargs = { + "id": {"read_only": True}, + "url": { + "view_name": "klantinteracties:contactpersoon-detail", + "lookup_field": "id", + "help_text": "De unieke URL van dit contact persoon binnen deze API.", + }, + } + + def update(self, instance, validated_data): + if partij := validated_data.pop("partij", None): + partij_uuid = str(partij.get("uuid")) + if partij_uuid != str(instance.partij.uuid): + if Contactpersoon.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + { + "partij.uuid": _( + "Er bestaat al een partij met eenzelfde uuid." + ) + } + ) + + validated_data["partij"] = Partij.objects.get(uuid=str(partij.get("uuid"))) + + if "organisatie" in validated_data: + if organisatie := validated_data.pop("organisatie", None): + organisatie = Organisatie.objects.get(id=organisatie.get("id")) + + validated_data["organisatie"] = organisatie + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + partij_uuid = str(validated_data.pop("partij").get("uuid")) + if Contactpersoon.objects.filter(partij__uuid=partij_uuid): + raise serializers.ValidationError( + {"partij.uuid": _("Er bestaat al een partij met eenzelfde uuid.")} + ) + + validated_data["partij"] = Partij.objects.get(uuid=partij_uuid) + + if organisatie := validated_data.pop("organisatie"): + organisatie = Organisatie.objects.get(id=organisatie.get("id")) + + validated_data["organisatie"] = organisatie + + return super().create(validated_data) + + +class PartijIdentificatorGroepTypeSerializer(GegevensGroepSerializer): + class Meta: + model = PartijIdentificator + gegevensgroep = "partij_identificator" + + +class PartijIdentificatorSerializer( + NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer +): + identificeerde_partij = PartijForeignKeySerializer( + required=True, + allow_null=True, + help_text=_("Partij-identificator die hoorde bij een partij."), + source="partij", + ) + partij_identificator = PartijIdentificatorGroepTypeSerializer( + required=True, + allow_null=True, + help_text=_( + "Gegevens die een partij in een basisregistratie " + "of ander extern register uniek identificeren." + ), + ) + + class Meta: + model = PartijIdentificator + fields = ( + "uuid", + "url", + "identificeerde_partij", + "andere_partij_identificator", + "partij_identificator", + ) + + extra_kwargs = { + "uuid": {"read_only": True}, + "url": { + "view_name": "klantinteracties:partijidentificator-detail", + "lookup_field": "uuid", + "help_text": "De unieke URL van deze partij indentificator binnen deze API.", + }, + } + + @transaction.atomic + def update(self, instance, validated_data): + if "partij" in validated_data: + if partij := validated_data.pop("partij", None): + validated_data["partij"] = Partij.objects.get( + uuid=str(partij.get("uuid")) + ) + + return super().update(instance, validated_data) + + @transaction.atomic + def create(self, validated_data): + partij_uuid = str(validated_data.pop("partij").get("uuid")) + validated_data["partij"] = Partij.objects.get(uuid=partij_uuid) + + return super().create(validated_data) diff --git a/src/openklant/components/klantinteracties/api/tests/__init__.py b/src/openklant/components/klantinteracties/api/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/openklant/components/klantinteracties/api/tests/test_actoren.py b/src/openklant/components/klantinteracties/api/tests/test_actoren.py new file mode 100644 index 00000000..fe689479 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_actoren.py @@ -0,0 +1,694 @@ +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.actoren import ( + ActorFactory, + GeautomatiseerdeActorFactory, + MedewerkerFactory, + OrganisatorischeEenheidFactory, +) + + +class ActorTests(JWTAuthMixin, APITestCase): + def test_list_actor(self): + list_url = reverse("klantinteracties:actor-list") + ActorFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_actor(self): + actor = ActorFactory.create() + detail_url = reverse( + "klantinteracties:actor-detail", kwargs={"uuid": str(actor.uuid)} + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_actor(self): + list_url = reverse("klantinteracties:actor-list") + data = { + "naam": "Phil", + "soortActor": "medewerker", + "indicatieActief": True, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["naam"], "Phil") + self.assertEqual(data["soortActor"], "medewerker") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_update_actor(self): + actor = ActorFactory.create( + naam="Phil", + soort_actor="medewerker", + indicatie_actief=True, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:actor-detail", kwargs={"uuid": str(actor.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["naam"], "Phil") + self.assertEqual(data["soortActor"], "medewerker") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "naam": "changed", + "soortActor": "geautomatiseerde_actor", + "indicatieActief": False, + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["naam"], "changed") + self.assertEqual(data["soortActor"], "geautomatiseerde_actor") + self.assertFalse(data["indicatieActief"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_partial_update_actor(self): + actor = ActorFactory.create( + naam="Phil", + soort_actor="medewerker", + indicatie_actief=True, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:actor-detail", kwargs={"uuid": str(actor.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["naam"], "Phil") + self.assertEqual(data["soortActor"], "medewerker") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "naam": "changed", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["naam"], "changed") + self.assertEqual(data["soortActor"], "medewerker") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_destroy_actor(self): + actor = ActorFactory.create() + detail_url = reverse( + "klantinteracties:actor-detail", kwargs={"uuid": str(actor.uuid)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:actor-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class GeautomatiseerdeActorTests(JWTAuthMixin, APITestCase): + def test_list_geatomatiseerde_actor(self): + list_url = reverse("klantinteracties:geautomatiseerdeactor-list") + GeautomatiseerdeActorFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_geatomatiseerde_actor(self): + geautomatiseerde_actor = GeautomatiseerdeActorFactory.create() + detail_url = reverse( + "klantinteracties:geautomatiseerdeactor-detail", + kwargs={"id": str(geautomatiseerde_actor.id)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_geatomatiseerde_actor(self): + actor = ActorFactory.create() + list_url = reverse("klantinteracties:geautomatiseerdeactor-list") + data = { + "actor": {"uuid": str(actor.uuid)}, + "functie": "functie", + "omschrijving": "omschrijving", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["omschrijving"], "omschrijving") + + def test_update_geatomatiseerde_actor(self): + actor, actor2 = ActorFactory.create_batch(2) + geatomatiseerde_actor = GeautomatiseerdeActorFactory.create( + actor=actor, + functie="functie", + omschrijving="omschrijving", + ) + detail_url = reverse( + "klantinteracties:geautomatiseerdeactor-detail", + kwargs={"id": str(geatomatiseerde_actor.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["omschrijving"], "omschrijving") + + data = { + "actor": {"uuid": str(actor2.uuid)}, + "functie": "changed", + "omschrijving": "changed", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ) + self.assertEqual(data["functie"], "changed") + self.assertEqual(data["omschrijving"], "changed") + + def test_partial_update_geatomatiseerde_actor(self): + actor = ActorFactory.create() + geatomatiseerde_actor = GeautomatiseerdeActorFactory.create( + actor=actor, + functie="functie", + omschrijving="omschrijving", + ) + detail_url = reverse( + "klantinteracties:geautomatiseerdeactor-detail", + kwargs={"id": str(geatomatiseerde_actor.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["omschrijving"], "omschrijving") + + data = { + "functie": "changed", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "changed") + self.assertEqual(data["omschrijving"], "omschrijving") + + def test_destroy_geatomatiseerde_actor(self): + geautomatiseerde_actor = GeautomatiseerdeActorFactory.create() + detail_url = reverse( + "klantinteracties:geautomatiseerdeactor-detail", + kwargs={"id": str(geautomatiseerde_actor.id)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:geautomatiseerdeactor-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class MedewerkerTests(JWTAuthMixin, APITestCase): + def test_list_medewerker(self): + list_url = reverse("klantinteracties:medewerker-list") + MedewerkerFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_medewerker(self): + medewerker = MedewerkerFactory.create() + detail_url = reverse( + "klantinteracties:medewerker-detail", + kwargs={"id": str(medewerker.id)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_medewerker(self): + actor = ActorFactory.create() + list_url = reverse("klantinteracties:medewerker-list") + data = { + "actor": {"uuid": str(actor.uuid)}, + "functie": "functie", + "emailadres": "example@email.com", + "telefoonnummer": "7762323", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["telefoonnummer"], "7762323") + + def test_update_medewerker(self): + actor, actor2 = ActorFactory.create_batch(2) + medewerker = MedewerkerFactory.create( + actor=actor, + functie="functie", + emailadres="example@email.com", + telefoonnummer="7762323", + ) + detail_url = reverse( + "klantinteracties:medewerker-detail", + kwargs={"id": str(medewerker.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["telefoonnummer"], "7762323") + + data = { + "actor": {"uuid": str(actor2.uuid)}, + "functie": "changed", + "emailadres": "changed@email.com", + "telefoonnummer": "5551212", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ) + self.assertEqual(data["functie"], "changed") + self.assertEqual(data["emailadres"], "changed@email.com") + self.assertEqual(data["telefoonnummer"], "5551212") + + def test_partial_update_medewerker(self): + actor = ActorFactory.create() + medewerker = MedewerkerFactory.create( + actor=actor, + functie="functie", + emailadres="example@email.com", + telefoonnummer="7762323", + ) + detail_url = reverse( + "klantinteracties:medewerker-detail", + kwargs={"id": str(medewerker.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "functie") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["telefoonnummer"], "7762323") + + data = { + "functie": "changed", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["functie"], "changed") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["telefoonnummer"], "7762323") + + def test_destroy_medewerker(self): + medewerker = MedewerkerFactory.create() + detail_url = reverse( + "klantinteracties:medewerker-detail", + kwargs={"id": str(medewerker.id)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:medewerker-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class OrganisatorischeEenheidTests(JWTAuthMixin, APITestCase): + def test_list_organisatorische_eenheid(self): + list_url = reverse("klantinteracties:organisatorischeeenheid-list") + OrganisatorischeEenheidFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_organisatorische_eenheid(self): + organisatorische_eenheid = OrganisatorischeEenheidFactory.create() + detail_url = reverse( + "klantinteracties:organisatorischeeenheid-detail", + kwargs={"id": str(organisatorische_eenheid.id)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_organisatorische_eenheid(self): + actor = ActorFactory.create() + list_url = reverse("klantinteracties:organisatorischeeenheid-list") + data = { + "actor": {"uuid": str(actor.uuid)}, + "omschrijving": "omschrijving", + "emailadres": "example@email.com", + "faxnummer": "7762323", + "telefoonnummer": "7762323", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["omschrijving"], "omschrijving") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["faxnummer"], "7762323") + self.assertEqual(data["telefoonnummer"], "7762323") + + with self.subTest("check_if_actor_unique_validation_works"): + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "actor.uuid") + + def test_update_organisatorische_eenheid(self): + actor, actor2 = ActorFactory.create_batch(2) + organisatorische_eenheid = OrganisatorischeEenheidFactory.create( + actor=actor, + omschrijving="omschrijving", + emailadres="example@email.com", + faxnummer="7762323", + telefoonnummer="7762323", + ) + detail_url = reverse( + "klantinteracties:organisatorischeeenheid-detail", + kwargs={"id": str(organisatorische_eenheid.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["omschrijving"], "omschrijving") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["faxnummer"], "7762323") + self.assertEqual(data["telefoonnummer"], "7762323") + + data = { + "actor": {"uuid": str(actor2.uuid)}, + "omschrijving": "changed", + "emailadres": "changed@email.com", + "faxnummer": "5551212", + "telefoonnummer": "5551212", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ) + self.assertEqual(data["omschrijving"], "changed") + self.assertEqual(data["emailadres"], "changed@email.com") + self.assertEqual(data["faxnummer"], "5551212") + self.assertEqual(data["telefoonnummer"], "5551212") + + with self.subTest("test_actor_unique"): + organisatorische_eenheid2 = OrganisatorischeEenheidFactory.create() + new_detail_url = reverse( + "klantinteracties:organisatorischeeenheid-detail", + kwargs={"id": str(organisatorische_eenheid2.id)}, + ) + response = self.client.put(new_detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "actor.uuid") + + def test_partial_update_organisatorische_eenheid(self): + actor = ActorFactory.create() + organisatorische_eenheid = OrganisatorischeEenheidFactory.create( + actor=actor, + omschrijving="omschrijving", + emailadres="example@email.com", + faxnummer="7762323", + telefoonnummer="7762323", + ) + detail_url = reverse( + "klantinteracties:organisatorischeeenheid-detail", + kwargs={"id": str(organisatorische_eenheid.id)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["omschrijving"], "omschrijving") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["faxnummer"], "7762323") + self.assertEqual(data["telefoonnummer"], "7762323") + + data = { + "omschrijving": "changed", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["actor"], + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + ) + self.assertEqual(data["omschrijving"], "changed") + self.assertEqual(data["emailadres"], "example@email.com") + self.assertEqual(data["faxnummer"], "7762323") + self.assertEqual(data["telefoonnummer"], "7762323") + + def test_destroy_organisatorische_eenheid(self): + organisatorische_eenheid = OrganisatorischeEenheidFactory.create() + detail_url = reverse( + "klantinteracties:organisatorischeeenheid-detail", + kwargs={"id": str(organisatorische_eenheid.id)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:organisatorischeeenheid-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py b/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py new file mode 100644 index 00000000..e8b6c9cc --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py @@ -0,0 +1,194 @@ +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( + DigitaalAdresFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, +) +from openklant.components.klantinteracties.models.tests.factories.partijen import ( + PartijFactory, +) + + +class DigitaalAdresTests(JWTAuthMixin, APITestCase): + def test_list_digitaal_adres(self): + list_url = reverse("klantinteracties:digitaaladres-list") + DigitaalAdresFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_digitaal_adres(self): + digitaal_adres = DigitaalAdresFactory.create() + detail_url = reverse( + "klantinteracties:digitaaladres-detail", + kwargs={"uuid": str(digitaal_adres.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_digitaal_adres(self): + list_url = reverse("klantinteracties:digitaaladres-list") + data = { + "verstrektDoorBetrokkene": None, + "verstrektDoorPartij": None, + "soortDigitaalAdres": "soortDigitaalAdres", + "adres": "adres", + "omschrijving": "omschrijving", + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertIsNone(data["verstrektDoorBetrokkene"]) + self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") + self.assertEqual(data["verstrektDoorPartij"], None) + self.assertEqual(data["adres"], "adres") + self.assertEqual(data["omschrijving"], "omschrijving") + + with self.subTest("with_betrokkene_and_partij"): + partij = PartijFactory.create() + betrokkene = BetrokkeneFactory.create() + data["verstrektDoorBetrokkene"] = {"uuid": str(betrokkene.uuid)} + data["verstrektDoorPartij"] = {"uuid": str(partij.uuid)} + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid) + ) + self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") + self.assertEqual(data["adres"], "adres") + self.assertEqual(data["omschrijving"], "omschrijving") + + def test_update_digitaal_adres(self): + betrokkene, betrokkene2 = BetrokkeneFactory.create_batch(2) + partij, partij2 = PartijFactory.create_batch(2) + digitaal_adres = DigitaalAdresFactory.create( + betrokkene=betrokkene, + partij=partij2, + soort_digitaal_adres="soortDigitaalAdres", + adres="adres", + omschrijving="omschrijving", + ) + detail_url = reverse( + "klantinteracties:digitaaladres-detail", + kwargs={"uuid": str(digitaal_adres.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij2.uuid)) + self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") + self.assertEqual(data["adres"], "adres") + self.assertEqual(data["omschrijving"], "omschrijving") + + data = { + "verstrektDoorBetrokkene": {"uuid": str(betrokkene2.uuid)}, + "verstrektDoorPartij": {"uuid": str(partij.uuid)}, + "soortDigitaalAdres": "changed", + "adres": "changed", + "omschrijving": "changed", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene2.uuid)) + self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["soortDigitaalAdres"], "changed") + self.assertEqual(data["adres"], "changed") + self.assertEqual(data["omschrijving"], "changed") + + with self.subTest("update_betrokkene_partij_to_none"): + data = { + "verstrektDoorBetrokkene": None, + "verstrektDoorPartij": None, + "soortDigitaalAdres": "changed", + "adres": "changed", + "omschrijving": "changed", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertIsNone(data["verstrektDoorBetrokkene"]) + self.assertIsNone(data["verstrektDoorPartij"]) + self.assertEqual(data["soortDigitaalAdres"], "changed") + self.assertEqual(data["adres"], "changed") + self.assertEqual(data["omschrijving"], "changed") + + def test_partial_update_digitaal_adres(self): + betrokkene = BetrokkeneFactory.create() + partij = PartijFactory.create() + digitaal_adres = DigitaalAdresFactory.create( + betrokkene=betrokkene, + partij=partij, + soort_digitaal_adres="soortDigitaalAdres", + adres="adres", + omschrijving="omschrijving", + ) + detail_url = reverse( + "klantinteracties:digitaaladres-detail", + kwargs={"uuid": str(digitaal_adres.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") + self.assertEqual(data["adres"], "adres") + self.assertEqual(data["omschrijving"], "omschrijving") + + data = { + "soortDigitaalAdres": "changed", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["soortDigitaalAdres"], "changed") + self.assertEqual(data["adres"], "adres") + self.assertEqual(data["omschrijving"], "omschrijving") + + def test_destroy_digitaal_adres(self): + digitaal_adres = DigitaalAdresFactory.create() + detail_url = reverse( + "klantinteracties:digitaaladres-detail", + kwargs={"uuid": str(digitaal_adres.uuid)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:digitaaladres-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_filters.py b/src/openklant/components/klantinteracties/api/tests/test_filters.py new file mode 100644 index 00000000..692850e1 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_filters.py @@ -0,0 +1,571 @@ +from uuid import uuid4 + +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( + DigitaalAdresFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, + KlantcontactFactory, +) +from openklant.components.klantinteracties.models.tests.factories.partijen import ( + PartijFactory, + PartijIdentificatorFactory, +) + + +class KlantcontactFilterTests(JWTAuthMixin, APITestCase): + url = reverse("klantinteracties:klantcontact-list") + + def setUp(self): + super().setUp() + ( + klantcontact, + klantcontact2, + klantcontact3, + klantcontact4, + self.klantcontact5, + ) = KlantcontactFactory.create_batch(5) + for betrokkene_klantcontact in [ + klantcontact, + klantcontact2, + klantcontact3, + klantcontact4, + self.klantcontact5, + ]: + self.betrokkene = BetrokkeneFactory.create( + klantcontact=betrokkene_klantcontact + ) + + def test_filter_betrokkene_uuid(self): + response = self.client.get( + self.url, {"had_betrokkene__uuid": f"{self.betrokkene.uuid}"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_empty_query"): + response = self.client.get(self.url, {"had_betrokkene__uuid": str(uuid4())}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"had_betrokkene__uuid": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_betrokkene_url(self): + response = self.client.get( + self.url, + { + "had_betrokkene__url": f"http://testserver/klantinteracties/api/v1/klantcontact/{self.betrokkene.uuid}" + }, + ) + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + { + "had_betrokkene__url": f"http://testserver/klantinteracties/api/v1/klantcontact/{str(uuid4())}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"had_betrokkene__url": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + +class BetrokkeneFilterTests(JWTAuthMixin, APITestCase): + url = reverse("klantinteracties:betrokkene-list") + + def setUp(self): + super().setUp() + + self.klantcontact = KlantcontactFactory.create(nummer="6237172371") + self.partij = PartijFactory.create(nummer="8123973457") + self.betrokkene = BetrokkeneFactory.create( + partij=self.partij, klantcontact=self.klantcontact + ) + self.digitaal_adres = DigitaalAdresFactory.create( + betrokkene=self.betrokkene, adres="search_param_adres" + ) + + partij2 = PartijFactory.create() + betrokkene2 = BetrokkeneFactory.create(partij=partij2) + DigitaalAdresFactory.create(betrokkene=betrokkene2) + + partij3 = PartijFactory.create() + betrokkene3 = BetrokkeneFactory.create(partij=partij3) + DigitaalAdresFactory.create(betrokkene=betrokkene3) + + partij4 = PartijFactory.create() + betrokkene4 = BetrokkeneFactory.create(partij=partij4) + DigitaalAdresFactory.create(betrokkene=betrokkene4) + + partij5 = PartijFactory.create() + betrokkene5 = BetrokkeneFactory.create(partij=partij5) + DigitaalAdresFactory.create(betrokkene=betrokkene5) + + def test_filter_klantcontact_url(self): + response = self.client.get( + self.url, + { + "klantcontact__url": f"http://testserver/klantinteracties/api/v1/klantcontact/{self.klantcontact.uuid}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + { + "klantcontact__url": f"http://testserver/klantinteracties/api/v1/klantcontact/{str(uuid4())}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"klantcontact__url": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_klantcontact_uuid(self): + response = self.client.get( + self.url, + {"klantcontact__uuid": str(self.klantcontact.uuid)}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"klantcontact__uuid": str(uuid4())}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"klantcontact__uuid": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_klantcontact_nummer(self): + response = self.client.get( + self.url, + {"klantcontact__nummer": str(6237172371)}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"klantcontact__nummer": "8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_verstrektedigitaal_adres_url(self): + digitaal_adres_url = f"http://testserver/klantinteracties/api/v1/digitaal_adres/{self.digitaal_adres.uuid}" + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__url": digitaal_adres_url}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + none_existing_url = f"http://testserver/klantinteracties/api/v1/digitaal_adres/{str(uuid4())}" + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__url": none_existing_url}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"verstrektedigitaal_adres__url": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_verstrektedigitaal_adres_uuid(self): + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__uuid": str(self.digitaal_adres.uuid)}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__uuid": str(uuid4())}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"verstrektedigitaal_adres__uuid": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_verstrektedigitaal_adres_adres(self): + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__adres": "search_param_adres"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"verstrektedigitaal_adres__adres": "none_existing_adres"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_was_partij_url(self): + response = self.client.get( + self.url, + { + "was_partij__url": f"http://testserver/klantinteracties/api/v1/partij/{self.partij.uuid}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + { + "was_partij__url": f"http://testserver/klantinteracties/api/v1/partij/{str(uuid4())}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"was_partij__url": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_was_partij_uuid(self): + response = self.client.get( + self.url, + {"was_partij__uuid": str(self.partij.uuid)}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"was_partij__uuid": str(uuid4())}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get(self.url, {"was_partij__uuid": "ValueError"}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_was_partij_nummer(self): + response = self.client.get( + self.url, + {"was_partij__nummer": "8123973457"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.betrokkene.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"was_partij__nummer": "2348238482"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + +class TestPartijFilterset(JWTAuthMixin, APITestCase): + url = reverse("klantinteracties:partij-list") + + def setUp(self): + super().setUp() + + self.partij = PartijFactory.create(nummer="1111111111") + self.partij2 = PartijFactory.create( + vertegenwoordigde=(self.partij,), nummer="2222222222" + ) + self.partij3 = PartijFactory.create( + vertegenwoordigde=(self.partij2,), nummer="3333333333" + ) + self.partij4 = PartijFactory.create( + vertegenwoordigde=(self.partij3,), nummer="4444444444" + ) + self.partij5 = PartijFactory.create( + vertegenwoordigde=(self.partij4,), nummer="5555555555" + ) + + for partij_obj in [ + self.partij, + self.partij2, + self.partij3, + self.partij4, + self.partij5, + ]: + self.partij_identificator = PartijIdentificatorFactory.create( + partij=partij_obj, + partij_identificator_objecttype=f"objecttype-{partij_obj.nummer}", + partij_identificator_soort_object_id=f"soort-object-id-{partij_obj.nummer}", + partij_identificator_object_id=f"object-id-{partij_obj.nummer}", + partij_identificator_register=f"register-{partij_obj.nummer}", + ) + + def test_filter_werkt_voor_partij_url(self): + werkt_voor_partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij4.uuid)}" + response = self.client.get( + self.url, + {"werkt_voor_partij__url": werkt_voor_partij_url}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(2, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + self.assertEqual(str(self.partij3.uuid), data[1]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + { + "werkt_voor_partij__url": f"http://testserver/klantinteracties/api/v1/partijen/{str(uuid4())}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"werkt_voor_partij__url": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_werkt_voor_partij_uuid(self): + response = self.client.get( + self.url, + {"werkt_voor_partij__uuid": str(self.partij4.uuid)}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(2, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + self.assertEqual(str(self.partij3.uuid), data[1]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"werkt_voor_partij__uuid": str(uuid4())}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"werkt_voor_partij__uuid": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_werkt_voor_partij_nummer(self): + response = self.client.get( + self.url, + {"werkt_voor_partij__nummer": "4444444444"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(2, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + self.assertEqual(str(self.partij3.uuid), data[1]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"werkt_voor_partij__nummer": "8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_partij_identificator_nummer(self): + response = self.client.get( + self.url, + {"partij_identificator__objecttype": f"objecttype-{self.partij5.nummer}"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"partij_identificator__objecttype": "objecttype-8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_identificator_soort_object_id(self): + response = self.client.get( + self.url, + { + "partij_identificator__soort_object_id": f"soort-object-id-{self.partij5.nummer}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"partij_identificator__soort_object_id": "soort-object-id-8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_identificator_object_id(self): + response = self.client.get( + self.url, + {"partij_identificator__object_id": f"object-id-{self.partij5.nummer}"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"partij_identificator__soort_object_id": "object-id-8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_identificator_register(self): + response = self.client.get( + self.url, + {"partij_identificator__register": f"register-{self.partij5.nummer}"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.partij5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + {"partij_identificator__register": "register-8584395394"}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_internetaken.py b/src/openklant/components/klantinteracties/api/tests/test_internetaken.py new file mode 100644 index 00000000..a498594a --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_internetaken.py @@ -0,0 +1,175 @@ +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.actoren import ( + ActorFactory, +) +from openklant.components.klantinteracties.models.tests.factories.internetaken import ( + InterneTaakFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + KlantcontactFactory, +) + + +class InterneTaakTests(JWTAuthMixin, APITestCase): + def test_list_internetaak(self): + list_url = reverse("klantinteracties:internetaak-list") + InterneTaakFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_internetaak(self): + internetaak = InterneTaakFactory.create() + detail_url = reverse( + "klantinteracties:internetaak-detail", + kwargs={"uuid": str(internetaak.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_internetaak(self): + actor = ActorFactory.create() + klantcontact = KlantcontactFactory.create() + + list_url = reverse("klantinteracties:internetaak-list") + data = { + "toegewezenAanActor": {"uuid": str(actor.uuid)}, + "aanleidinggevendKlantcontact": {"uuid": str(klantcontact.uuid)}, + "nummer": "1312312312", + "gevraagdeHandeling": "gevraagdeHandeling", + "toelichting": "toelichting", + "status": "verwerkt", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["toegewezenAanActor"]["uuid"], str(actor.uuid)) + self.assertEqual( + data["aanleidinggevendKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual(data["nummer"], "1312312312") + self.assertEqual(data["gevraagdeHandeling"], "gevraagdeHandeling") + self.assertEqual(data["toelichting"], "toelichting") + self.assertEqual(data["status"], "verwerkt") + + def test_update_internetaak(self): + actor, actor2 = ActorFactory.create_batch(2) + klantcontact, klantcontact2 = KlantcontactFactory.create_batch(2) + internetaak = InterneTaakFactory.create( + actor=actor, + klantcontact=klantcontact, + nummer="1237713712", + gevraagde_handeling="gevraagdeHandeling", + toelichting="toelichting", + status="verwerkt", + ) + detail_url = reverse( + "klantinteracties:internetaak-detail", + kwargs={"uuid": str(internetaak.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["toegewezenAanActor"]["uuid"], str(actor.uuid)) + self.assertEqual( + data["aanleidinggevendKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual(data["nummer"], "1237713712") + self.assertEqual(data["gevraagdeHandeling"], "gevraagdeHandeling") + self.assertEqual(data["toelichting"], "toelichting") + self.assertEqual(data["status"], "verwerkt") + + data = { + "toegewezenAanActor": {"uuid": str(actor2.uuid)}, + "aanleidinggevendKlantcontact": {"uuid": str(klantcontact2.uuid)}, + "nummer": "9999999999", + "gevraagdeHandeling": "changed", + "toelichting": "changed", + "status": "te_verwerken", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["toegewezenAanActor"]["uuid"], str(actor2.uuid)) + self.assertEqual( + data["aanleidinggevendKlantcontact"]["uuid"], str(klantcontact2.uuid) + ) + self.assertEqual(data["nummer"], "9999999999") + self.assertEqual(data["gevraagdeHandeling"], "changed") + self.assertEqual(data["toelichting"], "changed") + self.assertEqual(data["status"], "te_verwerken") + + def test_partial_update_internetaak(self): + actor = ActorFactory.create() + klantcontact = KlantcontactFactory.create() + internetaak = InterneTaakFactory.create( + actor=actor, + klantcontact=klantcontact, + nummer="1237713712", + gevraagde_handeling="gevraagdeHandeling", + toelichting="toelichting", + status="verwerkt", + ) + detail_url = reverse( + "klantinteracties:internetaak-detail", + kwargs={"uuid": str(internetaak.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["toegewezenAanActor"]["uuid"], str(actor.uuid)) + self.assertEqual( + data["aanleidinggevendKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual(data["nummer"], "1237713712") + self.assertEqual(data["gevraagdeHandeling"], "gevraagdeHandeling") + self.assertEqual(data["toelichting"], "toelichting") + self.assertEqual(data["status"], "verwerkt") + + data = {"nummer": "0000000000"} + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["toegewezenAanActor"]["uuid"], str(actor.uuid)) + self.assertEqual( + data["aanleidinggevendKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual(data["nummer"], "0000000000") + self.assertEqual(data["gevraagdeHandeling"], "gevraagdeHandeling") + self.assertEqual(data["toelichting"], "toelichting") + self.assertEqual(data["status"], "verwerkt") + + def test_destroy_internetaak(self): + internetaak = InterneTaakFactory.create() + detail_url = reverse( + "klantinteracties:internetaak-detail", + kwargs={"uuid": str(internetaak.uuid)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:internetaak-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_klantcontacten.py b/src/openklant/components/klantinteracties/api/tests/test_klantcontacten.py new file mode 100644 index 00000000..fd97379e --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_klantcontacten.py @@ -0,0 +1,1551 @@ +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.actoren import ( + ActorFactory, +) +from openklant.components.klantinteracties.models.tests.factories.internetaken import ( + InterneTaakFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, + BijlageFactory, + KlantcontactFactory, + OnderwerpobjectFactory, +) +from openklant.components.klantinteracties.models.tests.factories.partijen import ( + PartijFactory, +) + + +class KlantContactTests(JWTAuthMixin, APITestCase): + def test_list_klantcontact(self): + list_url = reverse("klantinteracties:klantcontact-list") + KlantcontactFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_klantcontact(self): + klantcontact = KlantcontactFactory.create() + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_klantcontact(self): + actor, actor2 = ActorFactory.create_batch(2) + list_url = reverse("klantinteracties:klantcontact-list") + data = { + "gingOverOnderwerpobjecten": [], + "omvatteBijlagen": [], + "hadBetrokkenen": [], + "leiddeTotInterneTaken": [], + "nummer": "1234567890", + "kanaal": "kanaal", + "onderwerp": "onderwerp", + "hadBetrokkenActoren": [ + {"uuid": str(actor.uuid)}, + {"uuid": str(actor2.uuid)}, + ], + "inhoud": "inhoud", + "indicatieContactGelukt": True, + "taal": "ndl", + "vertrouwelijk": True, + "plaatsgevondenOp": "2019-08-24T14:15:22Z", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["gingOverOnderwerpobjecten"], []) + self.assertEqual(data["omvatteBijlagen"], []) + self.assertEqual(data["hadBetrokkenen"], []) + self.assertEqual(data["leiddeTotInterneTaken"], []) + self.assertEqual(data["nummer"], "1234567890") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + def test_create_klantcontact_with_reverse_lookup_fields(self): + actor, actor2 = ActorFactory.create_batch(2) + betrokkene = BetrokkeneFactory.create() + internetaak = InterneTaakFactory.create() + onderwerpobject = OnderwerpobjectFactory.create(klantcontact=None) + bijlage = BijlageFactory.create(klantcontact=None) + list_url = reverse("klantinteracties:klantcontact-list") + data = { + "gingOverOnderwerpobjecten": [{"uuid": str(onderwerpobject.uuid)}], + "omvatteBijlagen": [{"uuid": str(bijlage.uuid)}], + "hadBetrokkenen": [{"uuid": str(betrokkene.uuid)}], + "leiddeTotInterneTaken": [{"uuid": str(internetaak.uuid)}], + "nummer": "1234567890", + "kanaal": "kanaal", + "onderwerp": "onderwerp", + "hadBetrokkenActoren": [ + {"uuid": str(actor.uuid)}, + {"uuid": str(actor2.uuid)}, + ], + "inhoud": "inhoud", + "indicatieContactGelukt": True, + "taal": "ndl", + "vertrouwelijk": True, + "plaatsgevondenOp": "2019-08-24T14:15:22Z", + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["gingOverOnderwerpobjecten"], + [ + { + "uuid": str(onderwerpobject.uuid), + "url": f"http://testserver/klantinteracties/api/v1/onderwerpobjecten/{str(onderwerpobject.uuid)}", + } + ], + ) + self.assertEqual( + data["omvatteBijlagen"], + [ + { + "uuid": str(bijlage.uuid), + "url": f"http://testserver/klantinteracties/api/v1/bijlagen/{str(bijlage.uuid)}", + }, + ], + ) + self.assertEqual( + data["hadBetrokkenen"], + [ + { + "uuid": str(betrokkene.uuid), + "url": f"http://testserver/klantinteracties/api/v1/betrokkenen/{str(betrokkene.uuid)}", + } + ], + ) + self.assertEqual( + data["leiddeTotInterneTaken"], + [ + { + "uuid": str(internetaak.uuid), + "url": f"http://testserver/klantinteracties/api/v1/internetaken/{str(internetaak.uuid)}", + }, + ], + ) + self.assertTrue(data["hadBetrokkenen"]) + self.assertTrue(data["leiddeTotInterneTaken"]) + self.assertEqual(data["nummer"], "1234567890") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + with self.subTest("test_ging_over_onderwerp_unique"): + data = { + "gingOverOnderwerpobjecten": [ + {"uuid": str(onderwerpobject.uuid)}, + ], + "omvatteBijlagen": [], + "hadBetrokkenen": [], + "leiddeTotInterneTaken": [], + "nummer": "1234567890", + "kanaal": "kanaal", + "onderwerp": "onderwerp", + "hadBetrokkenActoren": [], + "inhoud": "inhoud", + "indicatieContactGelukt": True, + "taal": "ndl", + "vertrouwelijk": True, + "plaatsgevondenOp": "2019-08-24T14:15:22Z", + } + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual( + data["invalidParams"][0]["name"], "gingOverOnderwerpobjecten.0.uuid" + ) + + with self.subTest("test_bijlage_unique"): + data = { + "gingOverOnderwerpobjecten": [], + "omvatteBijlagen": [ + {"uuid": str(bijlage.uuid)}, + ], + "hadBetrokkenen": [], + "leiddeTotInterneTaken": [], + "nummer": "1234567890", + "kanaal": "kanaal", + "onderwerp": "onderwerp", + "hadBetrokkenActoren": [], + "inhoud": "inhoud", + "indicatieContactGelukt": True, + "taal": "ndl", + "vertrouwelijk": True, + "plaatsgevondenOp": "2019-08-24T14:15:22Z", + } + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "omvatteBijlagen.0.uuid") + + def test_update_klantcontact(self): + actor, actor2, actor3, actor4 = ActorFactory.create_batch(4) + klantcontact = KlantcontactFactory.create( + nummer="1234567890", + kanaal="kanaal", + onderwerp="onderwerp", + actoren=[actor, actor2], + inhoud="inhoud", + indicatie_contact_gelukt=True, + taal="ndl", + vertrouwelijk=True, + plaatsgevonden_op="2019-08-24T14:15:22Z", + ) + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["gingOverOnderwerpobjecten"], []) + self.assertEqual(data["omvatteBijlagen"], []) + self.assertEqual(data["hadBetrokkenen"], []) + self.assertEqual(data["leiddeTotInterneTaken"], []) + self.assertEqual(data["nummer"], "1234567890") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + data = { + "gingOverOnderwerpobjecten": [], + "omvatteBijlagen": [], + "hadBetrokkenen": [], + "leiddeTotInterneTaken": [], + "nummer": "7948723947", + "kanaal": "changed", + "onderwerp": "changed", + "hadBetrokkenActoren": [ + {"uuid": str(actor3.uuid)}, + {"uuid": str(actor4.uuid)}, + ], + "inhoud": "changed", + "indicatieContactGelukt": False, + "taal": "de", + "vertrouwelijk": False, + "plaatsgevondenOp": "2020-08-24T14:15:22Z", + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["gingOverOnderwerpobjecten"], []) + self.assertEqual(data["omvatteBijlagen"], []) + self.assertEqual(data["hadBetrokkenen"], []) + self.assertEqual(data["leiddeTotInterneTaken"], []) + self.assertEqual(data["nummer"], "7948723947") + self.assertEqual(data["kanaal"], "changed") + self.assertEqual(data["onderwerp"], "changed") + self.assertEqual(data["inhoud"], "changed") + self.assertEqual(data["taal"], "de") + self.assertEqual(data["plaatsgevondenOp"], "2020-08-24T14:15:22Z") + self.assertFalse(data["indicatieContactGelukt"]) + self.assertFalse(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor3.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor3.uuid)}", + }, + { + "uuid": str(actor4.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor4.uuid)}", + }, + ], + ) + + def test_update_klantcontact_with_reverse_lookup_fields(self): + actor, actor2, actor3, actor4 = ActorFactory.create_batch(4) + klantcontact = KlantcontactFactory.create( + nummer="1234567890", + kanaal="kanaal", + onderwerp="onderwerp", + actoren=[actor, actor2], + inhoud="inhoud", + indicatie_contact_gelukt=True, + taal="ndl", + vertrouwelijk=True, + plaatsgevonden_op="2019-08-24T14:15:22Z", + ) + klantcontact2 = KlantcontactFactory.create() + onderwerpobject = OnderwerpobjectFactory.create(klantcontact=klantcontact) + onderwerpobject2 = OnderwerpobjectFactory.create(klantcontact=None) + + bijlage = BijlageFactory.create(klantcontact=klantcontact) + bijlage2 = BijlageFactory.create(klantcontact=None) + + betrokkene = BetrokkeneFactory.create(klantcontact=klantcontact) + betrokkene2 = BetrokkeneFactory.create(klantcontact=klantcontact2) + + internetaak = InterneTaakFactory.create(klantcontact=klantcontact) + internetaak2 = InterneTaakFactory.create(klantcontact=klantcontact2) + + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["hadBetrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual( + data["leiddeTotInterneTaken"][0]["uuid"], str(internetaak.uuid) + ) + self.assertEqual( + data["gingOverOnderwerpobjecten"][0]["uuid"], str(onderwerpobject.uuid) + ) + self.assertEqual(data["omvatteBijlagen"][0]["uuid"], str(bijlage.uuid)) + self.assertEqual(data["nummer"], "1234567890") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + data = { + "gingOverOnderwerpobjecten": [{"uuid": str(onderwerpobject2.uuid)}], + "omvatteBijlagen": [{"uuid": str(bijlage2.uuid)}], + "hadBetrokkenen": [{"uuid": str(betrokkene2.uuid)}], + "leiddeTotInterneTaken": [{"uuid": str(internetaak2.uuid)}], + "nummer": "7948723947", + "kanaal": "changed", + "onderwerp": "changed", + "hadBetrokkenActoren": [ + {"uuid": str(actor3.uuid)}, + {"uuid": str(actor4.uuid)}, + ], + "inhoud": "changed", + "indicatieContactGelukt": False, + "taal": "de", + "vertrouwelijk": False, + "plaatsgevondenOp": "2020-08-24T14:15:22Z", + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["gingOverOnderwerpobjecten"], + [ + { + "uuid": str(onderwerpobject2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/onderwerpobjecten/{str(onderwerpobject2.uuid)}", + } + ], + ) + self.assertEqual( + data["omvatteBijlagen"], + [ + { + "uuid": str(bijlage2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/bijlagen/{str(bijlage2.uuid)}", + }, + ], + ) + self.assertEqual( + data["hadBetrokkenen"], + [ + { + "uuid": str(betrokkene2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/betrokkenen/{str(betrokkene2.uuid)}", + } + ], + ) + self.assertEqual( + data["leiddeTotInterneTaken"], + [ + { + "uuid": str(internetaak2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/internetaken/{str(internetaak2.uuid)}", + }, + ], + ) + self.assertEqual(data["nummer"], "7948723947") + self.assertEqual(data["kanaal"], "changed") + self.assertEqual(data["onderwerp"], "changed") + self.assertEqual(data["inhoud"], "changed") + self.assertEqual(data["taal"], "de") + self.assertEqual(data["plaatsgevondenOp"], "2020-08-24T14:15:22Z") + self.assertFalse(data["indicatieContactGelukt"]) + self.assertFalse(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor3.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor3.uuid)}", + }, + { + "uuid": str(actor4.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor4.uuid)}", + }, + ], + ) + + def test_partial_update_klantcontact(self): + actor, actor2 = ActorFactory.create_batch(2) + klantcontact = KlantcontactFactory.create( + nummer="1234567890", + kanaal="kanaal", + onderwerp="onderwerp", + actoren=[actor, actor2], + inhoud="inhoud", + indicatie_contact_gelukt=True, + taal="ndl", + vertrouwelijk=True, + plaatsgevonden_op="2019-08-24T14:15:22Z", + ) + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + onderwerpobject = OnderwerpobjectFactory.create(klantcontact=klantcontact) + bijlage = BijlageFactory.create(klantcontact=klantcontact) + betrokkene = BetrokkeneFactory.create(klantcontact=klantcontact) + internetaak = InterneTaakFactory.create(klantcontact=klantcontact) + + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(len(data["gingOverOnderwerpobjecten"]), 1) + self.assertEqual(len(data["omvatteBijlagen"]), 1) + self.assertEqual(len(data["hadBetrokkenen"]), 1) + self.assertEqual(len(data["leiddeTotInterneTaken"]), 1) + + self.assertEqual( + data["gingOverOnderwerpobjecten"][0]["uuid"], str(onderwerpobject.uuid) + ) + self.assertEqual(data["omvatteBijlagen"][0]["uuid"], str(bijlage.uuid)) + self.assertEqual(data["hadBetrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual( + data["leiddeTotInterneTaken"][0]["uuid"], str(internetaak.uuid) + ) + + self.assertEqual(data["nummer"], "1234567890") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + data = { + "nummer": "7948723947", + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(len(data["gingOverOnderwerpobjecten"]), 1) + self.assertEqual(len(data["omvatteBijlagen"]), 1) + self.assertEqual(len(data["hadBetrokkenen"]), 1) + self.assertEqual(len(data["leiddeTotInterneTaken"]), 1) + + self.assertEqual( + data["gingOverOnderwerpobjecten"][0]["uuid"], str(onderwerpobject.uuid) + ) + self.assertEqual(data["omvatteBijlagen"][0]["uuid"], str(bijlage.uuid)) + self.assertEqual(data["hadBetrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual( + data["leiddeTotInterneTaken"][0]["uuid"], str(internetaak.uuid) + ) + + self.assertEqual(data["nummer"], "7948723947") + self.assertEqual(data["kanaal"], "kanaal") + self.assertEqual(data["onderwerp"], "onderwerp") + self.assertEqual(data["inhoud"], "inhoud") + self.assertEqual(data["taal"], "ndl") + self.assertEqual(data["plaatsgevondenOp"], "2019-08-24T14:15:22Z") + self.assertTrue(data["indicatieContactGelukt"]) + self.assertTrue(data["vertrouwelijk"]) + self.assertEqual( + data["hadBetrokkenActoren"], + [ + { + "uuid": str(actor.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor.uuid)}", + }, + { + "uuid": str(actor2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/actoren/{str(actor2.uuid)}", + }, + ], + ) + + def test_destroy_klantcontact(self): + klantcontact = KlantcontactFactory.create() + detail_url = reverse( + "klantinteracties:klantcontact-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:klantcontact-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class BetrokkeneTests(JWTAuthMixin, APITestCase): + def test_list_betrokkene(self): + list_url = reverse("klantinteracties:betrokkene-list") + BetrokkeneFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_betrokkene(self): + klantcontact = BetrokkeneFactory.create() + detail_url = reverse( + "klantinteracties:betrokkene-detail", + kwargs={"uuid": str(klantcontact.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_betrokkene_with_partij(self): + klantcontact = KlantcontactFactory.create() + partij = PartijFactory.create() + list_url = reverse("klantinteracties:betrokkene-list") + data = { + "hadKlantcontact": {"uuid": str(klantcontact.uuid)}, + "wasPartij": {"uuid": str(partij.uuid)}, + "bezoekadres": { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + "correspondentieadres": { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + "contactnaam": { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + "rol": "vertegenwoordiger", + "organisatienaam": "Whitechapel", + "initiator": True, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["wasPartij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + self.assertEqual(data["rol"], "vertegenwoordiger") + self.assertEqual(data["organisatienaam"], "Whitechapel") + self.assertTrue(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact.uuid)) + + def test_create_betrokkene(self): + klantcontact = KlantcontactFactory.create() + list_url = reverse("klantinteracties:betrokkene-list") + data = { + "hadKlantcontact": {"uuid": str(klantcontact.uuid)}, + "wasPartij": None, + "bezoekadres": { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + "correspondentieadres": { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + "contactnaam": { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + "rol": "vertegenwoordiger", + "organisatienaam": "Whitechapel", + "initiator": True, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertIsNone(data["wasPartij"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + self.assertEqual(data["rol"], "vertegenwoordiger") + self.assertEqual(data["organisatienaam"], "Whitechapel") + self.assertTrue(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact.uuid)) + + def test_update_betrokkene(self): + klantcontact, klantcontact2 = KlantcontactFactory.create_batch(2) + partij, partij2 = PartijFactory.create_batch(2) + betrokkene = BetrokkeneFactory.create( + klantcontact=klantcontact, + partij=partij, + bezoekadres_nummeraanduiding_id="4a282b5c-16d7-401d-9737-28e98c865ab2", + bezoekadres_adresregel1="adres1", + bezoekadres_adresregel2="adres2", + bezoekadres_adresregel3="adres3", + bezoekadres_land="6030", + correspondentieadres_nummeraanduiding_id="c06918d9-899b-4d98-a10d-08436ebc6c20", + correspondentieadres_adresregel1="adres1", + correspondentieadres_adresregel2="adres2", + correspondentieadres_adresregel3="adres3", + correspondentieadres_land="6030", + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + rol="vertegenwoordiger", + organisatienaam="Whitechapel", + initiator=True, + ) + + detail_url = reverse( + "klantinteracties:betrokkene-detail", kwargs={"uuid": str(betrokkene.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["wasPartij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + self.assertEqual(data["rol"], "vertegenwoordiger") + self.assertEqual(data["organisatienaam"], "Whitechapel") + self.assertTrue(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact.uuid)) + + data = { + "wasPartij": {"uuid": str(partij2.uuid)}, + "hadKlantcontact": {"uuid": str(klantcontact2.uuid)}, + "bezoekadres": { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + "correspondentieadres": { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + "contactnaam": { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + "rol": "klant", + "organisatienaam": "changed", + "initiator": False, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["wasPartij"]["uuid"], str(partij2.uuid)) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + ) + self.assertEqual(data["rol"], "klant") + self.assertEqual(data["organisatienaam"], "changed") + self.assertFalse(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact2.uuid)) + + def test_partial_update_betrokkene(self): + klantcontact = KlantcontactFactory.create() + partij = PartijFactory.create() + betrokkene = BetrokkeneFactory.create( + klantcontact=klantcontact, + partij=partij, + bezoekadres_nummeraanduiding_id="4a282b5c-16d7-401d-9737-28e98c865ab2", + bezoekadres_adresregel1="adres1", + bezoekadres_adresregel2="adres2", + bezoekadres_adresregel3="adres3", + bezoekadres_land="6030", + correspondentieadres_nummeraanduiding_id="c06918d9-899b-4d98-a10d-08436ebc6c20", + correspondentieadres_adresregel1="adres1", + correspondentieadres_adresregel2="adres2", + correspondentieadres_adresregel3="adres3", + correspondentieadres_land="6030", + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + rol="vertegenwoordiger", + organisatienaam="Whitechapel", + initiator=True, + ) + + detail_url = reverse( + "klantinteracties:betrokkene-detail", kwargs={"uuid": str(betrokkene.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["wasPartij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + self.assertEqual(data["rol"], "vertegenwoordiger") + self.assertEqual(data["organisatienaam"], "Whitechapel") + self.assertTrue(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact.uuid)) + + data = { + "bezoekadres": { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["wasPartij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "4a282b5c-16d7-401d-9737-28e98c865ab2", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "c06918d9-899b-4d98-a10d-08436ebc6c20", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + self.assertEqual(data["rol"], "vertegenwoordiger") + self.assertEqual(data["organisatienaam"], "Whitechapel") + self.assertTrue(data["initiator"]) + self.assertEqual(data["hadKlantcontact"]["uuid"], str(klantcontact.uuid)) + + def test_destroy_betrokkene(self): + betrokkene = BetrokkeneFactory.create() + detail_url = reverse( + "klantinteracties:betrokkene-detail", kwargs={"uuid": str(betrokkene.uuid)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:betrokkene-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class BijlageTests(JWTAuthMixin, APITestCase): + def test_list_bijlage(self): + list_url = reverse("klantinteracties:bijlage-list") + BijlageFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_bijlage(self): + bijlage = BijlageFactory.create() + detail_url = reverse( + "klantinteracties:bijlage-detail", kwargs={"uuid": str(bijlage.uuid)} + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_bijlage(self): + list_url = reverse("klantinteracties:bijlage-list") + data = { + "wasBijlageVanKlantcontact": None, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["wasBijlageVanKlantcontact"], None) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + with self.subTest("create_bijlage_with_klantcontact"): + klantcontact = KlantcontactFactory.create() + data = { + "wasBijlageVanKlantcontact": {"uuid": str(klantcontact.uuid)}, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual( + data["wasBijlageVanKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_update_bijlage(self): + klantcontact, klantcontact2 = KlantcontactFactory.create_batch(2) + bijlage = BijlageFactory.create( + klantcontact=klantcontact, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:bijlage-detail", kwargs={"uuid": str(bijlage.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["wasBijlageVanKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "wasBijlageVanKlantcontact": {"uuid": str(klantcontact2.uuid)}, + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["wasBijlageVanKlantcontact"]["uuid"], str(klantcontact2.uuid) + ) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + with self.subTest("unset_klantcontact"): + data = { + "wasBijlageVanKlantcontact": None, + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertIsNone(data["wasBijlageVanKlantcontact"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_partial_update_bijlage(self): + klantcontact = KlantcontactFactory.create() + bijlage = BijlageFactory.create( + klantcontact=klantcontact, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:bijlage-detail", kwargs={"uuid": str(bijlage.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual( + data["wasBijlageVanKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual( + data["wasBijlageVanKlantcontact"]["uuid"], str(klantcontact.uuid) + ) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_destroy_bijlage(self): + bijlage = BijlageFactory.create() + detail_url = reverse( + "klantinteracties:bijlage-detail", kwargs={"uuid": str(bijlage.uuid)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:bijlage-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class OnderwerpobjectTests(JWTAuthMixin, APITestCase): + def test_list_onderwerpobject(self): + list_url = reverse("klantinteracties:onderwerpobject-list") + OnderwerpobjectFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_onderwerpobject(self): + onderwerpobject = OnderwerpobjectFactory.create() + detail_url = reverse( + "klantinteracties:onderwerpobject-detail", + kwargs={"uuid": str(onderwerpobject.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_onderwerpobject(self): + list_url = reverse("klantinteracties:onderwerpobject-list") + data = { + "klantcontact": None, + "wasKlantcontact": None, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["klantcontact"], None) + self.assertEqual(data["wasKlantcontact"], None) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + with self.subTest("create_onderwerpobject_with_klantcontact"): + klantcontact2 = KlantcontactFactory.create() + data = { + "klantcontact": {"uuid": str(klantcontact2.uuid)}, + "wasKlantcontact": None, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(data["klantcontact"]["uuid"], str(klantcontact2.uuid)) + self.assertIsNone(data["wasKlantcontact"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + with self.subTest("create_onderwerpobject_with_was_klantcontact"): + klantcontact3 = KlantcontactFactory.create() + data = { + "klantcontact": None, + "wasKlantcontact": {"uuid": str(klantcontact3.uuid)}, + "objectidentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertIsNone(data["klantcontact"]) + self.assertEqual(data["wasKlantcontact"]["uuid"], str(klantcontact3.uuid)) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_update_onderwerpobject(self): + ( + klantcontact, + klantcontact2, + klantcontact3, + klantcontact4, + ) = KlantcontactFactory.create_batch(4) + onderwerpobject = OnderwerpobjectFactory.create( + klantcontact=klantcontact, + was_klantcontact=klantcontact3, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:onderwerpobject-detail", + kwargs={"uuid": str(onderwerpobject.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["klantcontact"]["uuid"], str(klantcontact.uuid)) + self.assertEqual(data["wasKlantcontact"]["uuid"], str(klantcontact3.uuid)) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "klantcontact": {"uuid": str(klantcontact2.uuid)}, + "wasKlantcontact": {"uuid": str(klantcontact4.uuid)}, + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["klantcontact"]["uuid"], str(klantcontact2.uuid)) + self.assertEqual(data["wasKlantcontact"]["uuid"], str(klantcontact4.uuid)) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + with self.subTest("unset_klantcontact"): + data = { + "klantcontact": None, + "wasKlantcontact": None, + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertIsNone(data["klantcontact"]) + self.assertIsNone(data["wasKlantcontact"]) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_partial_update_onderwerpobject(self): + klantcontact, klantcontact2 = KlantcontactFactory.create_batch(2) + onderwerpobject = OnderwerpobjectFactory.create( + klantcontact=klantcontact, + was_klantcontact=klantcontact2, + objectidentificator_objecttype="objecttype", + objectidentificator_soort_object_id="soortObjectId", + objectidentificator_object_id="objectId", + objectidentificator_register="register", + ) + detail_url = reverse( + "klantinteracties:onderwerpobject-detail", + kwargs={"uuid": str(onderwerpobject.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["klantcontact"]["uuid"], str(klantcontact.uuid)) + self.assertEqual(data["wasKlantcontact"]["uuid"], str(klantcontact2.uuid)) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "objectidentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.patch(detail_url, data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + + self.assertEqual(data["klantcontact"]["uuid"], str(klantcontact.uuid)) + self.assertEqual(data["wasKlantcontact"]["uuid"], str(klantcontact2.uuid)) + self.assertEqual( + data["objectidentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_destroy_onderwerpobject(self): + onderwerpobject = OnderwerpobjectFactory.create() + detail_url = reverse( + "klantinteracties:onderwerpobject-detail", + kwargs={"uuid": str(onderwerpobject.uuid)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:onderwerpobject-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_partijen.py b/src/openklant/components/klantinteracties/api/tests/test_partijen.py new file mode 100644 index 00000000..2f6cab8d --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_partijen.py @@ -0,0 +1,1315 @@ +from rest_framework import status +from rest_framework.test import APITestCase +from vng_api_common.tests import JWTAuthMixin, reverse + +from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( + DigitaalAdresFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, +) +from openklant.components.klantinteracties.models.tests.factories.partijen import ( + ContactpersoonFactory, + OrganisatieFactory, + PartijFactory, + PartijIdentificatorFactory, + PersoonFactory, +) + + +class PartijTests(JWTAuthMixin, APITestCase): + def test_list_partij(self): + list_url = reverse("klantinteracties:partij-list") + PartijFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_partij(self): + partij = PartijFactory.create() + detail_url = reverse( + "klantinteracties:partij-detail", kwargs={"uuid": str(partij.uuid)} + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_partij(self): + vertegenwoordigde = PartijFactory.create() + betrokkene = BetrokkeneFactory.create() + digitaal_adres, digitaal_adres2 = DigitaalAdresFactory.create_batch(2) + partij_identificator = PartijIdentificatorFactory.create() + list_url = reverse("klantinteracties:partij-list") + data = { + "nummer": "1298329191", + "interneNotitie": "interneNotitie", + "betrokkenen": [{"uuid": str(betrokkene.uuid)}], + "digitaleAdressen": [{"uuid": str(digitaal_adres.uuid)}], + "voorkeursDigitaalAdres": {"uuid": str(digitaal_adres.uuid)}, + "vertegenwoordigde": [{"uuid": str(vertegenwoordigde.uuid)}], + "partijIdentificatoren": [{"uuid": str(partij_identificator.uuid)}], + "soortPartij": "persoon", + "indicatieGeheimhouding": True, + "voorkeurstaal": "ndl", + "indicatieActief": True, + "bezoekadres": { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + "correspondentieadres": { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + } + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + data = response.json() + + self.assertEqual(len(data["partijIdentificatoren"]), 1) + self.assertEqual(len(data["betrokkenen"]), 1) + + self.assertEqual(data["nummer"], "1298329191") + self.assertEqual(data["interneNotitie"], "interneNotitie") + self.assertEqual(data["betrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["digitaleAdressen"][0]["uuid"], str(digitaal_adres.uuid)) + self.assertEqual( + data["voorkeursDigitaalAdres"]["uuid"], str(digitaal_adres.uuid) + ) + self.assertEqual( + data["vertegenwoordigde"][0]["uuid"], str(vertegenwoordigde.uuid) + ) + self.assertEqual( + data["partijIdentificatoren"][0]["uuid"], str(partij_identificator.uuid) + ) + self.assertEqual(data["soortPartij"], "persoon") + self.assertTrue(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ndl") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + + with self.subTest("voorkeurs_adres_must_be_given_digitaal_adres_validation"): + data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres2.uuid)} + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + response_data = response.json() + self.assertEqual( + response_data["invalidParams"], + [ + { + "name": "voorkeursDigitaalAdres", + "code": "invalid", + "reason": "Het voorkeurs adres moet een gelinkte digitaal adres zijn.", + } + ], + ) + + with self.subTest("create_partij_without_foreignkey_relations"): + data["betrokkenen"] = [] + data["digitaleAdressen"] = [] + data["voorkeursDigitaalAdres"] = None + data["vertegenwoordigde"] = [] + data["partijIdentificatoren"] = [] + + response = self.client.post(list_url, data) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response_data = response.json() + + self.assertEqual(response_data["nummer"], "1298329191") + self.assertEqual(response_data["interneNotitie"], "interneNotitie") + self.assertEqual(response_data["betrokkenen"], []) + self.assertEqual(response_data["digitaleAdressen"], []) + self.assertIsNone(response_data["voorkeursDigitaalAdres"]) + self.assertEqual(response_data["vertegenwoordigde"], []) + self.assertEqual(response_data["partijIdentificatoren"], []) + self.assertEqual(response_data["soortPartij"], "persoon") + self.assertTrue(response_data["indicatieGeheimhouding"]) + self.assertEqual(response_data["voorkeurstaal"], "ndl") + self.assertTrue(response_data["indicatieActief"]) + self.assertEqual( + response_data["bezoekadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + response_data["correspondentieadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + + def test_update_partij(self): + vertegenwoordigde, vertegenwoordigde2 = PartijFactory.create_batch(2) + betrokkene = BetrokkeneFactory.create() + partij_identificator = PartijIdentificatorFactory.create() + partij = PartijFactory.create( + nummer="1298329191", + interne_notitie="interneNotitie", + voorkeurs_digitaal_adres=None, + vertegenwoordigde=[vertegenwoordigde], + soort_partij="persoon", + indicatie_geheimhouding=True, + voorkeurstaal="ndl", + indicatie_actief=True, + bezoekadres_nummeraanduiding_id="095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + bezoekadres_adresregel1="adres1", + bezoekadres_adresregel2="adres2", + bezoekadres_adresregel3="adres3", + bezoekadres_land="6030", + correspondentieadres_nummeraanduiding_id="095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + correspondentieadres_adresregel1="adres1", + correspondentieadres_adresregel2="adres2", + correspondentieadres_adresregel3="adres3", + correspondentieadres_land="6030", + ) + betrokkene2 = BetrokkeneFactory.create(partij=partij) + + digitaal_adres = DigitaalAdresFactory.create(partij=partij) + digitaal_adres2 = DigitaalAdresFactory.create() + partij_identificator2 = PartijIdentificatorFactory.create(partij=partij) + + detail_url = reverse( + "klantinteracties:partij-detail", kwargs={"uuid": str(partij.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(len(data["partijIdentificatoren"]), 1) + self.assertEqual(len(data["betrokkenen"]), 1) + + self.assertEqual(data["nummer"], "1298329191") + self.assertEqual(data["interneNotitie"], "interneNotitie") + self.assertEqual(data["betrokkenen"][0]["uuid"], str(betrokkene2.uuid)) + self.assertEqual( + data["digitaleAdressen"], + [ + { + "uuid": str(digitaal_adres.uuid), + "url": f"http://testserver/klantinteracties/api/v1/digitaleadressen/{str(digitaal_adres.uuid)}", + }, + ], + ) + self.assertIsNone(data["voorkeursDigitaalAdres"]) + self.assertEqual( + data["vertegenwoordigde"][0]["uuid"], str(vertegenwoordigde.uuid) + ) + self.assertEqual( + data["partijIdentificatoren"][0]["uuid"], str(partij_identificator2.uuid) + ) + self.assertEqual(data["soortPartij"], "persoon") + self.assertTrue(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ndl") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + + data = { + "nummer": "6427834668", + "interneNotitie": "changed", + "betrokkenen": [{"uuid": str(betrokkene.uuid)}], + "digitaleAdressen": [{"uuid": str(digitaal_adres2.uuid)}], + "voorkeursDigitaalAdres": {"uuid": str(digitaal_adres2.uuid)}, + "vertegenwoordigde": [{"uuid": str(vertegenwoordigde2.uuid)}], + "partijIdentificatoren": [{"uuid": str(partij_identificator.uuid)}], + "soortPartij": "organisatie", + "indicatieGeheimhouding": False, + "voorkeurstaal": "ger", + "indicatieActief": False, + "bezoekadres": { + "nummeraanduidingId": "f78sd8f-uh45-34km-2o3n-aasdasdasc9g", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + "correspondentieadres": { + "nummeraanduidingId": "sd76f7sd-j4nr-a9s8-83ec-sad89f79a7sd", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(len(data["partijIdentificatoren"]), 1) + self.assertEqual(len(data["betrokkenen"]), 1) + + self.assertEqual(data["nummer"], "6427834668") + self.assertEqual(data["interneNotitie"], "changed") + self.assertEqual(data["betrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual( + data["digitaleAdressen"], + [ + { + "uuid": str(digitaal_adres2.uuid), + "url": f"http://testserver/klantinteracties/api/v1/digitaleadressen/{str(digitaal_adres2.uuid)}", + }, + ], + ) + self.assertEqual( + data["voorkeursDigitaalAdres"]["uuid"], str(digitaal_adres2.uuid) + ) + self.assertEqual( + data["vertegenwoordigde"][0]["uuid"], str(vertegenwoordigde2.uuid) + ) + self.assertEqual( + data["partijIdentificatoren"][0]["uuid"], str(partij_identificator.uuid) + ) + self.assertEqual(data["soortPartij"], "organisatie") + self.assertFalse(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ger") + self.assertFalse(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "f78sd8f-uh45-34km-2o3n-aasdasdasc9g", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "sd76f7sd-j4nr-a9s8-83ec-sad89f79a7sd", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + + with self.subTest( + "test_voorkeurs_digitaal_adres_must_be_part_of_digitale_adressen" + ): + data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres.uuid)} + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + response_data = response.json() + self.assertEqual( + response_data["invalidParams"], + [ + { + "name": "voorkeursDigitaalAdres", + "code": "invalid", + "reason": "Het voorkeurs adres moet een gelinkte digitaal adres zijn.", + } + ], + ) + + with self.subTest( + "test_voorkeurs_adres_can_only_be_given_with_none_empty_digitale_adressen" + ): + data["digitaleAdressen"] = [] + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + response_data = response.json() + self.assertEqual( + response_data["invalidParams"], + [ + { + "name": "voorkeursDigitaalAdres", + "code": "invalid", + "reason": "voorkeursDigitaalAdres mag niet meegegeven worden als digitaleAdressen leeg is.", + } + ], + ) + + with self.subTest("set_foreignkey_fields_to_none"): + data = { + "nummer": "6427834668", + "interneNotitie": "changed", + "betrokkenen": [], + "digitaleAdressen": [], + "voorkeursDigitaalAdres": None, + "vertegenwoordigde": [], + "partijIdentificatoren": [], + "soortPartij": "organisatie", + "indicatieGeheimhouding": False, + "voorkeurstaal": "ger", + "indicatieActief": False, + "bezoekadres": { + "nummeraanduidingId": "f78sd8f-uh45-34km-2o3n-aasdasdasc9g", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + "correspondentieadres": { + "nummeraanduidingId": "sd76f7sd-j4nr-a9s8-83ec-sad89f79a7sd", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["nummer"], "6427834668") + self.assertEqual(data["interneNotitie"], "changed") + self.assertEqual(data["betrokkenen"], []) + self.assertEqual(data["digitaleAdressen"], []) + self.assertIsNone(data["voorkeursDigitaalAdres"]) + self.assertEqual(data["vertegenwoordigde"], []) + self.assertEqual(data["partijIdentificatoren"], []) + self.assertEqual(data["soortPartij"], "organisatie") + self.assertFalse(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ger") + self.assertFalse(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "f78sd8f-uh45-34km-2o3n-aasdasdasc9g", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "sd76f7sd-j4nr-a9s8-83ec-sad89f79a7sd", + "adresregel1": "changed", + "adresregel2": "changed", + "adresregel3": "changed", + "land": "3060", + }, + ) + + def test_partial_update_parij(self): + vertegenwoordigde = PartijFactory.create() + partij = PartijFactory.create( + nummer="1298329191", + interne_notitie="interneNotitie", + voorkeurs_digitaal_adres=None, + vertegenwoordigde=[vertegenwoordigde], + soort_partij="persoon", + indicatie_geheimhouding=True, + voorkeurstaal="ndl", + indicatie_actief=True, + bezoekadres_nummeraanduiding_id="095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + bezoekadres_adresregel1="adres1", + bezoekadres_adresregel2="adres2", + bezoekadres_adresregel3="adres3", + bezoekadres_land="6030", + correspondentieadres_nummeraanduiding_id="095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + correspondentieadres_adresregel1="adres1", + correspondentieadres_adresregel2="adres2", + correspondentieadres_adresregel3="adres3", + correspondentieadres_land="6030", + ) + betrokkene = BetrokkeneFactory.create(partij=partij) + digitaal_adres = DigitaalAdresFactory.create(partij=partij) + partij_identificator = PartijIdentificatorFactory.create(partij=partij) + + detail_url = reverse( + "klantinteracties:partij-detail", kwargs={"uuid": str(partij.uuid)} + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(len(data["partijIdentificatoren"]), 1) + self.assertEqual(len(data["betrokkenen"]), 1) + + self.assertEqual(data["nummer"], "1298329191") + self.assertEqual(data["interneNotitie"], "interneNotitie") + self.assertEqual(data["betrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["digitaleAdressen"][0]["uuid"], str(digitaal_adres.uuid)) + self.assertIsNone(data["voorkeursDigitaalAdres"]) + self.assertEqual( + data["vertegenwoordigde"][0]["uuid"], str(vertegenwoordigde.uuid) + ) + self.assertEqual( + data["partijIdentificatoren"][0]["uuid"], str(partij_identificator.uuid) + ) + self.assertEqual(data["soortPartij"], "persoon") + self.assertTrue(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ndl") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + + data = {"voorkeursDigitaalAdres": {"uuid": str(digitaal_adres.uuid)}} + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(len(data["partijIdentificatoren"]), 1) + self.assertEqual(len(data["betrokkenen"]), 1) + + self.assertEqual(data["nummer"], "1298329191") + self.assertEqual(data["interneNotitie"], "interneNotitie") + self.assertEqual(data["betrokkenen"][0]["uuid"], str(betrokkene.uuid)) + self.assertEqual(data["digitaleAdressen"][0]["uuid"], str(digitaal_adres.uuid)) + self.assertEqual( + data["voorkeursDigitaalAdres"]["uuid"], str(digitaal_adres.uuid) + ) + self.assertEqual( + data["vertegenwoordigde"][0]["uuid"], str(vertegenwoordigde.uuid) + ) + self.assertEqual( + data["partijIdentificatoren"][0]["uuid"], str(partij_identificator.uuid) + ) + self.assertEqual(data["soortPartij"], "persoon") + self.assertTrue(data["indicatieGeheimhouding"]) + self.assertEqual(data["voorkeurstaal"], "ndl") + self.assertTrue(data["indicatieActief"]) + self.assertEqual( + data["bezoekadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + self.assertEqual( + data["correspondentieadres"], + { + "nummeraanduidingId": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "adresregel1": "adres1", + "adresregel2": "adres2", + "adresregel3": "adres3", + "land": "6030", + }, + ) + + def test_destroy_partij(self): + partij = PartijFactory.create() + detail_url = reverse( + "klantinteracties:partij-detail", kwargs={"uuid": str(partij.uuid)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:partij-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class OrganisatieTests(JWTAuthMixin, APITestCase): + def test_list_organisatie(self): + list_url = reverse("klantinteracties:organisatie-list") + OrganisatieFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_organisatie(self): + organisatie = OrganisatieFactory.create() + detail_url = reverse( + "klantinteracties:organisatie-detail", kwargs={"id": str(organisatie.id)} + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_organisatie(self): + partij = PartijFactory.create() + list_url = reverse("klantinteracties:organisatie-list") + data = { + "partij": {"uuid": str(partij.uuid)}, + "contactpersoon": [], + "naam": "whitechapel", + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["contactpersoon"], []) + self.assertEqual(data["naam"], "whitechapel") + + with self.subTest("check_if_partij_unique_validation_works"): + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_create_organisatie_with_contact_personen(self): + contactpersoon = ContactpersoonFactory.create(organisatie=None) + partij = PartijFactory.create() + + list_url = reverse("klantinteracties:organisatie-list") + data = { + "partij": {"uuid": str(partij.uuid)}, + "contactpersoon": [{"id": contactpersoon.id}], + "naam": "whitechapel", + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["contactpersoon"][0]["id"], contactpersoon.id) + self.assertEqual(data["naam"], "whitechapel") + + with self.subTest("test_contactpersoon_unique"): + partij2 = PartijFactory.create() + data = { + "partij": {"uuid": str(partij2.uuid)}, + "contactpersoon": [{"id": contactpersoon.id}], + "naam": "whitechapel", + } + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "contactpersoon.0.id") + + with self.subTest("test_partij_unique"): + data = { + "partij": {"uuid": str(partij.uuid)}, + "contactpersoon": [], + "naam": "whitechapel", + } + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_update_organisatie(self): + partij, partij2 = PartijFactory.create_batch(2) + contactpersoon = ContactpersoonFactory.create() + organisatie = OrganisatieFactory.create(partij=partij, naam="whitechapel") + detail_url = reverse( + "klantinteracties:organisatie-detail", kwargs={"id": organisatie.id} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["naam"], "whitechapel") + + data = { + "partij": {"uuid": str(partij2.uuid)}, + "contactpersoon": [{"id": contactpersoon.id}], + "naam": "changed", + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij2.uuid)) + self.assertEqual(data["contactpersoon"][0]["id"], contactpersoon.id) + self.assertEqual(data["naam"], "changed") + + with self.subTest("check_if_changing_contactpersonen_removes_relation"): + data = { + "contactpersoon": [], + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(data["contactpersoon"], []) + + with self.subTest("check_if_partij_unique_validation_works"): + OrganisatieFactory.create(partij=partij) + data = { + "partij": {"uuid": str(partij.uuid)}, + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_partial_update_organisatie(self): + partij = PartijFactory.create() + organisatie = OrganisatieFactory.create(partij=partij, naam="whitechapel") + detail_url = reverse( + "klantinteracties:organisatie-detail", kwargs={"id": str(organisatie.id)} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["naam"], "whitechapel") + + data = { + "naam": "changed", + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["naam"], "changed") + + def test_destroy_organisatie(self): + organisatie = OrganisatieFactory.create() + detail_url = reverse( + "klantinteracties:organisatie-detail", kwargs={"id": str(organisatie.id)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:organisatie-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class PersoonTests(JWTAuthMixin, APITestCase): + def test_list_persoon(self): + list_url = reverse("klantinteracties:persoon-list") + PersoonFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_persoon(self): + persoon = PersoonFactory.create() + detail_url = reverse( + "klantinteracties:persoon-detail", kwargs={"id": str(persoon.id)} + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_persoon(self): + partij = PartijFactory.create() + list_url = reverse("klantinteracties:persoon-list") + data = { + "partij": {"uuid": str(partij.uuid)}, + "contactnaam": { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + with self.subTest("check_if_partij_unique_validation_works"): + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_update_persoon(self): + partij, partij2 = PartijFactory.create_batch(2) + persoon = PersoonFactory.create( + partij=partij, + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + ) + detail_url = reverse( + "klantinteracties:persoon-detail", kwargs={"id": persoon.id} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + data = { + "partij": {"uuid": str(partij2.uuid)}, + "contactnaam": { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij2.uuid)) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + ) + + with self.subTest("check_if_partij_unique_validation_works"): + persoon2 = PersoonFactory.create() + new_detail_url = reverse( + "klantinteracties:persoon-detail", kwargs={"id": persoon2.id} + ) + response = self.client.put(new_detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_partial_update_persoon(self): + partij = PartijFactory.create() + persoon = PersoonFactory.create( + partij=partij, + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + ) + detail_url = reverse( + "klantinteracties:persoon-detail", kwargs={"id": persoon.id} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + data = { + "contactnaam": { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + ) + + def test_destroy_persoon(self): + persoon = PersoonFactory.create() + detail_url = reverse( + "klantinteracties:persoon-detail", kwargs={"id": str(persoon.id)} + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:persoon-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class ContactpersoonTests(JWTAuthMixin, APITestCase): + def test_list_contact_persoon(self): + list_url = reverse("klantinteracties:contactpersoon-list") + ContactpersoonFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_contact_persoon(self): + contact_persoon = ContactpersoonFactory.create() + detail_url = reverse( + "klantinteracties:contactpersoon-detail", + kwargs={"id": str(contact_persoon.id)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_contact_persoon(self): + partij = PartijFactory.create() + organisatie = OrganisatieFactory.create() + list_url = reverse("klantinteracties:contactpersoon-list") + data = { + "partij": {"uuid": str(partij.uuid)}, + "werkte_voor_organisatie": {"id": str(organisatie.id)}, + "contactnaam": { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["werkteVoorOrganisatie"]["id"], organisatie.id) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + with self.subTest("check_if_partij_unique_validation_works"): + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_update_contact_persoon(self): + partij, partij2 = PartijFactory.create_batch(2) + organisatie, organisatie2 = OrganisatieFactory.create_batch(2) + contact_persoon = ContactpersoonFactory.create( + partij=partij, + organisatie=organisatie, + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + ) + detail_url = reverse( + "klantinteracties:contactpersoon-detail", kwargs={"id": contact_persoon.id} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["werkteVoorOrganisatie"]["id"], organisatie.id) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + data = { + "partij": {"uuid": str(partij2.uuid)}, + "werkteVoorOrganisatie": {"id": organisatie2.id}, + "contactnaam": { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij2.uuid)) + self.assertEqual(data["werkteVoorOrganisatie"]["id"], organisatie2.id) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + ) + + with self.subTest("check_if_partij_unique_validation_works"): + contact_persoon2 = ContactpersoonFactory.create() + new_detail_url = reverse( + "klantinteracties:contactpersoon-detail", + kwargs={"id": contact_persoon2.id}, + ) + response = self.client.put(new_detail_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = response.json() + self.assertEqual(data["invalidParams"][0]["name"], "partij.uuid") + + def test_partial_update_contact_persoon(self): + partij = PartijFactory.create() + organisatie = OrganisatieFactory.create() + contact_persoon = ContactpersoonFactory.create( + partij=partij, + organisatie=organisatie, + contactnaam_voorletters="P", + contactnaam_voornaam="Phil", + contactnaam_voorvoegsel_achternaam="", + contactnaam_achternaam="Bozeman", + ) + detail_url = reverse( + "klantinteracties:contactpersoon-detail", kwargs={"id": contact_persoon.id} + ) + + response = self.client.get(detail_url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["werkteVoorOrganisatie"]["id"], organisatie.id) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "P", + "voornaam": "Phil", + "voorvoegselAchternaam": "", + "achternaam": "Bozeman", + }, + ) + + data = { + "contactnaam": { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["partij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["werkteVoorOrganisatie"]["id"], organisatie.id) + self.assertEqual( + data["contactnaam"], + { + "voorletters": "changed", + "voornaam": "changed", + "voorvoegselAchternaam": "changed", + "achternaam": "changed", + }, + ) + + def test_destroy_contact_persoon(self): + contact_persoon = ContactpersoonFactory.create() + detail_url = reverse( + "klantinteracties:contactpersoon-detail", + kwargs={"id": str(contact_persoon.id)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:contactpersoon-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) + + +class PartijIdentificatorTests(JWTAuthMixin, APITestCase): + def test_list_partij_indetificator(self): + list_url = reverse("klantinteracties:partijidentificator-list") + PartijIdentificatorFactory.create_batch(2) + + response = self.client.get(list_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json() + self.assertEqual(len(data["results"]), 2) + + def test_read_partij_identificator(self): + partij_identificator = PartijIdentificatorFactory.create() + detail_url = reverse( + "klantinteracties:partijidentificator-detail", + kwargs={"uuid": str(partij_identificator.uuid)}, + ) + + response = self.client.get(detail_url) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_create_partij_indetificator(self): + list_url = reverse("klantinteracties:partijidentificator-list") + partij = PartijFactory.create() + data = { + "identificeerdePartij": {"uuid": str(partij.uuid)}, + "anderePartijIdentificator": "anderePartijIdentificator", + "partijIdentificator": { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + data = response.json() + + self.assertEqual(data["identificeerdePartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["anderePartijIdentificator"], "anderePartijIdentificator") + self.assertEqual( + data["partijIdentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_update_partij_indetificator(self): + partij, partij2 = PartijFactory.create_batch(2) + partij_identificator = PartijIdentificatorFactory.create( + partij=partij, + andere_partij_identificator="anderePartijIdentificator", + partij_identificator_objecttype="objecttype", + partij_identificator_soort_object_id="soortObjectId", + partij_identificator_object_id="objectId", + partij_identificator_register="register", + ) + + detail_url = reverse( + "klantinteracties:partijidentificator-detail", + kwargs={"uuid": str(partij_identificator.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["identificeerdePartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["anderePartijIdentificator"], "anderePartijIdentificator") + self.assertEqual( + data["partijIdentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "identificeerdePartij": {"uuid": str(partij2.uuid)}, + "anderePartijIdentificator": "changed", + "partijIdentificator": { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + } + + response = self.client.put(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["identificeerdePartij"]["uuid"], str(partij2.uuid)) + self.assertEqual(data["anderePartijIdentificator"], "changed") + self.assertEqual( + data["partijIdentificator"], + { + "objecttype": "changed", + "soortObjectId": "changed", + "objectId": "changed", + "register": "changed", + }, + ) + + def test_partial_update_partij_indetificator(self): + partij = PartijFactory.create() + partij_identificator = PartijIdentificatorFactory.create( + partij=partij, + andere_partij_identificator="anderePartijIdentificator", + partij_identificator_objecttype="objecttype", + partij_identificator_soort_object_id="soortObjectId", + partij_identificator_object_id="objectId", + partij_identificator_register="register", + ) + + detail_url = reverse( + "klantinteracties:partijidentificator-detail", + kwargs={"uuid": str(partij_identificator.uuid)}, + ) + response = self.client.get(detail_url) + data = response.json() + + self.assertEqual(data["identificeerdePartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["anderePartijIdentificator"], "anderePartijIdentificator") + self.assertEqual( + data["partijIdentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + data = { + "anderePartijIdentificator": "changed", + } + + response = self.client.patch(detail_url, data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + + self.assertEqual(data["identificeerdePartij"]["uuid"], str(partij.uuid)) + self.assertEqual(data["anderePartijIdentificator"], "changed") + self.assertEqual( + data["partijIdentificator"], + { + "objecttype": "objecttype", + "soortObjectId": "soortObjectId", + "objectId": "objectId", + "register": "register", + }, + ) + + def test_destroy_partij_identificator(self): + partij_identificator = PartijIdentificatorFactory.create() + detail_url = reverse( + "klantinteracties:partijidentificator-detail", + kwargs={"uuid": str(partij_identificator.uuid)}, + ) + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + list_url = reverse("klantinteracties:partijidentificator-list") + response = self.client.get(list_url) + data = response.json() + self.assertEqual(data["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/tests/test_validators.py b/src/openklant/components/klantinteracties/api/tests/test_validators.py new file mode 100644 index 00000000..d13976d9 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/tests/test_validators.py @@ -0,0 +1,130 @@ +from uuid import uuid4 + +from django.test import TestCase + +from rest_framework import serializers + +from openklant.components.klantinteracties.api.validators import ( + actor_exists, + betrokkene_exists, + bijlage_exists, + contactpersoon_exists, + digitaal_adres_exists, + internetaak_exists, + klantcontact_exists, + onderwerpobject_exists, + organisatie_exists, + partij_exists, + partij_identificator_exists, +) +from openklant.components.klantinteracties.models.tests.factories.actoren import ( + ActorFactory, +) +from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( + DigitaalAdresFactory, +) +from openklant.components.klantinteracties.models.tests.factories.internetaken import ( + InterneTaakFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, + BijlageFactory, + KlantcontactFactory, + OnderwerpobjectFactory, +) +from openklant.components.klantinteracties.models.tests.factories.partijen import ( + ContactpersoonFactory, + OrganisatieFactory, + PartijFactory, + PartijIdentificatorFactory, +) + + +class FieldValidatorsTests(TestCase): + def test_actor(self): + actor = ActorFactory.create() + with self.subTest("exists"): + self.assertIsNone(actor_exists(actor.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + actor_exists(str(uuid4())) + + def test_betrokkene(self): + betrokkene = BetrokkeneFactory.create() + with self.subTest("exists"): + self.assertIsNone(betrokkene_exists(betrokkene.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + betrokkene_exists(str(uuid4())) + + def test_bijlage(self): + bijlage = BijlageFactory.create() + with self.subTest("exists"): + self.assertIsNone(bijlage_exists(bijlage.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + bijlage_exists(str(uuid4())) + + def test_contactpersoon(self): + contactpersoon = ContactpersoonFactory.create() + with self.subTest("exists"): + self.assertIsNone(contactpersoon_exists(contactpersoon.id)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + contactpersoon_exists(contactpersoon.id + 1) + + def test_digitaal_adres(self): + digitaal_adres = DigitaalAdresFactory.create() + with self.subTest("exists"): + self.assertIsNone(digitaal_adres_exists(digitaal_adres.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + digitaal_adres_exists(str(uuid4())) + + def test_internetaak(self): + internetaak = InterneTaakFactory.create() + with self.subTest("exists"): + self.assertIsNone(internetaak_exists(internetaak.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + internetaak_exists(str(uuid4())) + + def test_klantcontact(self): + klantcontact = KlantcontactFactory.create() + with self.subTest("exists"): + self.assertIsNone(klantcontact_exists(klantcontact.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + klantcontact_exists(str(uuid4())) + + def test_onderwerpobject(self): + onderwerpobject = OnderwerpobjectFactory.create() + with self.subTest("exists"): + self.assertIsNone(onderwerpobject_exists(onderwerpobject.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + onderwerpobject_exists(str(uuid4())) + + def test_organisatie(self): + organisatie = OrganisatieFactory.create() + with self.subTest("exists"): + self.assertIsNone(organisatie_exists(organisatie.id)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + organisatie_exists(organisatie.id + 1) + + def test_partij(self): + partij = PartijFactory.create() + with self.subTest("exists"): + self.assertIsNone(partij_exists(partij.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + partij_exists(str(uuid4())) + + def test_partij_identificator(self): + partij_identificator = PartijIdentificatorFactory.create() + with self.subTest("exists"): + self.assertIsNone(partij_identificator_exists(partij_identificator.uuid)) + with self.subTest("doesn't_exist"): + with self.assertRaises(serializers.ValidationError): + partij_identificator_exists(str(uuid4())) diff --git a/src/openklant/components/klantinteracties/api/urls.py b/src/openklant/components/klantinteracties/api/urls.py new file mode 100644 index 00000000..ddcf6622 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/urls.py @@ -0,0 +1,92 @@ +from django.conf import settings +from django.urls import include, path, re_path + +from vng_api_common import routers +from vng_api_common.schema import SchemaView as _SchemaView + +from openklant.components.klantinteracties.api.viewsets.actoren import ( + ActorViewSet, + GeautomatiseerdeActorViewSet, + MedewerkerViewSet, + OrganisatorischeEenheidViewSet, +) +from openklant.components.klantinteracties.api.viewsets.digitaal_adres import ( + DigitaalAdresViewSet, +) +from openklant.components.klantinteracties.api.viewsets.internetaken import ( + InterneTaakViewSet, +) +from openklant.components.klantinteracties.api.viewsets.klantcontacten import ( + BetrokkeneViewSet, + BijlageViewSet, + KlantcontactViewSet, + OnderwerpobjectViewSet, +) +from openklant.components.klantinteracties.api.viewsets.partijen import ( + ContactpersoonViewSet, + OrganisatieViewSet, + PartijIdentificatorViewSet, + PartijViewSet, + PersoonViewSet, +) + +from .schema import info + +app_name = "klantinteracties" + +router = routers.DefaultRouter() +router.register("actoren", ActorViewSet) +router.register("geautomatiseerde-actoren", GeautomatiseerdeActorViewSet) +router.register("medewerker", MedewerkerViewSet) +router.register("organisatorische-eenheid", OrganisatorischeEenheidViewSet) + +router.register("digitaleadressen", DigitaalAdresViewSet) + +router.register("klantcontacten", KlantcontactViewSet) +router.register("betrokkenen", BetrokkeneViewSet) +router.register("onderwerpobjecten", OnderwerpobjectViewSet) +router.register("bijlagen", BijlageViewSet) + +router.register("internetaken", InterneTaakViewSet) + +router.register("partijen", PartijViewSet) +router.register("organisaties", OrganisatieViewSet) +router.register("persoon", PersoonViewSet) +router.register("contact-persoon", ContactpersoonViewSet) +router.register("partij-identificatoren", PartijIdentificatorViewSet) + + +class SchemaView(_SchemaView): + schema_path = settings.SPEC_URL["klantinteracties"] + info = info + + +# TODO: the EndpointEnumerator seems to choke on path and re_path + +urlpatterns = [ + re_path( + r"^v(?P\d+)/", + include( + [ + # API documentation + re_path( + r"^schema/openapi(?P\.json|\.yaml)$", + SchemaView.without_ui(cache_timeout=None), + name="schema-json-klantinteracties", + ), + re_path( + r"^schema/$", + SchemaView.with_ui("redoc", cache_timeout=None), + name="schema-redoc-klantinteracties", + ), + # actual API + re_path(r"^", include(router.urls)), + # should not be picked up by drf-yasg + path( + "", router.APIRootView.as_view(), name="api-root-klantinteracties" + ), + path("", include("vng_api_common.api.urls")), + ] + ), + ) +] diff --git a/src/openklant/components/klantinteracties/api/validators.py b/src/openklant/components/klantinteracties/api/validators.py new file mode 100644 index 00000000..832ae1ee --- /dev/null +++ b/src/openklant/components/klantinteracties/api/validators.py @@ -0,0 +1,98 @@ +from django.utils.translation import gettext_lazy as _ + +from rest_framework import serializers + +from openklant.components.klantinteracties.models.actoren import Actor +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres +from openklant.components.klantinteracties.models.internetaken import InterneTaak +from openklant.components.klantinteracties.models.klantcontacten import ( + Betrokkene, + Bijlage, + Klantcontact, + Onderwerpobject, +) +from openklant.components.klantinteracties.models.partijen import ( + Contactpersoon, + Organisatie, + Partij, + PartijIdentificator, +) + + +def actor_exists(value): + try: + Actor.objects.get(uuid=str(value)) + except Actor.DoesNotExist: + raise serializers.ValidationError(_("Actor object doesn't exist.")) + + +def betrokkene_exists(value): + try: + Betrokkene.objects.get(uuid=str(value)) + except Betrokkene.DoesNotExist: + raise serializers.ValidationError(_("Betrokkene object doesn't exist.")) + + +def bijlage_exists(value): + try: + Bijlage.objects.get(uuid=str(value)) + except Bijlage.DoesNotExist: + raise serializers.ValidationError(_("Bijlage object doesn't exist.")) + + +def contactpersoon_exists(value): + try: + Contactpersoon.objects.get(id=int(value)) + except Contactpersoon.DoesNotExist: + raise serializers.ValidationError(_("Contactpersoon object doesn't exist.")) + + +def digitaal_adres_exists(value): + try: + DigitaalAdres.objects.get(uuid=str(value)) + except DigitaalAdres.DoesNotExist: + raise serializers.ValidationError(_("DigitaalAdres object doesn't exist.")) + + +def internetaak_exists(value): + try: + InterneTaak.objects.get(uuid=str(value)) + except InterneTaak.DoesNotExist: + raise serializers.ValidationError(_("InterneTaak object doesn't exist.")) + + +def klantcontact_exists(value): + try: + Klantcontact.objects.get(uuid=str(value)) + except Klantcontact.DoesNotExist: + raise serializers.ValidationError(_("Klantcontact object doesn't exist.")) + + +def onderwerpobject_exists(value): + try: + Onderwerpobject.objects.get(uuid=(str(value))) + except Onderwerpobject.DoesNotExist: + raise serializers.ValidationError(_("Onderwerpobject object doesn't exist.")) + + +def organisatie_exists(value): + try: + Organisatie.objects.get(id=int(value)) + except Organisatie.DoesNotExist: + raise serializers.ValidationError(_("Organisatie object doesn't exist.")) + + +def partij_exists(value): + try: + Partij.objects.get(uuid=str(value)) + except Partij.DoesNotExist: + raise serializers.ValidationError(_("Partij object doesn't exist.")) + + +def partij_identificator_exists(value): + try: + PartijIdentificator.objects.get(uuid=str(value)) + except PartijIdentificator.DoesNotExist: + raise serializers.ValidationError( + _("PartijIdentificator object doesn't exist.") + ) diff --git a/src/openklant/components/klantinteracties/api/viewsets/actoren.py b/src/openklant/components/klantinteracties/api/viewsets/actoren.py new file mode 100644 index 00000000..e27fad49 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/viewsets/actoren.py @@ -0,0 +1,148 @@ +from rest_framework import viewsets +from rest_framework.pagination import PageNumberPagination + +from openklant.components.klantinteracties.api.filterset.actoren import ActorenFilterSet +from openklant.components.klantinteracties.api.serializers.actoren import ( + ActorSerializer, + GeautomatiseerdeActorSerializer, + MedewerkerSerializer, + OrganisatorischeEenheidSerializer, +) +from openklant.components.klantinteracties.models.actoren import ( + Actor, + GeautomatiseerdeActor, + Medewerker, + OrganisatorischeEenheid, +) + + +class ActorViewSet(viewsets.ModelViewSet): + """ + Iets dat of iemand die voor de gemeente werkzaamheden uitvoert. + + create: + Maak een actor aan. + + Maak een actor aan. + + list: + Alle actoren opvragen. + + Alle actoren opvragen. + + retrieve: + Een specifiek actor opvragen. + + Een specifiek actor opvragen. + + update: + Werk een actor in zijn geheel bij. + + Werk een actor in zijn geheel bij. + + partial_update: + Werk een actor deels bij. + + Werk een actor deels bij. + + destroy: + Verwijder een actor. + + Verwijder een actor. + """ + + queryset = Actor.objects.order_by("-pk") + serializer_class = ActorSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filterset_class = ActorenFilterSet + + +class GeautomatiseerdeActorViewSet(viewsets.ModelViewSet): + """ + Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert. + create: + Maak een geautomatiseerde actor aan. + Maak een geautomatiseerde actor aan. + list: + Alle geautomatiseerde actoren opvragen. + Alle geautomatiseerde actoren opvragen. + retrieve: + Een specifiek geautomatiseerde actor opvragen. + Een specifiek geautomatiseerde actor opvragen. + update: + Werk een geautomatiseerde actor in zijn geheel bij. + Werk een geautomatiseerde actor in zijn geheel bij. + partial_update: + Werk een geautomatiseerde actor deels bij. + Werk een geautomatiseerde actor deels bij. + destroy: + Verwijder een geautomatiseerde actor. + Verwijder een geautomatiseerde actor. + """ + + queryset = GeautomatiseerdeActor.objects.order_by("-pk") + serializer_class = GeautomatiseerdeActorSerializer + lookup_field = "id" + pagination_class = PageNumberPagination + + +class MedewerkerViewSet(viewsets.ModelViewSet): + """ + Een MEDEWERKER van de organisatie die zaken behandelt uit hoofde van zijn of + haar functie binnen een ORGANISATORISCHE EENHEID. + create: + Maak een medewerker aan. + Maak een medewerker aan. + list: + Alle medewerkers opvragen. + Alle medewerkers opvragen. + retrieve: + Een specifiek medewerker opvragen. + Een specifiek medewerker opvragen. + update: + Werk een medewerker in zijn geheel bij. + Werk een medewerker in zijn geheel bij. + partial_update: + Werk een medewerker deels bij. + Werk een medewerker deels bij. + destroy: + Verwijder een medewerker. + Verwijder een medewerker. + """ + + queryset = Medewerker.objects.order_by("-pk") + serializer_class = MedewerkerSerializer + lookup_field = "id" + pagination_class = PageNumberPagination + + +class OrganisatorischeEenheidViewSet(viewsets.ModelViewSet): + """ + Het deel van een functioneel afgebakend onderdeel binnen de organisatie dat + haar activiteiten uitvoert binnen een VESTIGING VAN ZAAKBEHANDELENDE ORGANISATIE + en die verantwoordelijk is voor de behandeling van zaken. + create: + Maak een organisatorische eenheid aan. + Maak een organisatorische eenheid aan. + list: + Alle organisatorische eenheid opvragen. + Alle organisatorische eenheid opvragen. + retrieve: + Een specifiek organisatorische eenheid opvragen. + Een specifiek organisatorische eenheid opvragen. + update: + Werk een organisatorische eenheid in zijn geheel bij. + Werk een organisatorische eenheid in zijn geheel bij. + partial_update: + Werk een organisatorische eenheid deels bij. + Werk een organisatorische eenheid deels bij. + destroy: + Verwijder een organisatorische eenheid. + Verwijder een organisatorische eenheid. + """ + + queryset = OrganisatorischeEenheid.objects.order_by("-pk") + serializer_class = OrganisatorischeEenheidSerializer + lookup_field = "id" + pagination_class = PageNumberPagination diff --git a/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py new file mode 100644 index 00000000..ae79b49b --- /dev/null +++ b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py @@ -0,0 +1,49 @@ +from rest_framework import viewsets +from rest_framework.pagination import PageNumberPagination + +from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( + DigitaalAdresSerializer, +) +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres + + +class DigitaalAdresViewSet(viewsets.ModelViewSet): + """ + Digitaal adres dat een betrokkene bij klantcontact verstrekte + voor gebruik bij opvolging van een klantcontact. + + create: + Maak een digitaal adres aan. + + Maak een digitaal adres aan. + + list: + Alle digitale adressen opvragen. + + Alle digitale adressen opvragen. + + retrieve: + Een specifiek digitaal adres opvragen. + + Een specifiek digitaal adres opvragen. + + update: + Werk een digitaal adres in zijn geheel bij. + + Werk een digitaal adres in zijn geheel bij. + + partial_update: + Werk een digitaal adres deels bij. + + Werk een digitaal adres deels bij. + + destroy: + Verwijder een digitaal adres. + + Verwijder een digitaal adres. + """ + + queryset = DigitaalAdres.objects.order_by("-pk") + serializer_class = DigitaalAdresSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination diff --git a/src/openklant/components/klantinteracties/api/viewsets/internetaken.py b/src/openklant/components/klantinteracties/api/viewsets/internetaken.py new file mode 100644 index 00000000..2892cf9b --- /dev/null +++ b/src/openklant/components/klantinteracties/api/viewsets/internetaken.py @@ -0,0 +1,57 @@ +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import viewsets +from rest_framework.pagination import PageNumberPagination + +from openklant.components.klantinteracties.api.serializers.internetaken import ( + InterneTaakSerializer, +) +from openklant.components.klantinteracties.models.internetaken import InterneTaak + + +class InterneTaakViewSet(viewsets.ModelViewSet): + """ + Iets dat door een actor moet worden gedaan om opvolging te geven aan een klantcontact. + + create: + Maak een interne taak aan. + + Maak een interne taak aan. + + list: + Alle interne taken opvragen. + + Alle interne taken opvragen. + + retrieve: + Een specifiek interne taak opvragen. + + Een specifiek interne taak opvragen. + + update: + Werk een interne taak in zijn geheel bij. + + Werk een interne taak in zijn geheel bij. + + partial_update: + Werk een interne taak deels bij. + + Werk een interne taak deels bij. + + destroy: + Verwijder een interne taak. + + Verwijder een interne taak. + """ + + queryset = InterneTaak.objects.order_by("-pk") + serializer_class = InterneTaakSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filter_backends = [DjangoFilterBackend] + filterset_fields = [ + "nummer", + "status", + "actor__naam", + "klantcontact__uuid", + "klantcontact__nummer", + ] diff --git a/src/openklant/components/klantinteracties/api/viewsets/klantcontacten.py b/src/openklant/components/klantinteracties/api/viewsets/klantcontacten.py new file mode 100644 index 00000000..7e434564 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/viewsets/klantcontacten.py @@ -0,0 +1,198 @@ +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import viewsets +from rest_framework.pagination import PageNumberPagination + +from openklant.components.klantinteracties.api.filterset.klantcontacten import ( + BetrokkeneFilterSet, + KlantcontactFilterSet, +) +from openklant.components.klantinteracties.api.serializers.klantcontacten import ( + BetrokkeneSerializer, + BijlageSerializer, + KlantcontactSerializer, + OnderwerpobjectSerializer, +) +from openklant.components.klantinteracties.models.klantcontacten import ( + Betrokkene, + Bijlage, + Klantcontact, + Onderwerpobject, +) + + +class KlantcontactViewSet(viewsets.ModelViewSet): + """ + Contact tussen een klant of een vertegenwoordiger van een + klant en de gemeente over een onderwerp. + + create: + Maak een klant contact aan. + + Maak een klant contact aan. + + list: + Alle klanten contacten opvragen. + + Alle klanten contacten opvragen. + + retrieve: + Een specifiek klant contact opvragen. + + Een specifiek klant contact opvragen. + + update: + Werk een klant contact in zijn geheel bij. + + Werk een klant contact in zijn geheel bij. + + partial_update: + Werk een klant contact deels bij. + + Werk een klant contact deels bij. + + destroy: + Verwijder een klant contact. + + Verwijder een klant contact. + """ + + queryset = Klantcontact.objects.order_by("-pk") + serializer_class = KlantcontactSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filterset_class = KlantcontactFilterSet + + +class BetrokkeneViewSet(viewsets.ModelViewSet): + """ + Ofwel betrokkenheid van een partij bij een klantcontact, eventueel aangevuld met + specifiek voor opvolging van dat klantcontact te gebruiken contactgegevens, ofwel + voor opvolging van een klantcontact te gebruiken contactgegevens van een tijdens + dat klantcontact niet als partij gekende persoon. + + create: + Maak een betrokkene aan. + + Maak een betrokkene aan. + + list: + Alle betrokkeneen opvragen. + + Alle betrokkeneen opvragen. + + retrieve: + Een specifiek betrokkene opvragen. + + Een specifiek betrokkene opvragen. + + update: + Werk een betrokkene in zijn geheel bij. + + Werk een betrokkene in zijn geheel bij. + + partial_update: + Werk een betrokkene deels bij. + + Werk een betrokkene deels bij. + + destroy: + Verwijder een betrokkene. + + Verwijder een betrokkene. + """ + + queryset = Betrokkene.objects.order_by("-pk") + serializer_class = BetrokkeneSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filterset_class = BetrokkeneFilterSet + + +class OnderwerpobjectViewSet(viewsets.ModelViewSet): + """ + create: + Maak een onderwerpobject aan. + + Maak een onderwerpobject aan. + + list: + Alle onderwerpobjecten opvragen. + + Alle onderwerpobjecten opvragen. + + retrieve: + Een specifiek onderwerpobject opvragen. + + Een specifiek onderwerpobject opvragen. + + update: + Werk een onderwerpobject in zijn geheel bij. + + Werk een onderwerpobject in zijn geheel bij. + + partial_update: + Werk een onderwerpobject deels bij. + + Werk een onderwerpobject deels bij. + + destroy: + Verwijder een onderwerpobject. + + Verwijder een onderwerpobject. + """ + + queryset = Onderwerpobject.objects.order_by("-pk") + serializer_class = OnderwerpobjectSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filter_backends = [DjangoFilterBackend] + filterset_fields = [ + "objectidentificator_objecttype", + "objectidentificator_soort_object_id", + "objectidentificator_object_id", + ] + + +class BijlageViewSet(viewsets.ModelViewSet): + """ + create: + Maak een bijlage aan. + + Maak een bijlage aan. + + list: + Alle bijlagen opvragen. + + Alle bijlagen opvragen. + + retrieve: + Een specifiek bijlage opvragen. + + Een specifiek bijlage opvragen. + + update: + Werk een bijlage in zijn geheel bij. + + Werk een bijlage in zijn geheel bij. + + partial_update: + Werk een bijlage deels bij. + + Werk een bijlage deels bij. + + destroy: + Verwijder een bijlage. + + Verwijder een bijlage. + """ + + queryset = Bijlage.objects.order_by("-pk") + serializer_class = BijlageSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filter_backends = [DjangoFilterBackend] + filterset_fields = [ + "objectidentificator_objecttype", + "objectidentificator_soort_object_id", + "objectidentificator_object_id", + ] diff --git a/src/openklant/components/klantinteracties/api/viewsets/partijen.py b/src/openklant/components/klantinteracties/api/viewsets/partijen.py new file mode 100644 index 00000000..c37c72b5 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/viewsets/partijen.py @@ -0,0 +1,226 @@ +from rest_framework import viewsets +from rest_framework.pagination import PageNumberPagination + +from openklant.components.klantinteracties.api.filterset.partijen import PartijFilterSet +from openklant.components.klantinteracties.api.serializers.partijen import ( + ContactpersoonSerializer, + OrganisatieSerializer, + PartijIdentificatorSerializer, + PartijSerializer, + PersoonSerializer, +) +from openklant.components.klantinteracties.models.partijen import ( + Contactpersoon, + Organisatie, + Partij, + PartijIdentificator, + Persoon, +) + + +class PartijViewSet(viewsets.ModelViewSet): + """ + Persoon of organisatie waarmee de gemeente een relatie heeft. + + create: + Maak een partij aan. + + Maak een partij aan. + + list: + Alle partijen opvragen. + + Alle partijen opvragen. + + retrieve: + Een specifiek partij opvragen. + + Een specifiek partij opvragen. + + update: + Werk een partij in zijn geheel bij. + + Werk een partij in zijn geheel bij. + + partial_update: + Werk een partij deels bij. + + Werk een partij deels bij. + + destroy: + Verwijder een partij. + + Verwijder een partij. + """ + + queryset = Partij.objects.order_by("-pk") + serializer_class = PartijSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination + filterset_class = PartijFilterSet + + +class OrganisatieViewSet(viewsets.ModelViewSet): + """ + Geformaliseerde entiteit die geen natuurlijk persoon is + en maatschappelijke activiteiten uitvoert. + + create: + Maak een organisatie aan. + + Maak een organisatie aan. + + list: + Alle organisaties opvragen. + + Alle organisaties opvragen. + + retrieve: + Een specifiek organisatie opvragen. + + Een specifiek organisatie opvragen. + + update: + Werk een organisatie in zijn geheel bij. + + Werk een organisatie in zijn geheel bij. + + partial_update: + Werk een organisatie deels bij. + + Werk een organisatie deels bij. + + destroy: + Verwijder een organisatie. + + Verwijder een organisatie. + """ + + queryset = Organisatie.objects.order_by("-pk") + serializer_class = OrganisatieSerializer + lookup_field = "id" + pagination_class = PageNumberPagination + + +class PersoonViewSet(viewsets.ModelViewSet): + """ + Natuurlijk persoon. + + create: + Maak een persoon aan. + + Maak een persoon aan. + + list: + Alle personen opvragen. + + Alle personen opvragen. + + retrieve: + Een specifiek persoon opvragen. + + Een specifiek persoon opvragen. + + update: + Werk een persoon in zijn geheel bij. + + Werk een persoon in zijn geheel bij. + + partial_update: + Werk een persoon deels bij. + + Werk een persoon deels bij. + + destroy: + Verwijder een persoon. + + Verwijder een persoon. + """ + + queryset = Persoon.objects.order_by("-pk") + serializer_class = PersoonSerializer + lookup_field = "id" + pagination_class = PageNumberPagination + + +class ContactpersoonViewSet(viewsets.ModelViewSet): + """ + Natuurlijk persoon die werkte voor een organisatie, + of natuurlijk persoon die een andere persoon vertegenwoordigde. + + create: + Maak een contactpersoon aan. + + Maak een contactpersoon aan. + + list: + Alle contactpersonen opvragen. + + Alle contactpersonen opvragen. + + retrieve: + Een specifiek contactpersoon opvragen. + + Een specifiek contactpersoon opvragen. + + update: + Werk een contactpersoon in zijn geheel bij. + + Werk een contactpersoon in zijn geheel bij. + + partial_update: + Werk een contactpersoon deels bij. + + Werk een contactpersoon deels bij. + + destroy: + Verwijder een contactpersoon. + + Verwijder een contactpersoon. + """ + + queryset = Contactpersoon.objects.order_by("-pk") + serializer_class = ContactpersoonSerializer + lookup_field = "id" + pagination_class = PageNumberPagination + + +class PartijIdentificatorViewSet(viewsets.ModelViewSet): + """ + Gegevens die een partij in een basisregistratie of ander extern register uniek identificeren. + + create: + Maak een partij-identificator aan. + + Maak een partij-identificator aan. + + list: + Alle partij-identificatoren opvragen. + + Alle partij-identificatoren opvragen. + + retrieve: + Een specifiek partij-identificator opvragen. + + Een specifiek partij-identificator opvragen. + + update: + Werk een partij-identificator in zijn geheel bij. + + Werk een partij-identificator in zijn geheel bij. + + partial_update: + Werk een partij-identificator deels bij. + + Werk een partij-identificator deels bij. + + destroy: + Verwijder een partij-identificator. + + Verwijder een partij-identificator. + """ + + queryset = PartijIdentificator.objects.order_by("-pk") + serializer_class = PartijIdentificatorSerializer + lookup_field = "uuid" + pagination_class = PageNumberPagination diff --git a/src/openklant/components/klantinteracties/migrations/0005_auto_20231110_0735.py b/src/openklant/components/klantinteracties/migrations/0005_auto_20231110_0735.py new file mode 100644 index 00000000..67be5ac9 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0005_auto_20231110_0735.py @@ -0,0 +1,40 @@ +# Generated by Django 3.2.18 on 2023-11-10 07:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("klantinteracties", "0004_auto_20231109_1209"), + ] + + operations = [ + migrations.RemoveField( + model_name="betrokkene", + name="digitaal_adres", + ), + migrations.AddField( + model_name="digitaaladres", + name="betrokkene", + field=models.ForeignKey( + help_text="'Digitaal Adres' had 'Betrokkene bij klantcontact'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.betrokkene", + verbose_name="betrokkene", + ), + ), + migrations.AlterField( + model_name="medewerker", + name="actor", + field=models.ForeignKey( + help_text="'GeautomatiseerdeActor' was 'Actor'", + on_delete=django.db.models.deletion.CASCADE, + related_name="medewerker", + to="klantinteracties.actor", + unique=True, + verbose_name="actor", + ), + ), + ] diff --git a/src/openklant/components/klantinteracties/migrations/0006_auto_20231124_0956.py b/src/openklant/components/klantinteracties/migrations/0006_auto_20231124_0956.py new file mode 100644 index 00000000..17935330 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0006_auto_20231124_0956.py @@ -0,0 +1,55 @@ +# Generated by Django 3.2.18 on 2023-11-24 09:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("klantinteracties", "0005_auto_20231110_0735"), + ] + + operations = [ + migrations.RemoveField( + model_name="partij", + name="betrokkene", + ), + migrations.RemoveField( + model_name="partij", + name="digitaal_adres", + ), + migrations.AddField( + model_name="betrokkene", + name="partij", + field=models.ForeignKey( + blank=True, + help_text="'Betrokkene bij klantcontact' was 'Partij'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + verbose_name="partij", + ), + ), + migrations.AddField( + model_name="digitaaladres", + name="partij", + field=models.ForeignKey( + blank=True, + help_text="'Digitaal Adres' was 'Partij'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + verbose_name="partij", + ), + ), + migrations.AlterField( + model_name="internetaak", + name="toelichting", + field=models.TextField( + blank=True, + help_text="Toelichting die, aanvullend bij de inhoud van het klantcontact dat aanleiding gaf tot de taak en de gevraagde handeling, bijdraagt aan het kunnen afhandelen van de taak.", + max_length=1000, + verbose_name="toelichting", + ), + ), + ] diff --git a/src/openklant/components/klantinteracties/models/actoren.py b/src/openklant/components/klantinteracties/models/actoren.py index e2f7241a..97cdce76 100644 --- a/src/openklant/components/klantinteracties/models/actoren.py +++ b/src/openklant/components/klantinteracties/models/actoren.py @@ -76,6 +76,8 @@ class Medewerker(models.Model): on_delete=models.CASCADE, verbose_name=_("actor"), help_text=_("'GeautomatiseerdeActor' was 'Actor'"), + related_name="medewerker", + unique=True, ) functie = models.CharField( _("functie"), diff --git a/src/openklant/components/klantinteracties/models/digitaal_adres.py b/src/openklant/components/klantinteracties/models/digitaal_adres.py index a36b9268..a6f9a6d1 100644 --- a/src/openklant/components/klantinteracties/models/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/models/digitaal_adres.py @@ -3,6 +3,9 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +from openklant.components.klantinteracties.models.klantcontacten import Betrokkene +from openklant.components.klantinteracties.models.partijen import Partij + class DigitaalAdres(models.Model): uuid = models.UUIDField( @@ -10,6 +13,21 @@ class DigitaalAdres(models.Model): default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van het digitaal adres."), ) + partij = models.ForeignKey( + Partij, + on_delete=models.CASCADE, + verbose_name=_("partij"), + help_text=_("'Digitaal Adres' was 'Partij'"), + null=True, + blank=True, + ) + betrokkene = models.ForeignKey( + Betrokkene, + on_delete=models.CASCADE, + verbose_name=_("betrokkene"), + help_text=_("'Digitaal Adres' had 'Betrokkene bij klantcontact'"), + null=True, + ) soort_digitaal_adres = models.CharField( _("soort digitaal adres"), help_text=_( diff --git a/src/openklant/components/klantinteracties/models/internetaken.py b/src/openklant/components/klantinteracties/models/internetaken.py index 82393f35..9fdc7e3d 100644 --- a/src/openklant/components/klantinteracties/models/internetaken.py +++ b/src/openklant/components/klantinteracties/models/internetaken.py @@ -50,7 +50,7 @@ class InterneTaak(models.Model): "aanleiding gaf tot de taak en de gevraagde handeling, " "bijdraagt aan het kunnen afhandelen van de taak." ), - max_length=400, + max_length=1000, blank=True, ) status = models.CharField( diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py index 950c5eab..ecd925aa 100644 --- a/src/openklant/components/klantinteracties/models/klantcontacten.py +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -7,7 +7,6 @@ from .actoren import Actor from .constants import Klantcontrol -from .digitaal_adres import DigitaalAdres from .mixins import ( BezoekadresMixin, ContactnaamMixin, @@ -111,20 +110,20 @@ class Betrokkene(BezoekadresMixin, CorrespondentieadresMixin, ContactnaamMixin): "Unieke (technische) identificatiecode van de betrokkene bij klantcontact." ), ) + partij = models.ForeignKey( + "klantinteracties.Partij", + on_delete=models.CASCADE, + verbose_name=_("partij"), + help_text=_("'Betrokkene bij klantcontact' was 'Partij'"), + null=True, + blank=True, + ) klantcontact = models.ForeignKey( Klantcontact, on_delete=models.CASCADE, verbose_name=_("klantcontact"), help_text=_("'Klantcontact' had 'Betrokkene bij klantcontact'"), ) - digitaal_adres = models.ForeignKey( - DigitaalAdres, - on_delete=models.CASCADE, - verbose_name=_("digitaal adres"), - help_text=_("'Digitaal Adres' had 'Betrokkene bij klantcontact'"), - null=True, - blank=True, - ) rol = models.CharField( _("rol"), help_text=_( diff --git a/src/openklant/components/klantinteracties/models/mixins.py b/src/openklant/components/klantinteracties/models/mixins.py index 8f1dabf0..a6b2be13 100644 --- a/src/openklant/components/klantinteracties/models/mixins.py +++ b/src/openklant/components/klantinteracties/models/mixins.py @@ -179,15 +179,15 @@ class ContactnaamMixin(models.Model): blank=True, ) - Contactnaam = GegevensGroepType( + contactnaam = GegevensGroepType( { "voorletters": contactnaam_voorletters, "voornaam": contactnaam_voornaam, "voorvoegsel_achternaam": contactnaam_voorvoegsel_achternaam, "achternaam": contactnaam_achternaam, }, - required=("voorletters",), optional=( + "voorletters", "voornaam", "voorvoegsel_achternaam", "achternaam", @@ -249,7 +249,7 @@ class ObjectidentificatorMixin(models.Model): "object_id": objectidentificator_object_id, "register": objectidentificator_register, }, - required=( + optional=( "objecttype", "soort_object_id", "object_id", diff --git a/src/openklant/components/klantinteracties/models/partijen.py b/src/openklant/components/klantinteracties/models/partijen.py index 406e51a2..bb90cb4d 100644 --- a/src/openklant/components/klantinteracties/models/partijen.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -1,5 +1,6 @@ import uuid +from django.core.exceptions import ValidationError from django.core.validators import validate_integer from django.db import models from django.utils.translation import gettext_lazy as _ @@ -7,8 +8,6 @@ from vng_api_common.descriptors import GegevensGroepType from .constants import SoortPartij -from .digitaal_adres import DigitaalAdres -from .klantcontacten import Betrokkene from .mixins import BezoekadresMixin, ContactnaamMixin, CorrespondentieadresMixin @@ -18,24 +17,8 @@ class Partij(BezoekadresMixin, CorrespondentieadresMixin): default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van de partij."), ) - betrokkene = models.ForeignKey( - Betrokkene, - on_delete=models.CASCADE, - verbose_name=_("betrokkene"), - help_text=_("'Betrokkene bij klantcontact' was 'Partij'"), - null=True, - blank=True, - ) - digitaal_adres = models.ForeignKey( - DigitaalAdres, - on_delete=models.CASCADE, - verbose_name=_("digitaal adres"), - help_text=_("'Digitaal Adres' was 'Partij'"), - null=True, - blank=True, - ) voorkeurs_digitaal_adres = models.ForeignKey( - DigitaalAdres, + "klantinteracties.DigitaalAdres", on_delete=models.CASCADE, related_name="voorkeurs_partij", verbose_name=_("voorkeurs digitaal adres"), @@ -104,6 +87,15 @@ class Meta: def __str__(self): return self.nummer + def clean(self): + super().clean() + + if self.voorkeurs_digitaal_adres: + if self.voorkeurs_digitaal_adres not in self.digitaaladres_set.all(): + raise ValidationError( + _("Het voorkeurs adres moet een gelinkte digitaal adres zijn.") + ) + class Organisatie(models.Model): partij = models.ForeignKey( @@ -233,7 +225,7 @@ class PartijIdentificator(models.Model): "object_id": partij_identificator_object_id, "register": partij_identificator_register, }, - required=( + optional=( "objecttype", "soort_object_id", "object_id", diff --git a/src/openklant/components/klantinteracties/models/tests/__init__.py b/src/openklant/components/klantinteracties/models/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/openklant/components/klantinteracties/models/tests/factories/actoren.py b/src/openklant/components/klantinteracties/models/tests/factories/actoren.py new file mode 100644 index 00000000..a32dea82 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/tests/factories/actoren.py @@ -0,0 +1,56 @@ +import string + +import factory.fuzzy + +from openklant.components.klantinteracties.models.actoren import ( + Actor, + GeautomatiseerdeActor, + Medewerker, + OrganisatorischeEenheid, +) + +from ...constants import SoortActor + + +class ActorFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + naam = factory.Faker("word") + soort_actor = factory.fuzzy.FuzzyChoice(SoortActor.values) + indicatie_actief = factory.Faker("pybool") + + class Meta: + model = Actor + + +class GeautomatiseerdeActorFactory(factory.django.DjangoModelFactory): + actor = factory.SubFactory(ActorFactory) + functie = factory.fuzzy.FuzzyText( + length=40, chars=string.ascii_uppercase + string.digits + ) + omschrijving = factory.Faker("word") + + class Meta: + model = GeautomatiseerdeActor + + +class MedewerkerFactory(factory.django.DjangoModelFactory): + actor = factory.SubFactory(ActorFactory) + functie = factory.fuzzy.FuzzyText( + length=20, chars=string.ascii_uppercase + string.digits + ) + emailadres = factory.Faker("email") + telefoonnummer = factory.fuzzy.FuzzyText(chars=string.digits) + + class Meta: + model = Medewerker + + +class OrganisatorischeEenheidFactory(factory.django.DjangoModelFactory): + actor = factory.SubFactory(ActorFactory) + omschrijving = factory.Faker("word") + emailadres = factory.Faker("email") + faxnummer = factory.fuzzy.FuzzyText(chars=string.digits) + telefoonnummer = factory.fuzzy.FuzzyText(chars=string.digits) + + class Meta: + model = OrganisatorischeEenheid diff --git a/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py b/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py new file mode 100644 index 00000000..82865036 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py @@ -0,0 +1,17 @@ +import factory + +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + BetrokkeneFactory, +) + + +class DigitaalAdresFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + betrokkene = factory.SubFactory(BetrokkeneFactory) + soort_digitaal_adres = factory.Faker("word") + adres = factory.Faker("word") + omschrijving = factory.Faker("word") + + class Meta: + model = DigitaalAdres diff --git a/src/openklant/components/klantinteracties/models/tests/factories/internetaken.py b/src/openklant/components/klantinteracties/models/tests/factories/internetaken.py new file mode 100644 index 00000000..a33d725e --- /dev/null +++ b/src/openklant/components/klantinteracties/models/tests/factories/internetaken.py @@ -0,0 +1,26 @@ +import random + +import factory.fuzzy + +from openklant.components.klantinteracties.models.constants import Taakstatus +from openklant.components.klantinteracties.models.internetaken import InterneTaak +from openklant.components.klantinteracties.models.tests.factories.actoren import ( + ActorFactory, +) +from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( + KlantcontactFactory, +) + + +class InterneTaakFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + actor = factory.SubFactory(ActorFactory) + klantcontact = factory.SubFactory(KlantcontactFactory) + nummer = "".join(random.choice("0123456789") for i in range(10)) + gevraagde_handeling = factory.Faker("word") + toelichting = factory.Faker("word") + status = factory.fuzzy.FuzzyChoice(Taakstatus.values) + toegewezen_op = factory.Faker("date_object") + + class Meta: + model = InterneTaak diff --git a/src/openklant/components/klantinteracties/models/tests/factories/klantcontacten.py b/src/openklant/components/klantinteracties/models/tests/factories/klantcontacten.py new file mode 100644 index 00000000..51fb3853 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/tests/factories/klantcontacten.py @@ -0,0 +1,62 @@ +import random +import string + +import factory.fuzzy + +from ...constants import Klantcontrol +from ...klantcontacten import Betrokkene, Bijlage, Klantcontact, Onderwerpobject + +# from openklant.components.klantinteracties.models.tests.factories.klantcontacten import KlantcontactFactory + + +class KlantcontactFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + nummer = "".join(random.choice("0123456789") for i in range(10)) + kanaal = factory.Faker("word") + onderwerp = factory.Faker("word") + inhoud = factory.Faker("word") + indicatie_contact_gelukt = factory.Faker("pybool") + taal = factory.fuzzy.FuzzyText(length=3, chars=string.ascii_uppercase) + vertrouwelijk = factory.Faker("pybool") + + class Meta: + model = Klantcontact + + @factory.post_generation + def actoren(self, create, extracted, **kwargs): + if not create: + # Simple build, do nothing. + return + + if extracted: + for actoren in extracted: + self.actoren.add(actoren) + + +class BetrokkeneFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + klantcontact = factory.SubFactory(KlantcontactFactory) + rol = factory.fuzzy.FuzzyChoice(Klantcontrol.values) + organisatienaam = factory.Faker("word") + initiator = factory.Faker("pybool") + contactnaam_voorletters = ".".join(random.choices(string.ascii_uppercase, k=2)) + + class Meta: + model = Betrokkene + + +class OnderwerpobjectFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + klantcontact = factory.SubFactory(KlantcontactFactory) + was_klantcontact = factory.SubFactory(KlantcontactFactory) + + class Meta: + model = Onderwerpobject + + +class BijlageFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + klantcontact = factory.SubFactory(KlantcontactFactory) + + class Meta: + model = Bijlage diff --git a/src/openklant/components/klantinteracties/models/tests/factories/partijen.py b/src/openklant/components/klantinteracties/models/tests/factories/partijen.py new file mode 100644 index 00000000..0672c426 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/tests/factories/partijen.py @@ -0,0 +1,71 @@ +import random +import string + +import factory.fuzzy + +from openklant.components.klantinteracties.models.partijen import ( + Contactpersoon, + Organisatie, + Partij, + PartijIdentificator, + Persoon, +) +from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( + DigitaalAdresFactory, +) + +from ...constants import SoortPartij + + +class PartijFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + voorkeurs_digitaal_adres = factory.SubFactory(DigitaalAdresFactory) + nummer = "".join(random.choice("0123456789") for i in range(10)) + soort_partij = factory.fuzzy.FuzzyChoice(SoortPartij.values) + indicatie_geheimhouding = factory.Faker("pybool") + indicatie_actief = factory.Faker("pybool") + + class Meta: + model = Partij + + @factory.post_generation + def vertegenwoordigde(self, create, extracted, **kwargs): + if not create or not extracted: + # Simple build, do nothing. + return + + self.vertegenwoordigde.add(*extracted) + + +class OrganisatieFactory(factory.django.DjangoModelFactory): + partij = factory.SubFactory(PartijFactory) + naam = factory.Faker("word") + + class Meta: + model = Organisatie + + +class PersoonFactory(factory.django.DjangoModelFactory): + partij = factory.SubFactory(PartijFactory) + contactnaam_voorletters = ".".join(random.choices(string.ascii_uppercase, k=2)) + + class Meta: + model = Persoon + + +class ContactpersoonFactory(factory.django.DjangoModelFactory): + partij = factory.SubFactory(PartijFactory) + organisatie = factory.SubFactory(OrganisatieFactory) + contactnaam_voorletters = ".".join(random.choices(string.ascii_uppercase, k=2)) + + class Meta: + model = Contactpersoon + + +class PartijIdentificatorFactory(factory.django.DjangoModelFactory): + uuid = factory.Faker("uuid4") + partij = factory.SubFactory(PartijFactory) + andere_partij_identificator = factory.Faker("word") + + class Meta: + model = PartijIdentificator diff --git a/src/openklant/components/klantinteracties/openapi.yaml b/src/openklant/components/klantinteracties/openapi.yaml new file mode 100644 index 00000000..31321368 --- /dev/null +++ b/src/openklant/components/klantinteracties/openapi.yaml @@ -0,0 +1,6397 @@ +openapi: 3.0.0 +info: + title: klantinteracties + description: ' + + Description WIP. + + ' + contact: + url: https://zaakgerichtwerken.vng.cloud + email: standaarden.ondersteuning@vng.nl + license: + name: EUPL 1.2 + url: https://opensource.org/licenses/EUPL-1.2 + version: 1.0.0 +security: +- JWT-Claims: [] +paths: + /actoren: + get: + operationId: actor_list + summary: Alle actoren opvragen. + description: Alle actoren opvragen. + parameters: + - name: naam + in: query + description: Zoek klantcontacten met specifieke tekst in inhoud + required: false + schema: + type: string + - name: soortActor + in: query + description: Geeft aan van welke specifieke soort actor sprake is. + required: false + schema: + type: string + enum: + - medewerker + - geautomatiseerde_actor + - organisatorische_eenheid + - name: indicatieActief + in: query + description: Geeft aan of aan de actor nog betrokken mag worden bij nieuwe + klantcontacten. Voor niet-actieve is dit niet toegestaan. + required: false + schema: + type: string + - name: objectidentificatorObjecttype + in: query + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + required: false + schema: + type: string + - name: objectidentificatorSoortObjectId + in: query + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + required: false + schema: + type: string + - name: objectidentificatorObjectId + in: query + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Actor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + post: + operationId: actor_create + summary: Maak een actor aan. + description: Maak een actor aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Actor' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Actor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + parameters: [] + /actoren/{uuid}: + get: + operationId: actor_read + summary: Een specifiek actor opvragen. + description: Een specifiek actor opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Actor' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + put: + operationId: actor_update + summary: Werk een actor in zijn geheel bij. + description: Werk een actor in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Actor' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Actor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + patch: + operationId: actor_partial_update + summary: Werk een actor deels bij. + description: Werk een actor deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Actor' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Actor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + delete: + operationId: actor_delete + summary: Verwijder een actor. + description: Verwijder een actor. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - actoren + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de actor. + required: true + schema: + type: string + format: uuid + /betrokkenen: + get: + operationId: betrokkene_list + summary: Alle betrokkeneen opvragen. + description: Alle betrokkeneen opvragen. + parameters: + - name: klantcontact__nummer + in: query + description: Zoek betrokkene object op basis van het klantcontact nummer + required: false + schema: + type: string + - name: klantcontact__uuid + in: query + description: Zoek betrokkene object op basis van het klantcontact uuid + required: false + schema: + type: string + - name: klantcontact__url + in: query + description: Zoek betrokkene object op basis van het klantcontact url + required: false + schema: + type: string + - name: verstrektedigitaalAdres__adres + in: query + description: Zoek betrokkene object op basis van het digitaaladres adres + required: false + schema: + type: string + - name: verstrektedigitaalAdres__uuid + in: query + description: Zoek betrokkene object op basis van het digitaaladres uuid + required: false + schema: + type: string + - name: verstrektedigitaalAdres__url + in: query + description: Zoek betrokkene object op basis van het digitaaladres url + required: false + schema: + type: string + - name: wasPartij__nummer + in: query + description: Zoek betrokkene object op basis van het partij nummer + required: false + schema: + type: string + - name: wasPartij__url + in: query + description: Zoek betrokkene object op basis van het partij url + required: false + schema: + type: string + - name: wasPartij__uuid + in: query + description: Zoek betrokkene object op basis van het partij uuid + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Betrokkene' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + post: + operationId: betrokkene_create + summary: Maak een betrokkene aan. + description: Maak een betrokkene aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Betrokkene' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Betrokkene' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + parameters: [] + /betrokkenen/{uuid}: + get: + operationId: betrokkene_read + summary: Een specifiek betrokkene opvragen. + description: Een specifiek betrokkene opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Betrokkene' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + put: + operationId: betrokkene_update + summary: Werk een betrokkene in zijn geheel bij. + description: Werk een betrokkene in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Betrokkene' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Betrokkene' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + patch: + operationId: betrokkene_partial_update + summary: Werk een betrokkene deels bij. + description: Werk een betrokkene deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Betrokkene' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Betrokkene' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + delete: + operationId: betrokkene_delete + summary: Verwijder een betrokkene. + description: Verwijder een betrokkene. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - betrokkenen + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de betrokkene bij klantcontact. + required: true + schema: + type: string + format: uuid + /bijlagen: + get: + operationId: bijlage_list + summary: Alle bijlagen opvragen. + description: Alle bijlagen opvragen. + parameters: + - name: objectidentificatorObjecttype + in: query + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + required: false + schema: + type: string + - name: objectidentificatorSoortObjectId + in: query + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + required: false + schema: + type: string + - name: objectidentificatorObjectId + in: query + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Bijlage' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + post: + operationId: bijlage_create + summary: Maak een bijlage aan. + description: Maak een bijlage aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Bijlage' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Bijlage' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + parameters: [] + /bijlagen/{uuid}: + get: + operationId: bijlage_read + summary: Een specifiek bijlage opvragen. + description: Een specifiek bijlage opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Bijlage' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + put: + operationId: bijlage_update + summary: Werk een bijlage in zijn geheel bij. + description: Werk een bijlage in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Bijlage' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Bijlage' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + patch: + operationId: bijlage_partial_update + summary: Werk een bijlage deels bij. + description: Werk een bijlage deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Bijlage' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Bijlage' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + delete: + operationId: bijlage_delete + summary: Verwijder een bijlage. + description: Verwijder een bijlage. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - bijlagen + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van het inhoudsdeel. + required: true + schema: + type: string + format: uuid + /contact-persoon: + get: + operationId: contactpersoon_list + summary: Alle contactpersonen opvragen. + description: Alle contactpersonen opvragen. + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Contactpersoon' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + post: + operationId: contactpersoon_create + summary: Maak een contactpersoon aan. + description: Maak een contactpersoon aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Contactpersoon' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Contactpersoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + parameters: [] + /contact-persoon/{id}: + get: + operationId: contactpersoon_read + summary: Een specifiek contactpersoon opvragen. + description: Een specifiek contactpersoon opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Contactpersoon' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + put: + operationId: contactpersoon_update + summary: Werk een contactpersoon in zijn geheel bij. + description: Werk een contactpersoon in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Contactpersoon' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Contactpersoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + patch: + operationId: contactpersoon_partial_update + summary: Werk een contactpersoon deels bij. + description: Werk een contactpersoon deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Contactpersoon' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Contactpersoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + delete: + operationId: contactpersoon_delete + summary: Verwijder een contactpersoon. + description: Verwijder een contactpersoon. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - contact-persoon + parameters: + - name: id + in: path + description: A unique integer value identifying this contact persoon. + required: true + schema: + type: integer + /digitaleadressen: + get: + operationId: digitaaladres_list + summary: Alle digitale adressen opvragen. + description: Alle digitale adressen opvragen. + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/DigitaalAdres' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + post: + operationId: digitaaladres_create + summary: Maak een digitaal adres aan. + description: Maak een digitaal adres aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/DigitaalAdres' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/DigitaalAdres' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + parameters: [] + /digitaleadressen/{uuid}: + get: + operationId: digitaaladres_read + summary: Een specifiek digitaal adres opvragen. + description: Een specifiek digitaal adres opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/DigitaalAdres' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + put: + operationId: digitaaladres_update + summary: Werk een digitaal adres in zijn geheel bij. + description: Werk een digitaal adres in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/DigitaalAdres' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/DigitaalAdres' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + patch: + operationId: digitaaladres_partial_update + summary: Werk een digitaal adres deels bij. + description: Werk een digitaal adres deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/DigitaalAdres' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/DigitaalAdres' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + delete: + operationId: digitaaladres_delete + summary: Verwijder een digitaal adres. + description: Verwijder een digitaal adres. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - digitaleadressen + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van het digitaal adres. + required: true + schema: + type: string + format: uuid + /geautomatiseerde-actoren: + get: + operationId: geautomatiseerdeactor_list + description: 'Alle geautomatiseerde actoren opvragen. + + Alle geautomatiseerde actoren opvragen.' + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/GeautomatiseerdeActor' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + post: + operationId: geautomatiseerdeactor_create + description: 'Maak een geautomatiseerde actor aan. + + Maak een geautomatiseerde actor aan.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/GeautomatiseerdeActor' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/GeautomatiseerdeActor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + parameters: [] + /geautomatiseerde-actoren/{id}: + get: + operationId: geautomatiseerdeactor_read + description: 'Een specifiek geautomatiseerde actor opvragen. + + Een specifiek geautomatiseerde actor opvragen.' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/GeautomatiseerdeActor' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + put: + operationId: geautomatiseerdeactor_update + description: 'Werk een geautomatiseerde actor in zijn geheel bij. + + Werk een geautomatiseerde actor in zijn geheel bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/GeautomatiseerdeActor' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/GeautomatiseerdeActor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + patch: + operationId: geautomatiseerdeactor_partial_update + description: 'Werk een geautomatiseerde actor deels bij. + + Werk een geautomatiseerde actor deels bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/GeautomatiseerdeActor' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/GeautomatiseerdeActor' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + delete: + operationId: geautomatiseerdeactor_delete + description: 'Verwijder een geautomatiseerde actor. + + Verwijder een geautomatiseerde actor.' + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - geautomatiseerde-actoren + parameters: + - name: id + in: path + description: A unique integer value identifying this geautomatiseerde actor. + required: true + schema: + type: integer + /internetaken: + get: + operationId: internetaak_list + summary: Alle interne taken opvragen. + description: Alle interne taken opvragen. + parameters: + - name: nummer + in: query + description: Uniek identificerend nummer dat tijdens communicatie tussen mensen + kan worden gebruikt om de specifieke interne taak aan te duiden. + required: false + schema: + type: string + - name: status + in: query + description: Aanduiding van de vordering bij afhandeling van de interne taak. + required: false + schema: + type: string + enum: + - te_verwerken + - verwerkt + - name: actor__naam + in: query + description: Naam van de actor. + required: false + schema: + type: string + - name: klantcontact__uuid + in: query + description: Unieke (technische) identificatiecode van de betrokkene bij klantcontact. + required: false + schema: + type: string + - name: klantcontact__nummer + in: query + description: Uniek identificerend nummer dat tijdens communicatie tussen mensen + kan worden gebruikt om het specifieke klantcontact aan te duiden. + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/InterneTaak' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + post: + operationId: internetaak_create + summary: Maak een interne taak aan. + description: Maak een interne taak aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/InterneTaak' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/InterneTaak' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + parameters: [] + /internetaken/{uuid}: + get: + operationId: internetaak_read + summary: Een specifiek interne taak opvragen. + description: Een specifiek interne taak opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/InterneTaak' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + put: + operationId: internetaak_update + summary: Werk een interne taak in zijn geheel bij. + description: Werk een interne taak in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/InterneTaak' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/InterneTaak' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + patch: + operationId: internetaak_partial_update + summary: Werk een interne taak deels bij. + description: Werk een interne taak deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/InterneTaak' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/InterneTaak' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + delete: + operationId: internetaak_delete + summary: Verwijder een interne taak. + description: Verwijder een interne taak. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - internetaken + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de interne taak. + required: true + schema: + type: string + format: uuid + /klantcontacten: + get: + operationId: klantcontact_list + summary: Alle klanten contacten opvragen. + description: Alle klanten contacten opvragen. + parameters: + - name: hadBetrokkene__url + in: query + description: Zoek klantcontract object op basis van het betrokkene url + required: false + schema: + type: string + - name: hadBetrokkene__uuid + in: query + description: Zoek klantcontract object op basis van het betrokkene uuid + required: false + schema: + type: string + - name: nummer + in: query + description: Uniek identificerend nummer dat tijdens communicatie tussen mensen + kan worden gebruikt om het specifieke klantcontact aan te duiden. + required: false + schema: + type: string + - name: kanaal + in: query + description: Communicatiekanaal dat bij het klantcontact werd gebruikt. + required: false + schema: + type: string + - name: inhoud + in: query + description: Zoek klantcontacten met specifieke tekst in inhoud + required: false + schema: + type: string + - name: onderwerp + in: query + description: Zoek klantcontacten met specifieke tekst in onderwerp + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Klantcontact' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + post: + operationId: klantcontact_create + summary: Maak een klant contact aan. + description: Maak een klant contact aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Klantcontact' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Klantcontact' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + parameters: [] + /klantcontacten/{uuid}: + get: + operationId: klantcontact_read + summary: Een specifiek klant contact opvragen. + description: Een specifiek klant contact opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Klantcontact' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + put: + operationId: klantcontact_update + summary: Werk een klant contact in zijn geheel bij. + description: Werk een klant contact in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Klantcontact' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Klantcontact' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + patch: + operationId: klantcontact_partial_update + summary: Werk een klant contact deels bij. + description: Werk een klant contact deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Klantcontact' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Klantcontact' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + delete: + operationId: klantcontact_delete + summary: Verwijder een klant contact. + description: Verwijder een klant contact. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - klantcontacten + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de betrokkene bij klantcontact. + required: true + schema: + type: string + format: uuid + /medewerker: + get: + operationId: medewerker_list + description: 'Alle medewerkers opvragen. + + Alle medewerkers opvragen.' + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Medewerker' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + post: + operationId: medewerker_create + description: 'Maak een medewerker aan. + + Maak een medewerker aan.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Medewerker' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Medewerker' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + parameters: [] + /medewerker/{id}: + get: + operationId: medewerker_read + description: 'Een specifiek medewerker opvragen. + + Een specifiek medewerker opvragen.' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Medewerker' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + put: + operationId: medewerker_update + description: 'Werk een medewerker in zijn geheel bij. + + Werk een medewerker in zijn geheel bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Medewerker' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Medewerker' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + patch: + operationId: medewerker_partial_update + description: 'Werk een medewerker deels bij. + + Werk een medewerker deels bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Medewerker' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Medewerker' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + delete: + operationId: medewerker_delete + description: 'Verwijder een medewerker. + + Verwijder een medewerker.' + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - medewerker + parameters: + - name: id + in: path + description: A unique integer value identifying this medewerker. + required: true + schema: + type: integer + /onderwerpobjecten: + get: + operationId: onderwerpobject_list + summary: Alle onderwerpobjecten opvragen. + description: Alle onderwerpobjecten opvragen. + parameters: + - name: objectidentificatorObjecttype + in: query + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + required: false + schema: + type: string + - name: objectidentificatorSoortObjectId + in: query + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + required: false + schema: + type: string + - name: objectidentificatorObjectId + in: query + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + required: false + schema: + type: string + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Onderwerpobject' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + post: + operationId: onderwerpobject_create + summary: Maak een onderwerpobject aan. + description: Maak een onderwerpobject aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Onderwerpobject' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Onderwerpobject' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + parameters: [] + /onderwerpobjecten/{uuid}: + get: + operationId: onderwerpobject_read + summary: Een specifiek onderwerpobject opvragen. + description: Een specifiek onderwerpobject opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Onderwerpobject' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + put: + operationId: onderwerpobject_update + summary: Werk een onderwerpobject in zijn geheel bij. + description: Werk een onderwerpobject in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Onderwerpobject' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Onderwerpobject' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + patch: + operationId: onderwerpobject_partial_update + summary: Werk een onderwerpobject deels bij. + description: Werk een onderwerpobject deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Onderwerpobject' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Onderwerpobject' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + delete: + operationId: onderwerpobject_delete + summary: Verwijder een onderwerpobject. + description: Verwijder een onderwerpobject. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - onderwerpobjecten + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van het onderwerpdeel. + required: true + schema: + type: string + format: uuid + /organisaties: + get: + operationId: organisatie_list + summary: Alle organisaties opvragen. + description: Alle organisaties opvragen. + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Organisatie' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + post: + operationId: organisatie_create + summary: Maak een organisatie aan. + description: Maak een organisatie aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Organisatie' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Organisatie' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + parameters: [] + /organisaties/{id}: + get: + operationId: organisatie_read + summary: Een specifiek organisatie opvragen. + description: Een specifiek organisatie opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Organisatie' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + put: + operationId: organisatie_update + summary: Werk een organisatie in zijn geheel bij. + description: Werk een organisatie in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Organisatie' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Organisatie' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + patch: + operationId: organisatie_partial_update + summary: Werk een organisatie deels bij. + description: Werk een organisatie deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Organisatie' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Organisatie' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + delete: + operationId: organisatie_delete + summary: Verwijder een organisatie. + description: Verwijder een organisatie. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisaties + parameters: + - name: id + in: path + description: A unique integer value identifying this organisatie. + required: true + schema: + type: integer + /organisatorische-eenheid: + get: + operationId: organisatorischeeenheid_list + description: 'Alle organisatorische eenheid opvragen. + + Alle organisatorische eenheid opvragen.' + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/OrganisatorischeEenheid' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + post: + operationId: organisatorischeeenheid_create + description: 'Maak een organisatorische eenheid aan. + + Maak een organisatorische eenheid aan.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/OrganisatorischeEenheid' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisatorischeEenheid' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + parameters: [] + /organisatorische-eenheid/{id}: + get: + operationId: organisatorischeeenheid_read + description: 'Een specifiek organisatorische eenheid opvragen. + + Een specifiek organisatorische eenheid opvragen.' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisatorischeEenheid' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + put: + operationId: organisatorischeeenheid_update + description: 'Werk een organisatorische eenheid in zijn geheel bij. + + Werk een organisatorische eenheid in zijn geheel bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/OrganisatorischeEenheid' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisatorischeEenheid' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + patch: + operationId: organisatorischeeenheid_partial_update + description: 'Werk een organisatorische eenheid deels bij. + + Werk een organisatorische eenheid deels bij.' + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/OrganisatorischeEenheid' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisatorischeEenheid' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + delete: + operationId: organisatorischeeenheid_delete + description: 'Verwijder een organisatorische eenheid. + + Verwijder een organisatorische eenheid.' + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - organisatorische-eenheid + parameters: + - name: id + in: path + description: A unique integer value identifying this organisatorische eenheid. + required: true + schema: + type: integer + /partij-identificatoren: + get: + operationId: partijidentificator_list + summary: Alle partij-identificatoren opvragen. + description: Alle partij-identificatoren opvragen. + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/PartijIdentificator' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + post: + operationId: partijidentificator_create + summary: Maak een partij-identificator aan. + description: Maak een partij-identificator aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/PartijIdentificator' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/PartijIdentificator' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + parameters: [] + /partij-identificatoren/{uuid}: + get: + operationId: partijidentificator_read + summary: Een specifiek partij-identificator opvragen. + description: Een specifiek partij-identificator opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/PartijIdentificator' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + put: + operationId: partijidentificator_update + summary: Werk een partij-identificator in zijn geheel bij. + description: Werk een partij-identificator in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/PartijIdentificator' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/PartijIdentificator' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + patch: + operationId: partijidentificator_partial_update + summary: Werk een partij-identificator deels bij. + description: Werk een partij-identificator deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/PartijIdentificator' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/PartijIdentificator' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + delete: + operationId: partijidentificator_delete + summary: Verwijder een partij-identificator. + description: Verwijder een partij-identificator. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partij-identificatoren + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de partij-identificator. + required: true + schema: + type: string + format: uuid + /partijen: + get: + operationId: partij_list + summary: Alle partijen opvragen. + description: Alle partijen opvragen. + parameters: + - name: werktVoorPartij__url + in: query + description: Zoek partij object op basis van het vertegenwoordigde partij + url + required: false + schema: + type: string + - name: werktVoorPartij__uuid + in: query + description: Zoek partij object op basis van het vertegenwoordigde partij + uuid + required: false + schema: + type: string + - name: werktVoorPartij__nummer + in: query + description: Zoek partij object op basis van het vertegenwoordigde partij + nummer + required: false + schema: + type: string + - name: partijIdentificator__objecttype + in: query + description: Zoek partij object op basis van het partij identificator objecttype + required: false + schema: + type: string + - name: partijIdentificator__soortObjectId + in: query + description: Zoek partij object op basis van het partij identificator soort + object ID + required: false + schema: + type: string + - name: partijIdentificator__objectId + in: query + description: Zoek partij object op basis van het partij identificator object + ID + required: false + schema: + type: string + - name: partijIdentificator__register + in: query + description: Zoek partij object op basis van het partij identificator register + required: false + schema: + type: string + - name: nummer + in: query + description: Uniek identificerend nummer dat tijdens communicatie tussen mensen + kan worden gebruikt om de specifieke partij aan te duiden. + required: false + schema: + type: string + - name: indicatieGeheimhouding + in: query + description: Geeft aan of de verstrekker van partijgegevens heeft aangegeven + dat deze gegevens als geheim beschouwd moeten worden. + required: false + schema: + type: string + - name: indicatieActief + in: query + description: Geeft aan of de contactgegevens van de partij nog gebruikt morgen + worden om contact op te nemen. Gegevens van niet-actieve partijen mogen + hiervoor niet worden gebruikt. + required: false + schema: + type: string + - name: soortPartij + in: query + description: Geeft aan van welke specifieke soort partij sprake is. + required: false + schema: + type: string + enum: + - persoon + - organisatie + - contactpersoon + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Partij' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + post: + operationId: partij_create + summary: Maak een partij aan. + description: Maak een partij aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Partij' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Partij' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + parameters: [] + /partijen/{uuid}: + get: + operationId: partij_read + summary: Een specifiek partij opvragen. + description: Een specifiek partij opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Partij' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + put: + operationId: partij_update + summary: Werk een partij in zijn geheel bij. + description: Werk een partij in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Partij' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Partij' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + patch: + operationId: partij_partial_update + summary: Werk een partij deels bij. + description: Werk een partij deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Partij' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Partij' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + delete: + operationId: partij_delete + summary: Verwijder een partij. + description: Verwijder een partij. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - partijen + parameters: + - name: uuid + in: path + description: Unieke (technische) identificatiecode van de partij. + required: true + schema: + type: string + format: uuid + /persoon: + get: + operationId: persoon_list + summary: Alle personen opvragen. + description: Alle personen opvragen. + parameters: + - name: page + in: query + description: Een pagina binnen de gepagineerde set resultaten. + required: false + schema: + type: integer + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/Persoon' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + post: + operationId: persoon_create + summary: Maak een persoon aan. + description: Maak een persoon aan. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Persoon' + responses: + '201': + description: Created + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + Location: + schema: + type: string + format: uri + description: URL waar de resource leeft. + content: + application/json: + schema: + $ref: '#/components/schemas/Persoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + parameters: [] + /persoon/{id}: + get: + operationId: persoon_read + summary: Een specifiek persoon opvragen. + description: Een specifiek persoon opvragen. + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Persoon' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + put: + operationId: persoon_update + summary: Werk een persoon in zijn geheel bij. + description: Werk een persoon in zijn geheel bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Persoon' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Persoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + patch: + operationId: persoon_partial_update + summary: Werk een persoon deels bij. + description: Werk een persoon deels bij. + parameters: + - name: Content-Type + in: header + description: Content type van de verzoekinhoud. + required: true + schema: + type: string + enum: + - application/json + requestBody: + $ref: '#/components/requestBodies/Persoon' + responses: + '200': + description: OK + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/json: + schema: + $ref: '#/components/schemas/Persoon' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + delete: + operationId: persoon_delete + summary: Verwijder een persoon. + description: Verwijder een persoon. + responses: + '204': + description: No content + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van + een specifieke aanroep. Voorbeeld: 1.2.1.' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '409': + $ref: '#/components/responses/409' + '410': + $ref: '#/components/responses/410' + '415': + $ref: '#/components/responses/415' + '429': + $ref: '#/components/responses/429' + '500': + $ref: '#/components/responses/500' + tags: + - persoon + parameters: + - name: id + in: path + description: A unique integer value identifying this persoon. + required: true + schema: + type: integer +servers: +- url: /klantinteracties/api/v1 +components: + responses: + '400': + description: Bad request + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ValidatieFout' + '401': + description: Unauthorized + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '403': + description: Forbidden + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '404': + description: Not found + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '406': + description: Not acceptable + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '409': + description: Conflict + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '410': + description: Gone + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '412': + description: Precondition failed + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '415': + description: Unsupported media type + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '429': + description: Too many requests + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + '500': + description: Internal server error + headers: + API-version: + schema: + type: string + description: 'Geeft een specifieke API-versie aan in de context van een + specifieke aanroep. Voorbeeld: 1.2.1.' + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Fout' + requestBodies: + Medewerker: + content: + application/json: + schema: + $ref: '#/components/schemas/Medewerker' + required: true + PartijIdentificator: + content: + application/json: + schema: + $ref: '#/components/schemas/PartijIdentificator' + required: true + InterneTaak: + content: + application/json: + schema: + $ref: '#/components/schemas/InterneTaak' + required: true + Betrokkene: + content: + application/json: + schema: + $ref: '#/components/schemas/Betrokkene' + required: true + Onderwerpobject: + content: + application/json: + schema: + $ref: '#/components/schemas/Onderwerpobject' + required: true + Actor: + content: + application/json: + schema: + $ref: '#/components/schemas/Actor' + required: true + Bijlage: + content: + application/json: + schema: + $ref: '#/components/schemas/Bijlage' + required: true + Contactpersoon: + content: + application/json: + schema: + $ref: '#/components/schemas/Contactpersoon' + required: true + DigitaalAdres: + content: + application/json: + schema: + $ref: '#/components/schemas/DigitaalAdres' + required: true + GeautomatiseerdeActor: + content: + application/json: + schema: + $ref: '#/components/schemas/GeautomatiseerdeActor' + required: true + Klantcontact: + content: + application/json: + schema: + $ref: '#/components/schemas/Klantcontact' + required: true + Organisatie: + content: + application/json: + schema: + $ref: '#/components/schemas/Organisatie' + required: true + OrganisatorischeEenheid: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganisatorischeEenheid' + required: true + Partij: + content: + application/json: + schema: + $ref: '#/components/schemas/Partij' + required: true + Persoon: + content: + application/json: + schema: + $ref: '#/components/schemas/Persoon' + required: true + securitySchemes: + JWT-Claims: + type: http + scheme: bearer + bearerFormat: JWT + schemas: + Objectidentificator: + description: Gegevens die een onderwerpobject in een extern register uniek identificeren. + type: object + properties: + objecttype: + title: Objecttype + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + type: string + maxLength: 200 + soortObjectId: + title: Soort object ID + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + type: string + maxLength: 200 + objectId: + title: Object ID + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + type: string + maxLength: 200 + register: + title: Register + description: 'Binnen het landschap van registers unieke omschrijving van + het register waarin het object is geregistreerd, bijvoorbeeld: ''BRP''.' + type: string + maxLength: 200 + nullable: true + Actor: + required: + - naam + - soortActor + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de actor. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + naam: + title: Naam + description: Naam van de actor. + type: string + maxLength: 200 + minLength: 1 + soortActor: + title: Soort actor + description: Geeft aan van welke specifieke soort actor sprake is. + type: string + enum: + - medewerker + - geautomatiseerde_actor + - organisatorische_eenheid + indicatieActief: + title: Indicatie actief + description: Geeft aan of aan de actor nog betrokken mag worden bij nieuwe + klantcontacten. Voor niet-actieve is dit niet toegestaan. + type: boolean + objectidentificator: + $ref: '#/components/schemas/Objectidentificator' + Fout: + required: + - code + - title + - status + - detail + - instance + type: object + properties: + type: + title: Type + description: URI referentie naar het type fout, bedoeld voor developers + type: string + code: + title: Code + description: Systeemcode die het type fout aangeeft + type: string + minLength: 1 + title: + title: Title + description: Generieke titel voor het type fout + type: string + minLength: 1 + status: + title: Status + description: De HTTP status code + type: integer + detail: + title: Detail + description: Extra informatie bij de fout, indien beschikbaar + type: string + minLength: 1 + instance: + title: Instance + description: URI met referentie naar dit specifiek voorkomen van de fout. + Deze kan gebruikt worden in combinatie met server logs, bijvoorbeeld. + type: string + minLength: 1 + FieldValidationError: + required: + - name + - code + - reason + type: object + properties: + name: + title: Name + description: Naam van het veld met ongeldige gegevens + type: string + minLength: 1 + code: + title: Code + description: Systeemcode die het type fout aangeeft + type: string + minLength: 1 + reason: + title: Reason + description: Uitleg wat er precies fout is met de gegevens + type: string + minLength: 1 + ValidatieFout: + required: + - code + - title + - status + - detail + - instance + - invalidParams + type: object + properties: + type: + title: Type + description: URI referentie naar het type fout, bedoeld voor developers + type: string + code: + title: Code + description: Systeemcode die het type fout aangeeft + type: string + minLength: 1 + title: + title: Title + description: Generieke titel voor het type fout + type: string + minLength: 1 + status: + title: Status + description: De HTTP status code + type: integer + detail: + title: Detail + description: Extra informatie bij de fout, indien beschikbaar + type: string + minLength: 1 + instance: + title: Instance + description: URI met referentie naar dit specifiek voorkomen van de fout. + Deze kan gebruikt worden in combinatie met server logs, bijvoorbeeld. + type: string + minLength: 1 + invalidParams: + type: array + items: + $ref: '#/components/schemas/FieldValidationError' + PartijForeignKey: + description: Betrokkene bij klantcontact die een partij was. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de partij. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + KlantcontactForeignKey: + description: Persoon of organisatie die betrokken was bij een klantcontact. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de betrokkene bij + klantcontact. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + Bezoekadres: + description: Adres waarop de betrokkene bij klantcontact in naar aanleiding + van dat contact af te leggen bezoeken wil ontvangen. Dit mag afwijken van + voor de verstrekker eventueel in een basisregistratie bekende adressen. + type: object + properties: + nummeraanduidingId: + title: Nummeraanduiding ID + description: Identificatie van het adres bij de Basisregistratie Adressen + en Gebouwen. + type: string + maxLength: 255 + adresregel1: + title: Adresregel 1 + description: Eerste deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel2: + title: Adresregel 2 + description: Tweede deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel3: + title: Adresregel 3 + description: Derde deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + land: + title: Land + description: Een code, opgenomen in Tabel 34, Landentabel, die het land + (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft. + type: string + maxLength: 4 + minLength: 4 + nullable: true + Contactnaam: + description: Naam die de betrokkene bij klantcontact tijdens vervolghandelingen + naar aanleiding van dat contact wil gebruiken. Deze mag afwijken van eventueel + in de Basisregistratie Personen (BRP) bekende naam van de betrokkene. + type: object + properties: + voorletters: + title: Voorletters + description: Een afkorting van de voornamen. Meestal de beginletter, maar + in sommige gevallen de beginletter gecombineerd met de tweede letter van + een voornaam. + type: string + maxLength: 10 + voornaam: + title: Voornaam + description: De voornaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + voorvoegselAchternaam: + title: Voorvoegsel achternaam + description: Een eventueel voorvoegsel dat hoort bij de achternaam die de + persoon wil gebruiken tijdens communicatie met de gemeente. + type: string + maxLength: 10 + achternaam: + title: Achternaam + description: Een achternaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + nullable: true + Betrokkene: + required: + - wasPartij + - hadKlantcontact + - rol + - initiator + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de betrokkene bij + klantcontact. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + wasPartij: + $ref: '#/components/schemas/PartijForeignKey' + hadKlantcontact: + $ref: '#/components/schemas/KlantcontactForeignKey' + bezoekadres: + $ref: '#/components/schemas/Bezoekadres' + correspondentieadres: + $ref: '#/components/schemas/betrokkene_correspondentieadres' + contactnaam: + $ref: '#/components/schemas/Contactnaam' + rol: + title: Rol + description: Rol die de betrokkene bij klantcontact tijdens dat contact + vervulde. + type: string + enum: + - vertegenwoordiger + - klant + organisatienaam: + title: Organisatienaam + description: Naam van de organisatie waarmee de betrokkene bij klantcontact + een relatie had. + type: string + maxLength: 200 + initiator: + title: Initiator + type: boolean + BijlageObjectidentificator: + description: Gegevens die een inhoudsobject in een extern register uniek identificeren. + type: object + properties: + objecttype: + title: Objecttype + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + type: string + maxLength: 200 + soortObjectId: + title: Soort object ID + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + type: string + maxLength: 200 + objectId: + title: Object ID + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + type: string + maxLength: 200 + register: + title: Register + description: 'Binnen het landschap van registers unieke omschrijving van + het register waarin het object is geregistreerd, bijvoorbeeld: ''BRP''.' + type: string + maxLength: 200 + nullable: true + Bijlage: + required: + - wasBijlageVanKlantcontact + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het inhoudsdeel. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + wasBijlageVanKlantcontact: + $ref: '#/components/schemas/KlantcontactForeignKey' + objectidentificator: + $ref: '#/components/schemas/BijlageObjectidentificator' + OrganisatieForeignKey: + description: Organisatie waarvoor een contactpersoon werkte. + required: + - id + type: object + properties: + id: + title: ID + type: integer + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + ContactpersoonPersoon: + description: Naam die een contactpersoon wil gebruiken tijdens contact met de + gemeente. Deze mag afwijken van de eventueel in de Basisregistratie Personen + (BRP) bekende naam van de contactpersoon. + type: object + properties: + voorletters: + title: Voorletters + description: Een afkorting van de voornamen. Meestal de beginletter, maar + in sommige gevallen de beginletter gecombineerd met de tweede letter van + een voornaam. + type: string + maxLength: 10 + voornaam: + title: Voornaam + description: De voornaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + voorvoegselAchternaam: + title: Voorvoegsel achternaam + description: Een eventueel voorvoegsel dat hoort bij de achternaam die de + persoon wil gebruiken tijdens communicatie met de gemeente. + type: string + maxLength: 10 + achternaam: + title: Achternaam + description: Een achternaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + nullable: true + Contactpersoon: + required: + - partij + - werkteVoorOrganisatie + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + partij: + $ref: '#/components/schemas/PartijForeignKey' + werkteVoorOrganisatie: + $ref: '#/components/schemas/OrganisatieForeignKey' + contactnaam: + $ref: '#/components/schemas/ContactpersoonPersoon' + BetrokkeneForeignKey: + description: Digitaal adres dat een betrokkene bij klantcontact verstrekte voor + gebruik bij opvolging van een klantcontact. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de betrokkene bij + klantcontact. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + DigitaalAdres: + required: + - verstrektDoorBetrokkene + - verstrektDoorPartij + - adres + - soortDigitaalAdres + - omschrijving + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het digitaal adres. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + verstrektDoorBetrokkene: + $ref: '#/components/schemas/BetrokkeneForeignKey' + verstrektDoorPartij: + $ref: '#/components/schemas/PartijForeignKey' + adres: + title: Adres + description: Digitaal adres waarmee een persoon of organisatie bereikt kan + worden. + type: string + maxLength: 80 + minLength: 1 + soortDigitaalAdres: + title: Soort digitaal adres + description: Typering van het digitale adres die aangeeft via welk(e) kanaal + of kanalen met dit adres contact kan worden opgenomen. + type: string + maxLength: 255 + minLength: 1 + omschrijving: + title: Omschrijving + description: Omschrijving van het digitaal adres. + type: string + maxLength: 40 + minLength: 1 + ActorForeignKey: + description: Iets dat of iemand die voor de gemeente werkzaamheden uitvoert. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de actor. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + GeautomatiseerdeActor: + required: + - actor + - functie + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + actor: + $ref: '#/components/schemas/ActorForeignKey' + functie: + title: Functie + description: Functie van de geautomatiseerde actor of beschrijving van de + werkzaamheden die deze uitvoert. + type: string + maxLength: 40 + minLength: 1 + omschrijving: + title: Omschrijving + description: Omschrijving van de geautomatiseerde actor. + type: string + maxLength: 200 + InterneTaak: + required: + - nummer + - gevraagdeHandeling + - aanleidinggevendKlantcontact + - toegewezenAanActor + - status + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de interne taak. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nummer: + title: Nummer + description: Uniek identificerend nummer dat tijdens communicatie tussen + mensen kan worden gebruikt om de specifieke interne taak aan te duiden. + type: string + maxLength: 10 + minLength: 1 + gevraagdeHandeling: + title: Gevraagde handeling + description: Handeling die moet worden uitgevoerd om de taak af te ronden. + type: string + maxLength: 200 + minLength: 1 + aanleidinggevendKlantcontact: + $ref: '#/components/schemas/KlantcontactForeignKey' + toegewezenAanActor: + $ref: '#/components/schemas/ActorForeignKey' + toelichting: + title: Toelichting + description: Toelichting die, aanvullend bij de inhoud van het klantcontact + dat aanleiding gaf tot de taak en de gevraagde handeling, bijdraagt aan + het kunnen afhandelen van de taak. + type: string + maxLength: 1000 + status: + title: Status + description: Aanduiding van de vordering bij afhandeling van de interne + taak. + type: string + enum: + - te_verwerken + - verwerkt + toegewezenOp: + title: Toegewezen op + description: Datum en tijdstip waarop de interne taak aan een actor werd + toegewezen. + type: string + format: date-time + readOnly: true + OnderwerpobjectForeignKey: + description: Onderwerpobject dat tijdens een klantcontact aan de orde was. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het onderwerpdeel. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + BijlageForeignKey: + description: Bijlage die (een deel van) de inhoud van het klantcontact beschrijft. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het inhoudsdeel. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + BetrokkeneForeignkey: + description: Persoon of organisatie die betrokken was bij een klantcontact. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de betrokkene bij + klantcontact. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + InterneTaakForeignKey: + description: Klantcontact dat leidde tot een interne taak. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de interne taak. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + Klantcontact: + required: + - gingOverOnderwerpobjecten + - omvatteBijlagen + - hadBetrokkenen + - leiddeTotInterneTaken + - nummer + - kanaal + - onderwerp + - hadBetrokkenActoren + - taal + - vertrouwelijk + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de betrokkene bij + klantcontact. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + gingOverOnderwerpobjecten: + description: Onderwerpobject dat tijdens een klantcontact aan de orde was. + type: array + items: + $ref: '#/components/schemas/OnderwerpobjectForeignKey' + nullable: true + omvatteBijlagen: + description: Bijlage die (een deel van) de inhoud van het klantcontact beschrijft. + type: array + items: + $ref: '#/components/schemas/BijlageForeignKey' + nullable: true + hadBetrokkenen: + description: Persoon of organisatie die betrokken was bij een klantcontact. + type: array + items: + $ref: '#/components/schemas/BetrokkeneForeignkey' + nullable: true + leiddeTotInterneTaken: + description: Klantcontact dat leidde tot een interne taak. + type: array + items: + $ref: '#/components/schemas/InterneTaakForeignKey' + nullable: true + nummer: + title: Nummer + description: Uniek identificerend nummer dat tijdens communicatie tussen + mensen kan worden gebruikt om het specifieke klantcontact aan te duiden. + type: string + maxLength: 10 + minLength: 1 + kanaal: + title: Kanaal + description: Communicatiekanaal dat bij het klantcontact werd gebruikt. + type: string + maxLength: 50 + minLength: 1 + onderwerp: + title: Onderwerp + description: Datgene waarover het klantcontact ging. + type: string + maxLength: 200 + minLength: 1 + hadBetrokkenActoren: + description: Actor die bij een klantcontact betrokken was. + type: array + items: + $ref: '#/components/schemas/ActorForeignKey' + inhoud: + title: Inhoud + description: Informatie die tijdens het klantcontact werd overgebracht of + uitgewisseld, voor zover die voor betrokkenen of actoren relevant is. + type: string + maxLength: 1000 + indicatieContactGelukt: + title: Indicatie contact gelukt + description: Geeft, indien bekend, aan of de poging contact tussen de gemeente + en inwoner(s) of organisatie(s) tot stand te brengen succesvol was. + type: boolean + nullable: true + taal: + title: Taal + description: 'Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur + contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html' + type: string + maxLength: 3 + minLength: 1 + vertrouwelijk: + title: Vertrouwelijk + description: Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact + vertrouwelijk moeten worden behandeld. + type: boolean + plaatsgevondenOp: + title: Plaatsgevonden op + description: Datum en tijdstip waarop het klantontact plaatsvond. Als het + klantcontact een gesprek betrof, is dit het moment waarop het gesprek + begon. Als het klantcontact verzending of ontvangst van informatie betrof, + is dit bij benadering het moment waarop informatie door gemeente verzonden + of ontvangen werd. + type: string + format: date-time + Medewerker: + required: + - actor + - functie + - telefoonnummer + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + actor: + $ref: '#/components/schemas/ActorForeignKey' + functie: + title: Functie + description: Functie van de geautomatiseerde actor of beschrijving van de + werkzaamheden die deze uitvoert. + type: string + maxLength: 40 + minLength: 1 + emailadres: + title: E-mailadres + description: Elektronisch postadres waaronder de MEDEWERKER in de regel + bereikbaar is. + type: string + format: email + maxLength: 254 + telefoonnummer: + title: Telefoonnummer + description: Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar + is. + type: string + maxLength: 20 + minLength: 1 + OnderwerpobjectObjectidentificator: + description: Gegevens die een onderwerpobject in een extern register uniek identificeren. + type: object + properties: + objecttype: + title: Objecttype + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + type: string + maxLength: 200 + soortObjectId: + title: Soort object ID + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + type: string + maxLength: 200 + objectId: + title: Object ID + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + type: string + maxLength: 200 + register: + title: Register + description: 'Binnen het landschap van registers unieke omschrijving van + het register waarin het object is geregistreerd, bijvoorbeeld: ''BRP''.' + type: string + maxLength: 200 + nullable: true + Onderwerpobject: + required: + - klantcontact + - wasKlantcontact + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het onderwerpdeel. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + klantcontact: + $ref: '#/components/schemas/KlantcontactForeignKey' + wasKlantcontact: + $ref: '#/components/schemas/KlantcontactForeignKey' + objectidentificator: + $ref: '#/components/schemas/OnderwerpobjectObjectidentificator' + ContactPersoonForeignkey: + description: Organisatie waarvoor een contactpersoon werkte. + required: + - id + type: object + properties: + id: + title: ID + type: integer + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + partij: + $ref: '#/components/schemas/PartijForeignKey' + nullable: true + Organisatie: + required: + - partij + - contactpersoon + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + naam: + title: Naam + description: Naam van de organisatie. + type: string + maxLength: 200 + partij: + $ref: '#/components/schemas/PartijForeignKey' + contactpersoon: + description: Organisatie waarvoor een contactpersoon werkte. + type: array + items: + $ref: '#/components/schemas/ContactPersoonForeignkey' + nullable: true + OrganisatorischeEenheid: + required: + - actor + - faxnummer + - telefoonnummer + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + actor: + $ref: '#/components/schemas/ActorForeignKey' + omschrijving: + title: Omschrijving + description: Omschrijving van de geautomatiseerde actor. + type: string + maxLength: 200 + emailadres: + title: E-mailadres + description: Elektronisch postadres waaronder de MEDEWERKER in de regel + bereikbaar is. + type: string + format: email + maxLength: 254 + faxnummer: + title: Faxnummer + description: Faxnummer waaronder de organisatorische eenheid in de regel + bereikbaar is. + type: string + maxLength: 20 + minLength: 1 + telefoonnummer: + title: Telefoonnummer + description: Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar + is. + type: string + maxLength: 20 + minLength: 1 + PartijIdentificatorGroepType: + description: Gegevens die een partij in een basisregistratie of ander extern + register uniek identificeren. + type: object + properties: + objecttype: + title: Objecttype + description: 'Type van het object, bijvoorbeeld: ''INGESCHREVEN NATUURLIJK + PERSOON''.' + type: string + maxLength: 200 + soortObjectId: + title: Soort object ID + description: 'Naam van de eigenschap die het object identificeert, bijvoorbeeld: + ''Burgerservicenummer''.' + type: string + maxLength: 200 + objectId: + title: Object ID + description: 'Waarde van de eigenschap die het object identificeert, bijvoorbeeld: + ''123456788''.' + type: string + maxLength: 200 + register: + title: Register + description: 'Binnen het landschap van registers unieke omschrijving van + het register waarin het object is geregistreerd, bijvoorbeeld: ''BRP''.' + type: string + maxLength: 200 + nullable: true + PartijIdentificator: + required: + - identificeerdePartij + - partijIdentificator + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de partij-identificator. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + identificeerdePartij: + $ref: '#/components/schemas/PartijForeignKey' + anderePartijIdentificator: + title: Andere partij indetificator + description: 'Vrij tekstveld om de verwijzing naar een niet-voorgedefinieerd + objecttype, soort objectID of Register vast te leggen. ' + type: string + maxLength: 200 + partijIdentificator: + $ref: '#/components/schemas/PartijIdentificatorGroepType' + DigitaalAdresForeignKey: + description: Digitaal adres dat een partij verstrekte voor gebruik bij toekomstig + contact met de gemeente. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van het digitaal adres. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + PartijIdentificatorForeignkey: + description: Partij-identificatoren die hoorde bij deze partij. + required: + - uuid + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de partij-identificator. + type: string + format: uuid + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nullable: true + PartijBezoekadres: + description: Adres waarop de partij door gemeente bezocht wil worden. Dit mag + afwijken van voor de verstrekker eventueel in een basisregistratie bekende + adressen. + type: object + properties: + nummeraanduidingId: + title: Nummeraanduiding ID + description: Identificatie van het adres bij de Basisregistratie Adressen + en Gebouwen. + type: string + maxLength: 255 + adresregel1: + title: Adresregel 1 + description: Eerste deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel2: + title: Adresregel 2 + description: Tweede deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel3: + title: Adresregel 3 + description: Derde deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + land: + title: Land + description: Een code, opgenomen in Tabel 34, Landentabel, die het land + (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft. + type: string + maxLength: 4 + minLength: 4 + nullable: true + Partij: + required: + - nummer + - betrokkenen + - digitaleAdressen + - voorkeursDigitaalAdres + - vertegenwoordigde + - partijIdentificatoren + - soortPartij + - indicatieGeheimhouding + - indicatieActief + type: object + properties: + uuid: + title: Uuid + description: Unieke (technische) identificatiecode van de partij. + type: string + format: uuid + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + nummer: + title: Nummer + description: Uniek identificerend nummer dat tijdens communicatie tussen + mensen kan worden gebruikt om de specifieke partij aan te duiden. + type: string + maxLength: 10 + minLength: 1 + interneNotitie: + title: Interne notitie + description: Mededelingen, aantekeningen of bijzonderheden over de partij, + bedoeld voor intern gebruik. + type: string + maxLength: 1000 + betrokkenen: + description: Betrokkene bij klantcontact die een partij was. + type: array + items: + $ref: '#/components/schemas/BetrokkeneForeignKey' + nullable: true + digitaleAdressen: + description: Digitaal adres dat een partij verstrekte voor gebruik bij toekomstig + contact met de gemeente. + type: array + items: + $ref: '#/components/schemas/DigitaalAdresForeignKey' + nullable: true + voorkeursDigitaalAdres: + $ref: '#/components/schemas/DigitaalAdresForeignKey' + vertegenwoordigde: + description: Partij die een andere partij vertegenwoordigde. + type: array + items: + $ref: '#/components/schemas/PartijForeignKey' + nullable: true + partijIdentificatoren: + description: Partij-identificatoren die hoorde bij deze partij. + type: array + items: + $ref: '#/components/schemas/PartijIdentificatorForeignkey' + nullable: true + soortPartij: + title: Soort partij + description: Geeft aan van welke specifieke soort partij sprake is. + type: string + enum: + - persoon + - organisatie + - contactpersoon + indicatieGeheimhouding: + title: Indicatie geheimhouding + description: Geeft aan of de verstrekker van partijgegevens heeft aangegeven + dat deze gegevens als geheim beschouwd moeten worden. + type: boolean + voorkeurstaal: + title: Voorkeurstaal + description: 'Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur + contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html' + type: string + maxLength: 3 + indicatieActief: + title: Indicatie actief + description: Geeft aan of de contactgegevens van de partij nog gebruikt + morgen worden om contact op te nemen. Gegevens van niet-actieve partijen + mogen hiervoor niet worden gebruikt. + type: boolean + bezoekadres: + $ref: '#/components/schemas/PartijBezoekadres' + correspondentieadres: + $ref: '#/components/schemas/partij_correspondentieadres_serializer' + PersoonContact: + description: Naam die een persoon wil gebruiken tijdens contact met de gemeente. + Deze mag afwijken van de eventueel in de Basisregistratie Personen (BRP) bekende + naam van de persoon. + type: object + properties: + voorletters: + title: Voorletters + description: Een afkorting van de voornamen. Meestal de beginletter, maar + in sommige gevallen de beginletter gecombineerd met de tweede letter van + een voornaam. + type: string + maxLength: 10 + voornaam: + title: Voornaam + description: De voornaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + voorvoegselAchternaam: + title: Voorvoegsel achternaam + description: Een eventueel voorvoegsel dat hoort bij de achternaam die de + persoon wil gebruiken tijdens communicatie met de gemeente. + type: string + maxLength: 10 + achternaam: + title: Achternaam + description: Een achternaam die de persoon wil gebruiken tijdens communicatie + met de gemeente. + type: string + maxLength: 200 + nullable: true + Persoon: + required: + - partij + - contactnaam + type: object + properties: + id: + title: ID + type: integer + readOnly: true + url: + title: Url + description: URL-referentie naar dit object. Dit is de unieke identificatie + en locatie van dit object. + type: string + format: uri + readOnly: true + maxLength: 1000 + minLength: 1 + partij: + $ref: '#/components/schemas/PartijForeignKey' + contactnaam: + $ref: '#/components/schemas/PersoonContact' + betrokkene_correspondentieadres: + description: Adres waarop de betrokkene bij klantcontact naar aanleiding van + dat contact te versturen post wil ontvangen. Dit mag afwijken van voor de + verstrekker eventueel in een basisregistratie bekende adressen. + type: object + properties: + nummeraanduidingId: + title: Nummeraanduiding ID + description: Identificatie van het adres bij de Basisregistratie Adressen + en Gebouwen. + type: string + maxLength: 255 + adresregel1: + title: Adresregel 1 + description: Eerste deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel2: + title: Adresregel 2 + description: Tweede deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel3: + title: Adresregel 3 + description: Derde deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + land: + title: Land + description: Een code, opgenomen in Tabel 34, Landentabel, die het land + (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft. + type: string + maxLength: 4 + minLength: 4 + nullable: true + partij_correspondentieadres_serializer: + description: Adres waarop de partij post van de gemeente wil ontvangen. Dit + mag afwijken van voor de verstrekker eventueel in een basisregistratie bekende + adressen. + type: object + properties: + nummeraanduidingId: + title: Nummeraanduiding ID + description: Identificatie van het adres bij de Basisregistratie Adressen + en Gebouwen. + type: string + maxLength: 255 + adresregel1: + title: Adresregel 1 + description: Eerste deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel2: + title: Adresregel 2 + description: Tweede deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + adresregel3: + title: Adresregel 3 + description: Derde deel van het adres dat niet voorkomt in de Basisregistratie + Adressen en Gebouwen. + type: string + maxLength: 80 + land: + title: Land + description: Een code, opgenomen in Tabel 34, Landentabel, die het land + (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft. + type: string + maxLength: 4 + minLength: 4 + nullable: true diff --git a/src/openklant/components/klantinteracties/resources.md b/src/openklant/components/klantinteracties/resources.md new file mode 100644 index 00000000..17abe9da --- /dev/null +++ b/src/openklant/components/klantinteracties/resources.md @@ -0,0 +1,192 @@ +# Resources + +Dit document beschrijft de (RGBZ-)objecttypen die als resources ontsloten +worden met de beschikbare attributen. + + +## Actor + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/actor) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de actor. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| naam | Naam van de actor. | string | ja | C​R​U​D | +| soortActor | Geeft aan van welke specifieke soort actor sprake is. | string | ja | C​R​U​D | +| indicatieActief | Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. Voor niet-actieve is dit niet toegestaan. | boolean | nee | C​R​U​D | + +## Betrokkene + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/betrokkene) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de betrokkene bij klantcontact. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| rol | Rol die de betrokkene bij klantcontact tijdens dat contact vervulde. | string | ja | C​R​U​D | +| organisatienaam | Naam van de organisatie waarmee de betrokkene bij klantcontact een relatie had. | string | nee | C​R​U​D | +| initiator | | boolean | ja | C​R​U​D | + +## Bijlage + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/bijlage) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van het inhoudsdeel. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | + +## Contactpersoon + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/contactpersoon) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | + +## DigitaalAdres + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/digitaaladres) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van het digitaal adres. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| adres | Digitaal adres waarmee een persoon of organisatie bereikt kan worden. | string | ja | C​R​U​D | +| soortDigitaalAdres | Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen. | string | ja | C​R​U​D | +| omschrijving | Omschrijving van het digitaal adres. | string | ja | C​R​U​D | + +## GeautomatiseerdeActor + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/geautomatiseerdeactor) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| functie | Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert. | string | ja | C​R​U​D | +| omschrijving | Omschrijving van de geautomatiseerde actor. | string | nee | C​R​U​D | + +## InterneTaak + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/internetaak) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de interne taak. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| nummer | Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke interne taak aan te duiden. | string | ja | C​R​U​D | +| gevraagdeHandeling | Handeling die moet worden uitgevoerd om de taak af te ronden. | string | ja | C​R​U​D | +| toelichting | Toelichting die, aanvullend bij de inhoud van het klantcontact dat aanleiding gaf tot de taak en de gevraagde handeling, bijdraagt aan het kunnen afhandelen van de taak. | string | nee | C​R​U​D | +| status | Aanduiding van de vordering bij afhandeling van de interne taak. | string | ja | C​R​U​D | +| toegewezenOp | Datum en tijdstip waarop de interne taak aan een actor werd toegewezen. | string | nee | ~~C~~​R​~~U~~​~~D~~ | + +## Klantcontact + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/klantcontact) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de betrokkene bij klantcontact. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| gingOverOnderwerpobjecten | Onderwerpobject dat tijdens een klantcontact aan de orde was. | array | ja | C​R​U​D | +| omvatteBijlagen | Bijlage die (een deel van) de inhoud van het klantcontact beschrijft. | array | ja | C​R​U​D | +| hadBetrokkenen | Persoon of organisatie die betrokken was bij een klantcontact. | array | ja | C​R​U​D | +| leiddeTotInterneTaken | Klantcontact dat leidde tot een interne taak. | array | ja | C​R​U​D | +| nummer | Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden. | string | ja | C​R​U​D | +| kanaal | Communicatiekanaal dat bij het klantcontact werd gebruikt. | string | ja | C​R​U​D | +| onderwerp | Datgene waarover het klantcontact ging. | string | ja | C​R​U​D | +| hadBetrokkenActoren | Actor die bij een klantcontact betrokken was. | array | ja | C​R​U​D | +| inhoud | Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld, voor zover die voor betrokkenen of actoren relevant is. | string | nee | C​R​U​D | +| indicatieContactGelukt | Geeft, indien bekend, aan of de poging contact tussen de gemeente en inwoner(s) of organisatie(s) tot stand te brengen succesvol was. | boolean | nee | C​R​U​D | +| taal | Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html | string | ja | C​R​U​D | +| vertrouwelijk | Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld. | boolean | ja | C​R​U​D | +| plaatsgevondenOp | Datum en tijdstip waarop het klantontact plaatsvond. Als het klantcontact een gesprek betrof, is dit het moment waarop het gesprek begon. Als het klantcontact verzending of ontvangst van informatie betrof, is dit bij benadering het moment waarop informatie door gemeente verzonden of ontvangen werd. | string | nee | C​R​U​D | + +## Medewerker + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/medewerker) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| functie | Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert. | string | ja | C​R​U​D | +| emailadres | Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is. | string | nee | C​R​U​D | +| telefoonnummer | Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is. | string | ja | C​R​U​D | + +## Onderwerpobject + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/onderwerpobject) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van het onderwerpdeel. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | + +## Organisatie + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/organisatie) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| naam | Naam van de organisatie. | string | nee | C​R​U​D | +| contactpersoon | Organisatie waarvoor een contactpersoon werkte. | array | ja | C​R​U​D | + +## OrganisatorischeEenheid + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/organisatorischeeenheid) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| omschrijving | Omschrijving van de geautomatiseerde actor. | string | nee | C​R​U​D | +| emailadres | Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is. | string | nee | C​R​U​D | +| faxnummer | Faxnummer waaronder de organisatorische eenheid in de regel bereikbaar is. | string | ja | C​R​U​D | +| telefoonnummer | Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is. | string | ja | C​R​U​D | + +## PartijIdentificator + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/partijidentificator) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de partij-identificator. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| anderePartijIdentificator | Vrij tekstveld om de verwijzing naar een niet-voorgedefinieerd objecttype, soort objectID of Register vast te leggen. | string | nee | C​R​U​D | + +## Partij + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/partij) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| uuid | Unieke (technische) identificatiecode van de partij. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | +| nummer | Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden. | string | ja | C​R​U​D | +| interneNotitie | Mededelingen, aantekeningen of bijzonderheden over de partij, bedoeld voor intern gebruik. | string | nee | C​R​U​D | +| betrokkenen | Betrokkene bij klantcontact die een partij was. | array | ja | C​R​U​D | +| digitaleAdressen | Digitaal adres dat een partij verstrekte voor gebruik bij toekomstig contact met de gemeente. | array | ja | C​R​U​D | +| vertegenwoordigde | Partij die een andere partij vertegenwoordigde. | array | ja | C​R​U​D | +| partijIdentificatoren | Partij-identificatoren die hoorde bij deze partij. | array | ja | C​R​U​D | +| soortPartij | Geeft aan van welke specifieke soort partij sprake is. | string | ja | C​R​U​D | +| indicatieGeheimhouding | Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden. | boolean | ja | C​R​U​D | +| voorkeurstaal | Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html | string | nee | C​R​U​D | +| indicatieActief | Geeft aan of de contactgegevens van de partij nog gebruikt morgen worden om contact op te nemen. Gegevens van niet-actieve partijen mogen hiervoor niet worden gebruikt. | boolean | ja | C​R​U​D | + +## Persoon + +Objecttype op [GEMMA Online](https://www.gemmaonline.nl/index.php/Rgbz_1.0/doc/objecttype/persoon) + +| Attribuut | Omschrijving | Type | Verplicht | CRUD* | +| --- | --- | --- | --- | --- | +| id | | integer | nee | ~~C~~​R​~~U~~​~~D~~ | +| url | URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object. | string | nee | ~~C~~​R​~~U~~​~~D~~ | + + +* Create, Read, Update, Delete diff --git a/src/openklant/components/klantinteracties/swagger2.0.json b/src/openklant/components/klantinteracties/swagger2.0.json new file mode 100644 index 00000000..cdc403cf --- /dev/null +++ b/src/openklant/components/klantinteracties/swagger2.0.json @@ -0,0 +1,8474 @@ +{ + "swagger": "2.0", + "info": { + "title": "klantinteracties", + "description": "\nDescription WIP.\n", + "contact": { + "url": "https://zaakgerichtwerken.vng.cloud", + "email": "standaarden.ondersteuning@vng.nl" + }, + "license": { + "name": "EUPL 1.2", + "url": "https://opensource.org/licenses/EUPL-1.2" + }, + "version": "1.0.0" + }, + "basePath": "/klantinteracties/api/v1", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "JWT-Claims": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + }, + "security": [ + { + "JWT-Claims": [] + } + ], + "paths": { + "/actoren": { + "get": { + "operationId": "actor_list", + "summary": "Alle actoren opvragen.", + "description": "Alle actoren opvragen.", + "parameters": [ + { + "name": "naam", + "in": "query", + "description": "Zoek klantcontacten met specifieke tekst in inhoud", + "required": false, + "type": "string" + }, + { + "name": "soortActor", + "in": "query", + "description": "Geeft aan van welke specifieke soort actor sprake is.", + "required": false, + "type": "string", + "enum": [ + "medewerker", + "geautomatiseerde_actor", + "organisatorische_eenheid" + ] + }, + { + "name": "indicatieActief", + "in": "query", + "description": "Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. Voor niet-actieve is dit niet toegestaan.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorObjecttype", + "in": "query", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorSoortObjectId", + "in": "query", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorObjectId", + "in": "query", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Actor" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "post": { + "operationId": "actor_create", + "summary": "Maak een actor aan.", + "description": "Maak een actor aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Actor" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Actor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "parameters": [] + }, + "/actoren/{uuid}": { + "get": { + "operationId": "actor_read", + "summary": "Een specifiek actor opvragen.", + "description": "Een specifiek actor opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Actor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "put": { + "operationId": "actor_update", + "summary": "Werk een actor in zijn geheel bij.", + "description": "Werk een actor in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Actor" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Actor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "patch": { + "operationId": "actor_partial_update", + "summary": "Werk een actor deels bij.", + "description": "Werk een actor deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Actor" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Actor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "delete": { + "operationId": "actor_delete", + "summary": "Verwijder een actor.", + "description": "Verwijder een actor.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "actoren" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de actor.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/betrokkenen": { + "get": { + "operationId": "betrokkene_list", + "summary": "Alle betrokkeneen opvragen.", + "description": "Alle betrokkeneen opvragen.", + "parameters": [ + { + "name": "klantcontact__nummer", + "in": "query", + "description": "Zoek betrokkene object op basis van het klantcontact nummer", + "required": false, + "type": "string" + }, + { + "name": "klantcontact__uuid", + "in": "query", + "description": "Zoek betrokkene object op basis van het klantcontact uuid", + "required": false, + "type": "string" + }, + { + "name": "klantcontact__url", + "in": "query", + "description": "Zoek betrokkene object op basis van het klantcontact url", + "required": false, + "type": "string" + }, + { + "name": "verstrektedigitaalAdres__adres", + "in": "query", + "description": "Zoek betrokkene object op basis van het digitaaladres adres", + "required": false, + "type": "string" + }, + { + "name": "verstrektedigitaalAdres__uuid", + "in": "query", + "description": "Zoek betrokkene object op basis van het digitaaladres uuid", + "required": false, + "type": "string" + }, + { + "name": "verstrektedigitaalAdres__url", + "in": "query", + "description": "Zoek betrokkene object op basis van het digitaaladres url", + "required": false, + "type": "string" + }, + { + "name": "wasPartij__nummer", + "in": "query", + "description": "Zoek betrokkene object op basis van het partij nummer", + "required": false, + "type": "string" + }, + { + "name": "wasPartij__url", + "in": "query", + "description": "Zoek betrokkene object op basis van het partij url", + "required": false, + "type": "string" + }, + { + "name": "wasPartij__uuid", + "in": "query", + "description": "Zoek betrokkene object op basis van het partij uuid", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Betrokkene" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "post": { + "operationId": "betrokkene_create", + "summary": "Maak een betrokkene aan.", + "description": "Maak een betrokkene aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Betrokkene" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Betrokkene" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "parameters": [] + }, + "/betrokkenen/{uuid}": { + "get": { + "operationId": "betrokkene_read", + "summary": "Een specifiek betrokkene opvragen.", + "description": "Een specifiek betrokkene opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Betrokkene" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "put": { + "operationId": "betrokkene_update", + "summary": "Werk een betrokkene in zijn geheel bij.", + "description": "Werk een betrokkene in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Betrokkene" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Betrokkene" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "patch": { + "operationId": "betrokkene_partial_update", + "summary": "Werk een betrokkene deels bij.", + "description": "Werk een betrokkene deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Betrokkene" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Betrokkene" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "delete": { + "operationId": "betrokkene_delete", + "summary": "Verwijder een betrokkene.", + "description": "Verwijder een betrokkene.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "betrokkenen" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/bijlagen": { + "get": { + "operationId": "bijlage_list", + "summary": "Alle bijlagen opvragen.", + "description": "Alle bijlagen opvragen.", + "parameters": [ + { + "name": "objectidentificatorObjecttype", + "in": "query", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorSoortObjectId", + "in": "query", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorObjectId", + "in": "query", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Bijlage" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "post": { + "operationId": "bijlage_create", + "summary": "Maak een bijlage aan.", + "description": "Maak een bijlage aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Bijlage" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Bijlage" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "parameters": [] + }, + "/bijlagen/{uuid}": { + "get": { + "operationId": "bijlage_read", + "summary": "Een specifiek bijlage opvragen.", + "description": "Een specifiek bijlage opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Bijlage" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "put": { + "operationId": "bijlage_update", + "summary": "Werk een bijlage in zijn geheel bij.", + "description": "Werk een bijlage in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Bijlage" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Bijlage" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "patch": { + "operationId": "bijlage_partial_update", + "summary": "Werk een bijlage deels bij.", + "description": "Werk een bijlage deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Bijlage" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Bijlage" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "delete": { + "operationId": "bijlage_delete", + "summary": "Verwijder een bijlage.", + "description": "Verwijder een bijlage.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "bijlagen" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van het inhoudsdeel.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/contact-persoon": { + "get": { + "operationId": "contactpersoon_list", + "summary": "Alle contactpersonen opvragen.", + "description": "Alle contactpersonen opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Contactpersoon" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "post": { + "operationId": "contactpersoon_create", + "summary": "Maak een contactpersoon aan.", + "description": "Maak een contactpersoon aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Contactpersoon" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Contactpersoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "parameters": [] + }, + "/contact-persoon/{id}": { + "get": { + "operationId": "contactpersoon_read", + "summary": "Een specifiek contactpersoon opvragen.", + "description": "Een specifiek contactpersoon opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Contactpersoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "put": { + "operationId": "contactpersoon_update", + "summary": "Werk een contactpersoon in zijn geheel bij.", + "description": "Werk een contactpersoon in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Contactpersoon" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Contactpersoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "patch": { + "operationId": "contactpersoon_partial_update", + "summary": "Werk een contactpersoon deels bij.", + "description": "Werk een contactpersoon deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Contactpersoon" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Contactpersoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "delete": { + "operationId": "contactpersoon_delete", + "summary": "Verwijder een contactpersoon.", + "description": "Verwijder een contactpersoon.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "contact-persoon" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this contact persoon.", + "required": true, + "type": "integer" + } + ] + }, + "/digitaleadressen": { + "get": { + "operationId": "digitaaladres_list", + "summary": "Alle digitale adressen opvragen.", + "description": "Alle digitale adressen opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/DigitaalAdres" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "post": { + "operationId": "digitaaladres_create", + "summary": "Maak een digitaal adres aan.", + "description": "Maak een digitaal adres aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DigitaalAdres" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/DigitaalAdres" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "parameters": [] + }, + "/digitaleadressen/{uuid}": { + "get": { + "operationId": "digitaaladres_read", + "summary": "Een specifiek digitaal adres opvragen.", + "description": "Een specifiek digitaal adres opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DigitaalAdres" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "put": { + "operationId": "digitaaladres_update", + "summary": "Werk een digitaal adres in zijn geheel bij.", + "description": "Werk een digitaal adres in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DigitaalAdres" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DigitaalAdres" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "patch": { + "operationId": "digitaaladres_partial_update", + "summary": "Werk een digitaal adres deels bij.", + "description": "Werk een digitaal adres deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DigitaalAdres" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DigitaalAdres" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "delete": { + "operationId": "digitaaladres_delete", + "summary": "Verwijder een digitaal adres.", + "description": "Verwijder een digitaal adres.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "digitaleadressen" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van het digitaal adres.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/geautomatiseerde-actoren": { + "get": { + "operationId": "geautomatiseerdeactor_list", + "description": "Alle geautomatiseerde actoren opvragen.\nAlle geautomatiseerde actoren opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/GeautomatiseerdeActor" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "post": { + "operationId": "geautomatiseerdeactor_create", + "description": "Maak een geautomatiseerde actor aan.\nMaak een geautomatiseerde actor aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "parameters": [] + }, + "/geautomatiseerde-actoren/{id}": { + "get": { + "operationId": "geautomatiseerdeactor_read", + "description": "Een specifiek geautomatiseerde actor opvragen.\nEen specifiek geautomatiseerde actor opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "put": { + "operationId": "geautomatiseerdeactor_update", + "description": "Werk een geautomatiseerde actor in zijn geheel bij.\nWerk een geautomatiseerde actor in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "patch": { + "operationId": "geautomatiseerdeactor_partial_update", + "description": "Werk een geautomatiseerde actor deels bij.\nWerk een geautomatiseerde actor deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GeautomatiseerdeActor" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "delete": { + "operationId": "geautomatiseerdeactor_delete", + "description": "Verwijder een geautomatiseerde actor.\nVerwijder een geautomatiseerde actor.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "geautomatiseerde-actoren" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this geautomatiseerde actor.", + "required": true, + "type": "integer" + } + ] + }, + "/internetaken": { + "get": { + "operationId": "internetaak_list", + "summary": "Alle interne taken opvragen.", + "description": "Alle interne taken opvragen.", + "parameters": [ + { + "name": "nummer", + "in": "query", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke interne taak aan te duiden.", + "required": false, + "type": "string" + }, + { + "name": "status", + "in": "query", + "description": "Aanduiding van de vordering bij afhandeling van de interne taak.", + "required": false, + "type": "string", + "enum": [ + "te_verwerken", + "verwerkt" + ] + }, + { + "name": "actor__naam", + "in": "query", + "description": "Naam van de actor.", + "required": false, + "type": "string" + }, + { + "name": "klantcontact__uuid", + "in": "query", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "required": false, + "type": "string" + }, + { + "name": "klantcontact__nummer", + "in": "query", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/InterneTaak" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "post": { + "operationId": "internetaak_create", + "summary": "Maak een interne taak aan.", + "description": "Maak een interne taak aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InterneTaak" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/InterneTaak" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "parameters": [] + }, + "/internetaken/{uuid}": { + "get": { + "operationId": "internetaak_read", + "summary": "Een specifiek interne taak opvragen.", + "description": "Een specifiek interne taak opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/InterneTaak" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "put": { + "operationId": "internetaak_update", + "summary": "Werk een interne taak in zijn geheel bij.", + "description": "Werk een interne taak in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InterneTaak" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/InterneTaak" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "patch": { + "operationId": "internetaak_partial_update", + "summary": "Werk een interne taak deels bij.", + "description": "Werk een interne taak deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InterneTaak" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/InterneTaak" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "delete": { + "operationId": "internetaak_delete", + "summary": "Verwijder een interne taak.", + "description": "Verwijder een interne taak.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "internetaken" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de interne taak.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/klantcontacten": { + "get": { + "operationId": "klantcontact_list", + "summary": "Alle klanten contacten opvragen.", + "description": "Alle klanten contacten opvragen.", + "parameters": [ + { + "name": "hadBetrokkene__url", + "in": "query", + "description": "Zoek klantcontract object op basis van het betrokkene url", + "required": false, + "type": "string" + }, + { + "name": "hadBetrokkene__uuid", + "in": "query", + "description": "Zoek klantcontract object op basis van het betrokkene uuid", + "required": false, + "type": "string" + }, + { + "name": "nummer", + "in": "query", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", + "required": false, + "type": "string" + }, + { + "name": "kanaal", + "in": "query", + "description": "Communicatiekanaal dat bij het klantcontact werd gebruikt.", + "required": false, + "type": "string" + }, + { + "name": "inhoud", + "in": "query", + "description": "Zoek klantcontacten met specifieke tekst in inhoud", + "required": false, + "type": "string" + }, + { + "name": "onderwerp", + "in": "query", + "description": "Zoek klantcontacten met specifieke tekst in onderwerp", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Klantcontact" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "post": { + "operationId": "klantcontact_create", + "summary": "Maak een klant contact aan.", + "description": "Maak een klant contact aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Klantcontact" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Klantcontact" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "parameters": [] + }, + "/klantcontacten/{uuid}": { + "get": { + "operationId": "klantcontact_read", + "summary": "Een specifiek klant contact opvragen.", + "description": "Een specifiek klant contact opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Klantcontact" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "put": { + "operationId": "klantcontact_update", + "summary": "Werk een klant contact in zijn geheel bij.", + "description": "Werk een klant contact in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Klantcontact" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Klantcontact" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "patch": { + "operationId": "klantcontact_partial_update", + "summary": "Werk een klant contact deels bij.", + "description": "Werk een klant contact deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Klantcontact" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Klantcontact" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "delete": { + "operationId": "klantcontact_delete", + "summary": "Verwijder een klant contact.", + "description": "Verwijder een klant contact.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "klantcontacten" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/medewerker": { + "get": { + "operationId": "medewerker_list", + "description": "Alle medewerkers opvragen.\nAlle medewerkers opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Medewerker" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "post": { + "operationId": "medewerker_create", + "description": "Maak een medewerker aan.\nMaak een medewerker aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Medewerker" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Medewerker" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "parameters": [] + }, + "/medewerker/{id}": { + "get": { + "operationId": "medewerker_read", + "description": "Een specifiek medewerker opvragen.\nEen specifiek medewerker opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Medewerker" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "put": { + "operationId": "medewerker_update", + "description": "Werk een medewerker in zijn geheel bij.\nWerk een medewerker in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Medewerker" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Medewerker" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "patch": { + "operationId": "medewerker_partial_update", + "description": "Werk een medewerker deels bij.\nWerk een medewerker deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Medewerker" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Medewerker" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "delete": { + "operationId": "medewerker_delete", + "description": "Verwijder een medewerker.\nVerwijder een medewerker.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "medewerker" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this medewerker.", + "required": true, + "type": "integer" + } + ] + }, + "/onderwerpobjecten": { + "get": { + "operationId": "onderwerpobject_list", + "summary": "Alle onderwerpobjecten opvragen.", + "description": "Alle onderwerpobjecten opvragen.", + "parameters": [ + { + "name": "objectidentificatorObjecttype", + "in": "query", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorSoortObjectId", + "in": "query", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "required": false, + "type": "string" + }, + { + "name": "objectidentificatorObjectId", + "in": "query", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Onderwerpobject" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "post": { + "operationId": "onderwerpobject_create", + "summary": "Maak een onderwerpobject aan.", + "description": "Maak een onderwerpobject aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Onderwerpobject" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Onderwerpobject" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "parameters": [] + }, + "/onderwerpobjecten/{uuid}": { + "get": { + "operationId": "onderwerpobject_read", + "summary": "Een specifiek onderwerpobject opvragen.", + "description": "Een specifiek onderwerpobject opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Onderwerpobject" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "put": { + "operationId": "onderwerpobject_update", + "summary": "Werk een onderwerpobject in zijn geheel bij.", + "description": "Werk een onderwerpobject in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Onderwerpobject" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Onderwerpobject" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "patch": { + "operationId": "onderwerpobject_partial_update", + "summary": "Werk een onderwerpobject deels bij.", + "description": "Werk een onderwerpobject deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Onderwerpobject" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Onderwerpobject" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "delete": { + "operationId": "onderwerpobject_delete", + "summary": "Verwijder een onderwerpobject.", + "description": "Verwijder een onderwerpobject.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "onderwerpobjecten" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van het onderwerpdeel.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/organisaties": { + "get": { + "operationId": "organisatie_list", + "summary": "Alle organisaties opvragen.", + "description": "Alle organisaties opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Organisatie" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "post": { + "operationId": "organisatie_create", + "summary": "Maak een organisatie aan.", + "description": "Maak een organisatie aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Organisatie" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Organisatie" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "parameters": [] + }, + "/organisaties/{id}": { + "get": { + "operationId": "organisatie_read", + "summary": "Een specifiek organisatie opvragen.", + "description": "Een specifiek organisatie opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Organisatie" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "put": { + "operationId": "organisatie_update", + "summary": "Werk een organisatie in zijn geheel bij.", + "description": "Werk een organisatie in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Organisatie" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Organisatie" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "patch": { + "operationId": "organisatie_partial_update", + "summary": "Werk een organisatie deels bij.", + "description": "Werk een organisatie deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Organisatie" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Organisatie" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "delete": { + "operationId": "organisatie_delete", + "summary": "Verwijder een organisatie.", + "description": "Verwijder een organisatie.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisaties" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this organisatie.", + "required": true, + "type": "integer" + } + ] + }, + "/organisatorische-eenheid": { + "get": { + "operationId": "organisatorischeeenheid_list", + "description": "Alle organisatorische eenheid opvragen.\nAlle organisatorische eenheid opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/OrganisatorischeEenheid" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "post": { + "operationId": "organisatorischeeenheid_create", + "description": "Maak een organisatorische eenheid aan.\nMaak een organisatorische eenheid aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "parameters": [] + }, + "/organisatorische-eenheid/{id}": { + "get": { + "operationId": "organisatorischeeenheid_read", + "description": "Een specifiek organisatorische eenheid opvragen.\nEen specifiek organisatorische eenheid opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "put": { + "operationId": "organisatorischeeenheid_update", + "description": "Werk een organisatorische eenheid in zijn geheel bij.\nWerk een organisatorische eenheid in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "patch": { + "operationId": "organisatorischeeenheid_partial_update", + "description": "Werk een organisatorische eenheid deels bij.\nWerk een organisatorische eenheid deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/OrganisatorischeEenheid" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "delete": { + "operationId": "organisatorischeeenheid_delete", + "description": "Verwijder een organisatorische eenheid.\nVerwijder een organisatorische eenheid.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "organisatorische-eenheid" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this organisatorische eenheid.", + "required": true, + "type": "integer" + } + ] + }, + "/partij-identificatoren": { + "get": { + "operationId": "partijidentificator_list", + "summary": "Alle partij-identificatoren opvragen.", + "description": "Alle partij-identificatoren opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/PartijIdentificator" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "post": { + "operationId": "partijidentificator_create", + "summary": "Maak een partij-identificator aan.", + "description": "Maak een partij-identificator aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PartijIdentificator" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/PartijIdentificator" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "parameters": [] + }, + "/partij-identificatoren/{uuid}": { + "get": { + "operationId": "partijidentificator_read", + "summary": "Een specifiek partij-identificator opvragen.", + "description": "Een specifiek partij-identificator opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/PartijIdentificator" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "put": { + "operationId": "partijidentificator_update", + "summary": "Werk een partij-identificator in zijn geheel bij.", + "description": "Werk een partij-identificator in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PartijIdentificator" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/PartijIdentificator" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "patch": { + "operationId": "partijidentificator_partial_update", + "summary": "Werk een partij-identificator deels bij.", + "description": "Werk een partij-identificator deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PartijIdentificator" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/PartijIdentificator" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "delete": { + "operationId": "partijidentificator_delete", + "summary": "Verwijder een partij-identificator.", + "description": "Verwijder een partij-identificator.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partij-identificatoren" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de partij-identificator.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/partijen": { + "get": { + "operationId": "partij_list", + "summary": "Alle partijen opvragen.", + "description": "Alle partijen opvragen.", + "parameters": [ + { + "name": "werktVoorPartij__url", + "in": "query", + "description": "Zoek partij object op basis van het vertegenwoordigde partij url", + "required": false, + "type": "string" + }, + { + "name": "werktVoorPartij__uuid", + "in": "query", + "description": "Zoek partij object op basis van het vertegenwoordigde partij uuid", + "required": false, + "type": "string" + }, + { + "name": "werktVoorPartij__nummer", + "in": "query", + "description": "Zoek partij object op basis van het vertegenwoordigde partij nummer", + "required": false, + "type": "string" + }, + { + "name": "partijIdentificator__objecttype", + "in": "query", + "description": "Zoek partij object op basis van het partij identificator objecttype", + "required": false, + "type": "string" + }, + { + "name": "partijIdentificator__soortObjectId", + "in": "query", + "description": "Zoek partij object op basis van het partij identificator soort object ID", + "required": false, + "type": "string" + }, + { + "name": "partijIdentificator__objectId", + "in": "query", + "description": "Zoek partij object op basis van het partij identificator object ID", + "required": false, + "type": "string" + }, + { + "name": "partijIdentificator__register", + "in": "query", + "description": "Zoek partij object op basis van het partij identificator register", + "required": false, + "type": "string" + }, + { + "name": "nummer", + "in": "query", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden.", + "required": false, + "type": "string" + }, + { + "name": "indicatieGeheimhouding", + "in": "query", + "description": "Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden.", + "required": false, + "type": "string" + }, + { + "name": "indicatieActief", + "in": "query", + "description": "Geeft aan of de contactgegevens van de partij nog gebruikt morgen worden om contact op te nemen. Gegevens van niet-actieve partijen mogen hiervoor niet worden gebruikt.", + "required": false, + "type": "string" + }, + { + "name": "soortPartij", + "in": "query", + "description": "Geeft aan van welke specifieke soort partij sprake is.", + "required": false, + "type": "string", + "enum": [ + "persoon", + "organisatie", + "contactpersoon" + ] + }, + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Partij" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "post": { + "operationId": "partij_create", + "summary": "Maak een partij aan.", + "description": "Maak een partij aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Partij" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Partij" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "parameters": [] + }, + "/partijen/{uuid}": { + "get": { + "operationId": "partij_read", + "summary": "Een specifiek partij opvragen.", + "description": "Een specifiek partij opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Partij" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "put": { + "operationId": "partij_update", + "summary": "Werk een partij in zijn geheel bij.", + "description": "Werk een partij in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Partij" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Partij" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "patch": { + "operationId": "partij_partial_update", + "summary": "Werk een partij deels bij.", + "description": "Werk een partij deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Partij" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Partij" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "delete": { + "operationId": "partij_delete", + "summary": "Verwijder een partij.", + "description": "Verwijder een partij.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "partijen" + ] + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Unieke (technische) identificatiecode van de partij.", + "required": true, + "type": "string", + "format": "uuid" + } + ] + }, + "/persoon": { + "get": { + "operationId": "persoon_list", + "summary": "Alle personen opvragen.", + "description": "Alle personen opvragen.", + "parameters": [ + { + "name": "page", + "in": "query", + "description": "Een pagina binnen de gepagineerde set resultaten.", + "required": false, + "type": "integer" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "required": [ + "count", + "results" + ], + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "next": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "previous": { + "type": "string", + "format": "uri", + "x-nullable": true + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Persoon" + } + } + } + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "post": { + "operationId": "persoon_create", + "summary": "Maak een persoon aan.", + "description": "Maak een persoon aan.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Persoon" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Persoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + }, + "Location": { + "schema": { + "type": "string", + "format": "uri" + }, + "description": "URL waar de resource leeft." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "parameters": [] + }, + "/persoon/{id}": { + "get": { + "operationId": "persoon_read", + "summary": "Een specifiek persoon opvragen.", + "description": "Een specifiek persoon opvragen.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Persoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "put": { + "operationId": "persoon_update", + "summary": "Werk een persoon in zijn geheel bij.", + "description": "Werk een persoon in zijn geheel bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Persoon" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Persoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "patch": { + "operationId": "persoon_partial_update", + "summary": "Werk een persoon deels bij.", + "description": "Werk een persoon deels bij.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "Content type van de verzoekinhoud.", + "required": true, + "type": "string", + "enum": [ + "application/json" + ] + }, + { + "name": "data", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Persoon" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Persoon" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "delete": { + "operationId": "persoon_delete", + "summary": "Verwijder een persoon.", + "description": "Verwijder een persoon.", + "parameters": [], + "responses": { + "204": { + "description": "No content", + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "406": { + "$ref": "#/responses/406" + }, + "409": { + "$ref": "#/responses/409" + }, + "410": { + "$ref": "#/responses/410" + }, + "415": { + "$ref": "#/responses/415" + }, + "429": { + "$ref": "#/responses/429" + }, + "500": { + "$ref": "#/responses/500" + } + }, + "tags": [ + "persoon" + ] + }, + "parameters": [ + { + "name": "id", + "in": "path", + "description": "A unique integer value identifying this persoon.", + "required": true, + "type": "integer" + } + ] + } + }, + "definitions": { + "Objectidentificator": { + "description": "Gegevens die een onderwerpobject in een extern register uniek identificeren.", + "type": "object", + "properties": { + "objecttype": { + "title": "Objecttype", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "type": "string", + "maxLength": 200 + }, + "soortObjectId": { + "title": "Soort object ID", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "type": "string", + "maxLength": 200 + }, + "objectId": { + "title": "Object ID", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "type": "string", + "maxLength": 200 + }, + "register": { + "title": "Register", + "description": "Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Actor": { + "required": [ + "naam", + "soortActor" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de actor.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "naam": { + "title": "Naam", + "description": "Naam van de actor.", + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "soortActor": { + "title": "Soort actor", + "description": "Geeft aan van welke specifieke soort actor sprake is.", + "type": "string", + "enum": [ + "medewerker", + "geautomatiseerde_actor", + "organisatorische_eenheid" + ] + }, + "indicatieActief": { + "title": "Indicatie actief", + "description": "Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. Voor niet-actieve is dit niet toegestaan.", + "type": "boolean" + }, + "objectidentificator": { + "$ref": "#/definitions/Objectidentificator" + } + } + }, + "Fout": { + "required": [ + "code", + "title", + "status", + "detail", + "instance" + ], + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "URI referentie naar het type fout, bedoeld voor developers", + "type": "string" + }, + "code": { + "title": "Code", + "description": "Systeemcode die het type fout aangeeft", + "type": "string", + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "Generieke titel voor het type fout", + "type": "string", + "minLength": 1 + }, + "status": { + "title": "Status", + "description": "De HTTP status code", + "type": "integer" + }, + "detail": { + "title": "Detail", + "description": "Extra informatie bij de fout, indien beschikbaar", + "type": "string", + "minLength": 1 + }, + "instance": { + "title": "Instance", + "description": "URI met referentie naar dit specifiek voorkomen van de fout. Deze kan gebruikt worden in combinatie met server logs, bijvoorbeeld.", + "type": "string", + "minLength": 1 + } + } + }, + "FieldValidationError": { + "required": [ + "name", + "code", + "reason" + ], + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Naam van het veld met ongeldige gegevens", + "type": "string", + "minLength": 1 + }, + "code": { + "title": "Code", + "description": "Systeemcode die het type fout aangeeft", + "type": "string", + "minLength": 1 + }, + "reason": { + "title": "Reason", + "description": "Uitleg wat er precies fout is met de gegevens", + "type": "string", + "minLength": 1 + } + } + }, + "ValidatieFout": { + "required": [ + "code", + "title", + "status", + "detail", + "instance", + "invalidParams" + ], + "type": "object", + "properties": { + "type": { + "title": "Type", + "description": "URI referentie naar het type fout, bedoeld voor developers", + "type": "string" + }, + "code": { + "title": "Code", + "description": "Systeemcode die het type fout aangeeft", + "type": "string", + "minLength": 1 + }, + "title": { + "title": "Title", + "description": "Generieke titel voor het type fout", + "type": "string", + "minLength": 1 + }, + "status": { + "title": "Status", + "description": "De HTTP status code", + "type": "integer" + }, + "detail": { + "title": "Detail", + "description": "Extra informatie bij de fout, indien beschikbaar", + "type": "string", + "minLength": 1 + }, + "instance": { + "title": "Instance", + "description": "URI met referentie naar dit specifiek voorkomen van de fout. Deze kan gebruikt worden in combinatie met server logs, bijvoorbeeld.", + "type": "string", + "minLength": 1 + }, + "invalidParams": { + "type": "array", + "items": { + "$ref": "#/definitions/FieldValidationError" + } + } + } + }, + "PartijForeignKey": { + "description": "Betrokkene bij klantcontact die een partij was.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de partij.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "KlantcontactForeignKey": { + "description": "Persoon of organisatie die betrokken was bij een klantcontact.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + } + }, + "Bezoekadres": { + "description": "Adres waarop de betrokkene bij klantcontact in naar aanleiding van dat contact af te leggen bezoeken wil ontvangen. Dit mag afwijken van voor de verstrekker eventueel in een basisregistratie bekende adressen.", + "type": "object", + "properties": { + "nummeraanduidingId": { + "title": "Nummeraanduiding ID", + "description": "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 255 + }, + "adresregel1": { + "title": "Adresregel 1", + "description": "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel2": { + "title": "Adresregel 2", + "description": "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel3": { + "title": "Adresregel 3", + "description": "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "land": { + "title": "Land", + "description": "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + "type": "string", + "maxLength": 4, + "minLength": 4 + } + }, + "x-nullable": true + }, + "betrokkene correspondentieadres": { + "description": "Adres waarop de betrokkene bij klantcontact naar aanleiding van dat contact te versturen post wil ontvangen. Dit mag afwijken van voor de verstrekker eventueel in een basisregistratie bekende adressen.", + "type": "object", + "properties": { + "nummeraanduidingId": { + "title": "Nummeraanduiding ID", + "description": "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 255 + }, + "adresregel1": { + "title": "Adresregel 1", + "description": "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel2": { + "title": "Adresregel 2", + "description": "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel3": { + "title": "Adresregel 3", + "description": "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "land": { + "title": "Land", + "description": "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + "type": "string", + "maxLength": 4, + "minLength": 4 + } + }, + "x-nullable": true + }, + "Contactnaam": { + "description": "Naam die de betrokkene bij klantcontact tijdens vervolghandelingen naar aanleiding van dat contact wil gebruiken. Deze mag afwijken van eventueel in de Basisregistratie Personen (BRP) bekende naam van de betrokkene.", + "type": "object", + "properties": { + "voorletters": { + "title": "Voorletters", + "description": "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", + "type": "string", + "maxLength": 10 + }, + "voornaam": { + "title": "Voornaam", + "description": "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + }, + "voorvoegselAchternaam": { + "title": "Voorvoegsel achternaam", + "description": "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 10 + }, + "achternaam": { + "title": "Achternaam", + "description": "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Betrokkene": { + "required": [ + "wasPartij", + "hadKlantcontact", + "rol", + "initiator" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "wasPartij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "hadKlantcontact": { + "$ref": "#/definitions/KlantcontactForeignKey" + }, + "bezoekadres": { + "$ref": "#/definitions/Bezoekadres" + }, + "correspondentieadres": { + "$ref": "#/definitions/betrokkene correspondentieadres" + }, + "contactnaam": { + "$ref": "#/definitions/Contactnaam" + }, + "rol": { + "title": "Rol", + "description": "Rol die de betrokkene bij klantcontact tijdens dat contact vervulde.", + "type": "string", + "enum": [ + "vertegenwoordiger", + "klant" + ] + }, + "organisatienaam": { + "title": "Organisatienaam", + "description": "Naam van de organisatie waarmee de betrokkene bij klantcontact een relatie had.", + "type": "string", + "maxLength": 200 + }, + "initiator": { + "title": "Initiator", + "type": "boolean" + } + } + }, + "BijlageObjectidentificator": { + "description": "Gegevens die een inhoudsobject in een extern register uniek identificeren.", + "type": "object", + "properties": { + "objecttype": { + "title": "Objecttype", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "type": "string", + "maxLength": 200 + }, + "soortObjectId": { + "title": "Soort object ID", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "type": "string", + "maxLength": 200 + }, + "objectId": { + "title": "Object ID", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "type": "string", + "maxLength": 200 + }, + "register": { + "title": "Register", + "description": "Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Bijlage": { + "required": [ + "wasBijlageVanKlantcontact" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het inhoudsdeel.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "wasBijlageVanKlantcontact": { + "$ref": "#/definitions/KlantcontactForeignKey" + }, + "objectidentificator": { + "$ref": "#/definitions/BijlageObjectidentificator" + } + } + }, + "OrganisatieForeignKey": { + "description": "Organisatie waarvoor een contactpersoon werkte.", + "required": [ + "id" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "ContactpersoonPersoon": { + "description": "Naam die een contactpersoon wil gebruiken tijdens contact met de gemeente. Deze mag afwijken van de eventueel in de Basisregistratie Personen (BRP) bekende naam van de contactpersoon.", + "type": "object", + "properties": { + "voorletters": { + "title": "Voorletters", + "description": "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", + "type": "string", + "maxLength": 10 + }, + "voornaam": { + "title": "Voornaam", + "description": "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + }, + "voorvoegselAchternaam": { + "title": "Voorvoegsel achternaam", + "description": "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 10 + }, + "achternaam": { + "title": "Achternaam", + "description": "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Contactpersoon": { + "required": [ + "partij", + "werkteVoorOrganisatie" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "partij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "werkteVoorOrganisatie": { + "$ref": "#/definitions/OrganisatieForeignKey" + }, + "contactnaam": { + "$ref": "#/definitions/ContactpersoonPersoon" + } + } + }, + "BetrokkeneForeignKey": { + "description": "Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij opvolging van een klantcontact.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "DigitaalAdres": { + "required": [ + "verstrektDoorBetrokkene", + "verstrektDoorPartij", + "adres", + "soortDigitaalAdres", + "omschrijving" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het digitaal adres.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "verstrektDoorBetrokkene": { + "$ref": "#/definitions/BetrokkeneForeignKey" + }, + "verstrektDoorPartij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "adres": { + "title": "Adres", + "description": "Digitaal adres waarmee een persoon of organisatie bereikt kan worden.", + "type": "string", + "maxLength": 80, + "minLength": 1 + }, + "soortDigitaalAdres": { + "title": "Soort digitaal adres", + "description": "Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen.", + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + "omschrijving": { + "title": "Omschrijving", + "description": "Omschrijving van het digitaal adres.", + "type": "string", + "maxLength": 40, + "minLength": 1 + } + } + }, + "ActorForeignKey": { + "description": "Iets dat of iemand die voor de gemeente werkzaamheden uitvoert.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de actor.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + } + }, + "GeautomatiseerdeActor": { + "required": [ + "actor", + "functie" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "actor": { + "$ref": "#/definitions/ActorForeignKey" + }, + "functie": { + "title": "Functie", + "description": "Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", + "type": "string", + "maxLength": 40, + "minLength": 1 + }, + "omschrijving": { + "title": "Omschrijving", + "description": "Omschrijving van de geautomatiseerde actor.", + "type": "string", + "maxLength": 200 + } + } + }, + "InterneTaak": { + "required": [ + "nummer", + "gevraagdeHandeling", + "aanleidinggevendKlantcontact", + "toegewezenAanActor", + "status" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de interne taak.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "nummer": { + "title": "Nummer", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke interne taak aan te duiden.", + "type": "string", + "maxLength": 10, + "minLength": 1 + }, + "gevraagdeHandeling": { + "title": "Gevraagde handeling", + "description": "Handeling die moet worden uitgevoerd om de taak af te ronden.", + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "aanleidinggevendKlantcontact": { + "$ref": "#/definitions/KlantcontactForeignKey" + }, + "toegewezenAanActor": { + "$ref": "#/definitions/ActorForeignKey" + }, + "toelichting": { + "title": "Toelichting", + "description": "Toelichting die, aanvullend bij de inhoud van het klantcontact dat aanleiding gaf tot de taak en de gevraagde handeling, bijdraagt aan het kunnen afhandelen van de taak.", + "type": "string", + "maxLength": 1000 + }, + "status": { + "title": "Status", + "description": "Aanduiding van de vordering bij afhandeling van de interne taak.", + "type": "string", + "enum": [ + "te_verwerken", + "verwerkt" + ] + }, + "toegewezenOp": { + "title": "Toegewezen op", + "description": "Datum en tijdstip waarop de interne taak aan een actor werd toegewezen.", + "type": "string", + "format": "date-time", + "readOnly": true + } + } + }, + "OnderwerpobjectForeignKey": { + "description": "Onderwerpobject dat tijdens een klantcontact aan de orde was.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het onderwerpdeel.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "BijlageForeignKey": { + "description": "Bijlage die (een deel van) de inhoud van het klantcontact beschrijft.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het inhoudsdeel.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "BetrokkeneForeignkey": { + "description": "Persoon of organisatie die betrokken was bij een klantcontact.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "InterneTaakForeignKey": { + "description": "Klantcontact dat leidde tot een interne taak.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de interne taak.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "Klantcontact": { + "required": [ + "gingOverOnderwerpobjecten", + "omvatteBijlagen", + "hadBetrokkenen", + "leiddeTotInterneTaken", + "nummer", + "kanaal", + "onderwerp", + "hadBetrokkenActoren", + "taal", + "vertrouwelijk" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "gingOverOnderwerpobjecten": { + "description": "Onderwerpobject dat tijdens een klantcontact aan de orde was.", + "type": "array", + "items": { + "$ref": "#/definitions/OnderwerpobjectForeignKey" + }, + "x-nullable": true + }, + "omvatteBijlagen": { + "description": "Bijlage die (een deel van) de inhoud van het klantcontact beschrijft.", + "type": "array", + "items": { + "$ref": "#/definitions/BijlageForeignKey" + }, + "x-nullable": true + }, + "hadBetrokkenen": { + "description": "Persoon of organisatie die betrokken was bij een klantcontact.", + "type": "array", + "items": { + "$ref": "#/definitions/BetrokkeneForeignkey" + }, + "x-nullable": true + }, + "leiddeTotInterneTaken": { + "description": "Klantcontact dat leidde tot een interne taak.", + "type": "array", + "items": { + "$ref": "#/definitions/InterneTaakForeignKey" + }, + "x-nullable": true + }, + "nummer": { + "title": "Nummer", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", + "type": "string", + "maxLength": 10, + "minLength": 1 + }, + "kanaal": { + "title": "Kanaal", + "description": "Communicatiekanaal dat bij het klantcontact werd gebruikt.", + "type": "string", + "maxLength": 50, + "minLength": 1 + }, + "onderwerp": { + "title": "Onderwerp", + "description": "Datgene waarover het klantcontact ging.", + "type": "string", + "maxLength": 200, + "minLength": 1 + }, + "hadBetrokkenActoren": { + "description": "Actor die bij een klantcontact betrokken was.", + "type": "array", + "items": { + "$ref": "#/definitions/ActorForeignKey" + } + }, + "inhoud": { + "title": "Inhoud", + "description": "Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld, voor zover die voor betrokkenen of actoren relevant is.", + "type": "string", + "maxLength": 1000 + }, + "indicatieContactGelukt": { + "title": "Indicatie contact gelukt", + "description": "Geeft, indien bekend, aan of de poging contact tussen de gemeente en inwoner(s) of organisatie(s) tot stand te brengen succesvol was.", + "type": "boolean", + "x-nullable": true + }, + "taal": { + "title": "Taal", + "description": "Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html", + "type": "string", + "maxLength": 3, + "minLength": 1 + }, + "vertrouwelijk": { + "title": "Vertrouwelijk", + "description": "Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld.", + "type": "boolean" + }, + "plaatsgevondenOp": { + "title": "Plaatsgevonden op", + "description": "Datum en tijdstip waarop het klantontact plaatsvond. Als het klantcontact een gesprek betrof, is dit het moment waarop het gesprek begon. Als het klantcontact verzending of ontvangst van informatie betrof, is dit bij benadering het moment waarop informatie door gemeente verzonden of ontvangen werd.", + "type": "string", + "format": "date-time" + } + } + }, + "Medewerker": { + "required": [ + "actor", + "functie", + "telefoonnummer" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "actor": { + "$ref": "#/definitions/ActorForeignKey" + }, + "functie": { + "title": "Functie", + "description": "Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", + "type": "string", + "maxLength": 40, + "minLength": 1 + }, + "emailadres": { + "title": "E-mailadres", + "description": "Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", + "type": "string", + "format": "email", + "maxLength": 254 + }, + "telefoonnummer": { + "title": "Telefoonnummer", + "description": "Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", + "type": "string", + "maxLength": 20, + "minLength": 1 + } + } + }, + "OnderwerpobjectObjectidentificator": { + "description": "Gegevens die een onderwerpobject in een extern register uniek identificeren.", + "type": "object", + "properties": { + "objecttype": { + "title": "Objecttype", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "type": "string", + "maxLength": 200 + }, + "soortObjectId": { + "title": "Soort object ID", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "type": "string", + "maxLength": 200 + }, + "objectId": { + "title": "Object ID", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "type": "string", + "maxLength": 200 + }, + "register": { + "title": "Register", + "description": "Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Onderwerpobject": { + "required": [ + "klantcontact", + "wasKlantcontact" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het onderwerpdeel.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "klantcontact": { + "$ref": "#/definitions/KlantcontactForeignKey" + }, + "wasKlantcontact": { + "$ref": "#/definitions/KlantcontactForeignKey" + }, + "objectidentificator": { + "$ref": "#/definitions/OnderwerpobjectObjectidentificator" + } + } + }, + "ContactPersoonForeignkey": { + "description": "Organisatie waarvoor een contactpersoon werkte.", + "required": [ + "id" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "partij": { + "$ref": "#/definitions/PartijForeignKey" + } + }, + "x-nullable": true + }, + "Organisatie": { + "required": [ + "partij", + "contactpersoon" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "naam": { + "title": "Naam", + "description": "Naam van de organisatie.", + "type": "string", + "maxLength": 200 + }, + "partij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "contactpersoon": { + "description": "Organisatie waarvoor een contactpersoon werkte.", + "type": "array", + "items": { + "$ref": "#/definitions/ContactPersoonForeignkey" + }, + "x-nullable": true + } + } + }, + "OrganisatorischeEenheid": { + "required": [ + "actor", + "faxnummer", + "telefoonnummer" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "actor": { + "$ref": "#/definitions/ActorForeignKey" + }, + "omschrijving": { + "title": "Omschrijving", + "description": "Omschrijving van de geautomatiseerde actor.", + "type": "string", + "maxLength": 200 + }, + "emailadres": { + "title": "E-mailadres", + "description": "Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", + "type": "string", + "format": "email", + "maxLength": 254 + }, + "faxnummer": { + "title": "Faxnummer", + "description": "Faxnummer waaronder de organisatorische eenheid in de regel bereikbaar is.", + "type": "string", + "maxLength": 20, + "minLength": 1 + }, + "telefoonnummer": { + "title": "Telefoonnummer", + "description": "Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", + "type": "string", + "maxLength": 20, + "minLength": 1 + } + } + }, + "PartijIdentificatorGroepType": { + "description": "Gegevens die een partij in een basisregistratie of ander extern register uniek identificeren.", + "type": "object", + "properties": { + "objecttype": { + "title": "Objecttype", + "description": "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + "type": "string", + "maxLength": 200 + }, + "soortObjectId": { + "title": "Soort object ID", + "description": "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + "type": "string", + "maxLength": 200 + }, + "objectId": { + "title": "Object ID", + "description": "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + "type": "string", + "maxLength": 200 + }, + "register": { + "title": "Register", + "description": "Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "PartijIdentificator": { + "required": [ + "identificeerdePartij", + "partijIdentificator" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de partij-identificator.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "identificeerdePartij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "anderePartijIdentificator": { + "title": "Andere partij indetificator", + "description": "Vrij tekstveld om de verwijzing naar een niet-voorgedefinieerd objecttype, soort objectID of Register vast te leggen. ", + "type": "string", + "maxLength": 200 + }, + "partijIdentificator": { + "$ref": "#/definitions/PartijIdentificatorGroepType" + } + } + }, + "DigitaalAdresForeignKey": { + "description": "Digitaal adres dat een partij verstrekte voor gebruik bij toekomstig contact met de gemeente.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van het digitaal adres.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "PartijIdentificatorForeignkey": { + "description": "Partij-identificatoren die hoorde bij deze partij.", + "required": [ + "uuid" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de partij-identificator.", + "type": "string", + "format": "uuid" + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + } + }, + "x-nullable": true + }, + "PartijBezoekadres": { + "description": "Adres waarop de partij door gemeente bezocht wil worden. Dit mag afwijken van voor de verstrekker eventueel in een basisregistratie bekende adressen.", + "type": "object", + "properties": { + "nummeraanduidingId": { + "title": "Nummeraanduiding ID", + "description": "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 255 + }, + "adresregel1": { + "title": "Adresregel 1", + "description": "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel2": { + "title": "Adresregel 2", + "description": "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel3": { + "title": "Adresregel 3", + "description": "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "land": { + "title": "Land", + "description": "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + "type": "string", + "maxLength": 4, + "minLength": 4 + } + }, + "x-nullable": true + }, + "partij correspondentieadres serializer": { + "description": "Adres waarop de partij post van de gemeente wil ontvangen. Dit mag afwijken van voor de verstrekker eventueel in een basisregistratie bekende adressen.", + "type": "object", + "properties": { + "nummeraanduidingId": { + "title": "Nummeraanduiding ID", + "description": "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 255 + }, + "adresregel1": { + "title": "Adresregel 1", + "description": "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel2": { + "title": "Adresregel 2", + "description": "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "adresregel3": { + "title": "Adresregel 3", + "description": "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + "type": "string", + "maxLength": 80 + }, + "land": { + "title": "Land", + "description": "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + "type": "string", + "maxLength": 4, + "minLength": 4 + } + }, + "x-nullable": true + }, + "Partij": { + "required": [ + "nummer", + "betrokkenen", + "digitaleAdressen", + "voorkeursDigitaalAdres", + "vertegenwoordigde", + "partijIdentificatoren", + "soortPartij", + "indicatieGeheimhouding", + "indicatieActief" + ], + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "Unieke (technische) identificatiecode van de partij.", + "type": "string", + "format": "uuid", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "nummer": { + "title": "Nummer", + "description": "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden.", + "type": "string", + "maxLength": 10, + "minLength": 1 + }, + "interneNotitie": { + "title": "Interne notitie", + "description": "Mededelingen, aantekeningen of bijzonderheden over de partij, bedoeld voor intern gebruik.", + "type": "string", + "maxLength": 1000 + }, + "betrokkenen": { + "description": "Betrokkene bij klantcontact die een partij was.", + "type": "array", + "items": { + "$ref": "#/definitions/BetrokkeneForeignKey" + }, + "x-nullable": true + }, + "digitaleAdressen": { + "description": "Digitaal adres dat een partij verstrekte voor gebruik bij toekomstig contact met de gemeente.", + "type": "array", + "items": { + "$ref": "#/definitions/DigitaalAdresForeignKey" + }, + "x-nullable": true + }, + "voorkeursDigitaalAdres": { + "$ref": "#/definitions/DigitaalAdresForeignKey" + }, + "vertegenwoordigde": { + "description": "Partij die een andere partij vertegenwoordigde.", + "type": "array", + "items": { + "$ref": "#/definitions/PartijForeignKey" + }, + "x-nullable": true + }, + "partijIdentificatoren": { + "description": "Partij-identificatoren die hoorde bij deze partij.", + "type": "array", + "items": { + "$ref": "#/definitions/PartijIdentificatorForeignkey" + }, + "x-nullable": true + }, + "soortPartij": { + "title": "Soort partij", + "description": "Geeft aan van welke specifieke soort partij sprake is.", + "type": "string", + "enum": [ + "persoon", + "organisatie", + "contactpersoon" + ] + }, + "indicatieGeheimhouding": { + "title": "Indicatie geheimhouding", + "description": "Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden.", + "type": "boolean" + }, + "voorkeurstaal": { + "title": "Voorkeurstaal", + "description": "Taal, in ISO 639-2/B formaat, waarin de partij bij voorkeur contact heeft met de gemeente. Voorbeeld: nld. Zie: https://www.iso.org/standard/4767.html", + "type": "string", + "maxLength": 3 + }, + "indicatieActief": { + "title": "Indicatie actief", + "description": "Geeft aan of de contactgegevens van de partij nog gebruikt morgen worden om contact op te nemen. Gegevens van niet-actieve partijen mogen hiervoor niet worden gebruikt.", + "type": "boolean" + }, + "bezoekadres": { + "$ref": "#/definitions/PartijBezoekadres" + }, + "correspondentieadres": { + "$ref": "#/definitions/partij correspondentieadres serializer" + } + } + }, + "PersoonContact": { + "description": "Naam die een persoon wil gebruiken tijdens contact met de gemeente. Deze mag afwijken van de eventueel in de Basisregistratie Personen (BRP) bekende naam van de persoon.", + "type": "object", + "properties": { + "voorletters": { + "title": "Voorletters", + "description": "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", + "type": "string", + "maxLength": 10 + }, + "voornaam": { + "title": "Voornaam", + "description": "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + }, + "voorvoegselAchternaam": { + "title": "Voorvoegsel achternaam", + "description": "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 10 + }, + "achternaam": { + "title": "Achternaam", + "description": "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + "type": "string", + "maxLength": 200 + } + }, + "x-nullable": true + }, + "Persoon": { + "required": [ + "partij", + "contactnaam" + ], + "type": "object", + "properties": { + "id": { + "title": "ID", + "type": "integer", + "readOnly": true + }, + "url": { + "title": "Url", + "description": "URL-referentie naar dit object. Dit is de unieke identificatie en locatie van dit object.", + "type": "string", + "format": "uri", + "readOnly": true, + "maxLength": 1000, + "minLength": 1 + }, + "partij": { + "$ref": "#/definitions/PartijForeignKey" + }, + "contactnaam": { + "$ref": "#/definitions/PersoonContact" + } + } + } + }, + "responses": { + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/ValidatieFout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "404": { + "description": "Not found", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "406": { + "description": "Not acceptable", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "409": { + "description": "Conflict", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "410": { + "description": "Gone", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "412": { + "description": "Precondition failed", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "415": { + "description": "Unsupported media type", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "429": { + "description": "Too many requests", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Fout" + }, + "headers": { + "API-version": { + "schema": { + "type": "string" + }, + "description": "Geeft een specifieke API-versie aan in de context van een specifieke aanroep. Voorbeeld: 1.2.1." + } + } + } + } +} diff --git a/src/openklant/conf/api.py b/src/openklant/conf/api.py index 0b8a97c5..5806e523 100644 --- a/src/openklant/conf/api.py +++ b/src/openklant/conf/api.py @@ -5,6 +5,7 @@ KLANTEN_API_VERSION = "1.0.0" CONTACTMOMENTEN_API_VERSION = "1.0.0" +KLANTINTERACTIES_API_VERSION = "1.0.0" REST_FRAMEWORK = BASE_REST_FRAMEWORK.copy() REST_FRAMEWORK["PAGE_SIZE"] = 100 diff --git a/src/openklant/conf/base.py b/src/openklant/conf/base.py index 1434d957..737f71f7 100644 --- a/src/openklant/conf/base.py +++ b/src/openklant/conf/base.py @@ -380,6 +380,14 @@ "contactmomenten", "openapi.yaml", ), + "klantinteracties": os.path.join( + BASE_DIR, + "src", + "openklant", + "components", + "klantinteracties", + "openapi.yaml", + ), } # settings for sending notifications diff --git a/src/openklant/urls.py b/src/openklant/urls.py index 0db219da..5179d85d 100644 --- a/src/openklant/urls.py +++ b/src/openklant/urls.py @@ -46,6 +46,10 @@ name="password_reset_complete", ), path("klanten/api/", include("openklant.components.legacy.klanten.api.urls")), + path( + "klantinteracties/api/", + include("openklant.components.klantinteracties.api.urls"), + ), path( "contactmomenten/api/", include("openklant.components.legacy.contactmomenten.api.urls"),