From bdde74932c9b43f021087c51740f9ccdeee04eef Mon Sep 17 00:00:00 2001 From: bart-maykin Date: Wed, 18 Oct 2023 16:41:18 +0200 Subject: [PATCH] :card_file_box: improved model fields --- .../migrations/0001_initial.py | 1018 ++++++++++++++--- .../migrations/0002_klantcontact.py | 110 -- .../migrations/0003_betrokkene.py | 211 ---- .../migrations/0004_digitaaladres.py | 80 -- .../klantinteracties/migrations/0005_actor.py | 275 ----- .../migrations/0006_internetaak.py | 100 -- .../klantinteracties/models/actoren.py | 50 +- .../klantinteracties/models/constants.py | 8 - .../klantinteracties/models/digitaal_adres.py | 11 +- .../klantinteracties/models/internetaken.py | 24 +- .../klantinteracties/models/klantcontacten.py | 62 +- .../klantinteracties/models/mixins.py | 86 +- .../klantinteracties/models/partijen.py | 71 +- 13 files changed, 1007 insertions(+), 1099 deletions(-) delete mode 100644 src/openklant/components/klantinteracties/migrations/0002_klantcontact.py delete mode 100644 src/openklant/components/klantinteracties/migrations/0003_betrokkene.py delete mode 100644 src/openklant/components/klantinteracties/migrations/0004_digitaaladres.py delete mode 100644 src/openklant/components/klantinteracties/migrations/0005_actor.py delete mode 100644 src/openklant/components/klantinteracties/migrations/0006_internetaak.py diff --git a/src/openklant/components/klantinteracties/migrations/0001_initial.py b/src/openklant/components/klantinteracties/migrations/0001_initial.py index 2d333eb1..63528173 100644 --- a/src/openklant/components/klantinteracties/migrations/0001_initial.py +++ b/src/openklant/components/klantinteracties/migrations/0001_initial.py @@ -1,8 +1,9 @@ -# Generated by Django 3.2.18 on 2023-10-10 15:54 +# Generated by Django 3.2.18 on 2023-10-19 13:54 import django.core.validators from django.db import migrations, models import django.db.models.deletion +import django.utils.timezone import uuid @@ -13,120 +14,142 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name="Partij", + name="Actor", fields=[ ( "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van de partij.", + models.AutoField( + auto_created=True, primary_key=True, serialize=False, - unique=True, + verbose_name="ID", ), ), ( - "nummer", + "identificator_objecttype", models.CharField( - help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden.", - max_length=10, - validators=[django.core.validators.validate_integer], - verbose_name="Nummer", + help_text="Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + max_length=200, + verbose_name="objecttype", ), ), ( - "interne_notitie", + "identificator_soort_object_id", models.CharField( - blank=True, - help_text="Mededelingen, aantekeningen of bijzonderheden over de partij, bedoeld voor intern gebruik.", - max_length=1000, - verbose_name="Interne notitie", + help_text="Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + max_length=200, + verbose_name="soort object id", ), ), ( - "soort_partij", + "identificator_object_id", models.CharField( - choices=[ - ("persoon", "Persoon"), - ("organisatie", "Organisatie"), - ("contactpersoon", "Contactpersoon"), - ], - help_text="Geeft aan van welke specifieke soort partij sprake is.", - max_length=14, - verbose_name="Soort partij", + help_text="Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + max_length=200, + verbose_name="object id", ), ), ( - "indicatie_geheimhouding", - models.BooleanField( - help_text="Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden.", - verbose_name="Indicatie geheimhouding", + "identificator_register", + models.CharField( + help_text="Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + max_length=200, + verbose_name="register", ), ), ( - "voorkeurskanaal", + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de actor.", + unique=True, + ), + ), + ( + "naam", models.CharField( - blank=True, - help_text="Kanaal dat de partij bij voorkeur gebruikt voor contact met de gemeente.", - max_length=50, - verbose_name="Voorkeurskanaal", + help_text="Naam van de actor.", + max_length=200, + verbose_name="naam", ), ), ( - "voorkeurstaal", + "soort_actor", models.CharField( - blank=True, - help_text="Taal waarin de partij bij voorkeur contact heeft met de gemeente.", - max_length=255, - verbose_name="Voorkeurstaal", + choices=[ + ("medewerker", "Medewerker"), + ("geautomatiseerde_actor", "Geautomatiseerde actor"), + ("organisatorische_eenheid", "Organisatorische eenheid"), + ], + help_text="Geeft aan van welke specifieke soort actor sprake is.", + max_length=24, + verbose_name="soort actor", ), ), ( "indicatie_actief", models.BooleanField( - help_text="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.", - verbose_name="Indicatie actief", + default=True, + help_text="Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. Voor niet-actieve is dit niet toegestaan.", + verbose_name="indicatie actief", ), ), + ], + options={ + "verbose_name": "actor", + "verbose_name_plural": "actoren", + }, + ), + migrations.CreateModel( + name="Betrokkene", + fields=[ ( - "correspondentieadres_nummeraanduiding_id", - models.UUIDField( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "bezoekadres_nummeraanduiding_id", + models.CharField( blank=True, help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", - null=True, - unique=True, - verbose_name="Nummeraanduiding ID", + max_length=255, + verbose_name="nummeraanduiding id", ), ), ( - "correspondentieadres_adresregel1", + "bezoekadres_adresregel1", models.CharField( blank=True, help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 1", + verbose_name="adresregel 1", ), ), ( - "correspondentieadres_adresregel2", + "bezoekadres_adresregel2", models.CharField( blank=True, help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 2", + verbose_name="adresregel 2", ), ), ( - "correspondentieadres_adresregel3", + "bezoekadres_adresregel3", models.CharField( blank=True, help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 3", + verbose_name="adresregel 3", ), ), ( - "correspondentieadres_land", + "bezoekadres_land", models.CharField( blank=True, help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", @@ -135,48 +158,47 @@ class Migration(migrations.Migration): django.core.validators.MinLengthValidator(limit_value=4), django.core.validators.validate_integer, ], - verbose_name="Land", + verbose_name="land", ), ), ( - "bezoekadres_nummeraanduiding_id", - models.UUIDField( + "correspondentieadres_nummeraanduiding_id", + models.CharField( blank=True, help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", - null=True, - unique=True, - verbose_name="Nummeraanduiding ID", + max_length=255, + verbose_name="nummeraanduiding ID", ), ), ( - "bezoekadres_adresregel1", + "correspondentieadres_adresregel1", models.CharField( blank=True, help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 1", + verbose_name="adresregel 1", ), ), ( - "bezoekadres_adresregel2", + "correspondentieadres_adresregel2", models.CharField( blank=True, help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 2", + verbose_name="adresregel 2", ), ), ( - "bezoekadres_adresregel3", + "correspondentieadres_adresregel3", models.CharField( blank=True, help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", max_length=80, - verbose_name="Adresregel 3", + verbose_name="adresregel 3", ), ), ( - "bezoekadres_land", + "correspondentieadres_land", models.CharField( blank=True, help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", @@ -185,25 +207,7 @@ class Migration(migrations.Migration): django.core.validators.MinLengthValidator(limit_value=4), django.core.validators.validate_integer, ], - verbose_name="Land", - ), - ), - ], - options={ - "verbose_name": "partij", - "verbose_name_plural": "partijen", - }, - ), - migrations.CreateModel( - name="Persoon", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", + verbose_name="land", ), ), ( @@ -211,7 +215,7 @@ class Migration(migrations.Migration): models.CharField( help_text="Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", max_length=10, - verbose_name="Voorletters", + verbose_name="voorletters", ), ), ( @@ -220,7 +224,7 @@ class Migration(migrations.Migration): blank=True, help_text="De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", max_length=200, - verbose_name="Voornaam", + verbose_name="voornaam", ), ), ( @@ -229,7 +233,7 @@ class Migration(migrations.Migration): blank=True, help_text="Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", max_length=10, - verbose_name="Voorvoegsel achternaam", + verbose_name="voorvoegsel achternaam", ), ), ( @@ -238,27 +242,46 @@ class Migration(migrations.Migration): blank=True, help_text="Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", max_length=200, - verbose_name="Achternaam", + verbose_name="achternaam", ), ), ( - "partij", - models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="persoon", - to="klantinteracties.partij", - verbose_name="Partij", + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + unique=True, + ), + ), + ( + "rol", + models.CharField( + choices=[ + ("vertegenwoordiger", "Vertegenwoordiger"), + ("klant", "Klant"), + ], + help_text="Rol die de betrokkene bij klantcontact tijdens dat contact vervulde.", + max_length=17, + verbose_name="rol", + ), + ), + ( + "organisatienaam", + models.CharField( + blank=True, + help_text="Naam van de organisatie waarmee de betrokkene bij klantcontact een relatie had.", + max_length=200, + verbose_name="organisatienaam", ), ), + ("initiator", models.BooleanField(verbose_name="initiator")), ], options={ - "verbose_name": "persoon", - "verbose_name_plural": "personen", + "verbose_name": "betrokkene bij klantcontact", }, ), migrations.CreateModel( - name="Organisatie", + name="DigitaalAdres", fields=[ ( "id", @@ -270,32 +293,44 @@ class Migration(migrations.Migration): ), ), ( - "naam", + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van het digitaal adres.", + unique=True, + ), + ), + ( + "soort_digitaal_adres", models.CharField( - blank=True, - help_text="Naam van de organisatie.", - max_length=200, - verbose_name="Naam", + help_text="Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen.", + max_length=255, + verbose_name="soort digitaal adres", ), ), ( - "partij", - models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="organisatie", - to="klantinteracties.partij", - verbose_name="Partij", + "adres", + models.CharField( + help_text="Digitaal adres waarmee een persoon of organisatie bereikt kan worden.", + max_length=80, + verbose_name="adres", + ), + ), + ( + "omschrijving", + models.CharField( + help_text="Omschrijving van het digitaal adres.", + max_length=40, + verbose_name="omschrijving", ), ), ], options={ - "verbose_name": "organisatie", - "verbose_name_plural": "organisaties", + "verbose_name": "digitaal adres", }, ), migrations.CreateModel( - name="Contactpersoon", + name="Partij", fields=[ ( "id", @@ -307,65 +342,748 @@ class Migration(migrations.Migration): ), ), ( - "contactnaam_voorletters", + "bezoekadres_nummeraanduiding_id", models.CharField( - help_text="Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", - max_length=10, - verbose_name="Voorletters", + blank=True, + help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + max_length=255, + verbose_name="nummeraanduiding id", ), ), ( - "contactnaam_voornaam", + "bezoekadres_adresregel1", models.CharField( blank=True, - help_text="De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=200, - verbose_name="Voornaam", + help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 1", ), ), ( - "contactnaam_voorvoegsel_achternaam", + "bezoekadres_adresregel2", models.CharField( blank=True, - help_text="Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=10, - verbose_name="Voorvoegsel achternaam", + help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 2", ), ), ( - "contactnaam_achternaam", + "bezoekadres_adresregel3", models.CharField( blank=True, - help_text="Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=200, - verbose_name="Achternaam", + help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 3", ), ), ( - "organisatie", - models.ForeignKey( - help_text="De organisatie waar een contactpersoon voor werkt.", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="contact_personen", - to="klantinteracties.organisatie", - verbose_name="Organistatie", + "bezoekadres_land", + models.CharField( + blank=True, + help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + max_length=4, + validators=[ + django.core.validators.MinLengthValidator(limit_value=4), + django.core.validators.validate_integer, + ], + verbose_name="land", ), ), ( - "partij", - models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="contact_persoon", - to="klantinteracties.partij", - verbose_name="Partij", + "correspondentieadres_nummeraanduiding_id", + models.CharField( + blank=True, + help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", + max_length=255, + verbose_name="nummeraanduiding ID", ), ), - ], - options={ - "verbose_name": "contact persoon", - "verbose_name_plural": "contact personen", - }, + ( + "correspondentieadres_adresregel1", + models.CharField( + blank=True, + help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 1", + ), + ), + ( + "correspondentieadres_adresregel2", + models.CharField( + blank=True, + help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 2", + ), + ), + ( + "correspondentieadres_adresregel3", + models.CharField( + blank=True, + help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", + max_length=80, + verbose_name="adresregel 3", + ), + ), + ( + "correspondentieadres_land", + models.CharField( + blank=True, + help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", + max_length=4, + validators=[ + django.core.validators.MinLengthValidator(limit_value=4), + django.core.validators.validate_integer, + ], + verbose_name="land", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de partij.", + unique=True, + ), + ), + ( + "nummer", + models.CharField( + help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden.", + max_length=10, + validators=[django.core.validators.validate_integer], + verbose_name="nummer", + ), + ), + ( + "interne_notitie", + models.TextField( + blank=True, + help_text="Mededelingen, aantekeningen of bijzonderheden over de partij, bedoeld voor intern gebruik.", + max_length=1000, + verbose_name="interne notitie", + ), + ), + ( + "soort_partij", + models.CharField( + choices=[ + ("persoon", "Persoon"), + ("organisatie", "Organisatie"), + ("contactpersoon", "Contactpersoon"), + ], + help_text="Geeft aan van welke specifieke soort partij sprake is.", + max_length=14, + verbose_name="soort partij", + ), + ), + ( + "indicatie_geheimhouding", + models.BooleanField( + help_text="Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden.", + verbose_name="indicatie geheimhouding", + ), + ), + ( + "voorkeurstaal", + models.CharField( + blank=True, + help_text="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", + max_length=3, + verbose_name="voorkeurstaal", + ), + ), + ( + "indicatie_actief", + models.BooleanField( + help_text="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.", + verbose_name="indicatie actief", + ), + ), + ( + "betrokkene", + models.ForeignKey( + help_text="'Betrokkene bij klantcontact' was 'Partij'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.betrokkene", + verbose_name="betrokkene", + ), + ), + ( + "digitaal_adres", + models.ForeignKey( + help_text="'Digitaal Adres' was 'Partij'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.digitaaladres", + verbose_name="digitaal adres", + ), + ), + ( + "vertegenwoordigde", + models.ManyToManyField( + blank=True, + help_text="'Partij' die een andere 'Partij' vertegenwoordigde.", + null=True, + related_name="_klantinteracties_partij_vertegenwoordigde_+", + to="klantinteracties.Partij", + verbose_name="vertegenwoordigde", + ), + ), + ( + "voorkeurs_digitaal_adres", + models.ForeignKey( + help_text="'Partij' gaf voorkeur aan voor contact via 'Digitaal adres'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="voorkeurs_partij", + to="klantinteracties.digitaaladres", + verbose_name="voorkeurs digitaal adres", + ), + ), + ], + options={ + "verbose_name": "partij", + "verbose_name_plural": "partijen", + }, + ), + migrations.CreateModel( + name="Persoon", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "contactnaam_voorletters", + models.CharField( + help_text="Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", + max_length=10, + verbose_name="voorletters", + ), + ), + ( + "contactnaam_voornaam", + models.CharField( + blank=True, + help_text="De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=200, + verbose_name="voornaam", + ), + ), + ( + "contactnaam_voorvoegsel_achternaam", + models.CharField( + blank=True, + help_text="Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=10, + verbose_name="voorvoegsel achternaam", + ), + ), + ( + "contactnaam_achternaam", + models.CharField( + blank=True, + help_text="Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=200, + verbose_name="achternaam", + ), + ), + ( + "partij", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + unique=True, + verbose_name="partij", + ), + ), + ], + options={ + "verbose_name": "persoon", + "verbose_name_plural": "personen", + }, + ), + migrations.CreateModel( + name="OrganisatorischeEenheid", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "omschrijving", + models.CharField( + blank=True, + help_text="Omschrijving van de geautomatiseerde actor.", + max_length=200, + verbose_name="omschrijving", + ), + ), + ( + "emailadres", + models.EmailField( + blank=True, + help_text="Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", + max_length=254, + verbose_name="e-mailadres", + ), + ), + ( + "faxnummer", + models.CharField( + help_text="Faxnummer waaronder de organisatorische eenheid in de regel bereikbaar is.", + max_length=20, + verbose_name="faxnummer", + ), + ), + ( + "telefoonnummer", + models.CharField( + help_text="Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", + max_length=20, + verbose_name="telefoonnummer", + ), + ), + ( + "actor", + models.ForeignKey( + help_text="'GeautomatiseerdeActor' was 'Actor'", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.actor", + unique=True, + verbose_name="actor", + ), + ), + ], + options={ + "verbose_name": "organisatorische eenheid", + }, + ), + migrations.CreateModel( + name="Organisatie", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "naam", + models.CharField( + blank=True, + help_text="Naam van de organisatie.", + max_length=200, + verbose_name="naam", + ), + ), + ( + "partij", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + unique=True, + verbose_name="partij", + ), + ), + ], + options={ + "verbose_name": "organisatie", + "verbose_name_plural": "organisaties", + }, + ), + migrations.CreateModel( + name="Medewerker", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "functie", + models.CharField( + help_text="Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", + max_length=40, + verbose_name="functie", + ), + ), + ( + "emailadres", + models.EmailField( + blank=True, + help_text="Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", + max_length=254, + verbose_name="e-mailadres", + ), + ), + ( + "telefoonnummer", + models.CharField( + help_text="Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", + max_length=20, + verbose_name="telefoonnummer", + ), + ), + ( + "actor", + models.ForeignKey( + help_text="'GeautomatiseerdeActor' was 'Actor'", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.actor", + verbose_name="actor", + ), + ), + ], + options={ + "verbose_name": "medewerker", + "verbose_name_plural": "mederwerkers", + }, + ), + migrations.CreateModel( + name="Klantcontact", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + unique=True, + ), + ), + ( + "nummer", + models.CharField( + help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", + max_length=10, + validators=[django.core.validators.validate_integer], + verbose_name="nummer", + ), + ), + ( + "kanaal", + models.CharField( + help_text="Communicatiekanaal dat bij het klantcontact werd gebruikt.", + max_length=50, + verbose_name="kanaal", + ), + ), + ( + "onderwerp", + models.CharField( + help_text="Datgene waarover het klantcontact ging.", + max_length=200, + verbose_name="onderwerp", + ), + ), + ( + "inhoud", + models.TextField( + blank=True, + help_text="Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld, voor zover die voor betrokkenen of actoren relevant is.", + max_length=1000, + verbose_name="inhoud", + ), + ), + ( + "indicatie_contact_gelukt", + models.BooleanField( + help_text="Geeft, indien bekend, aan of de poging contact tussen de gemeente en inwoner(s) of organisatie(s) tot stand te brengen succesvol was.", + null=True, + verbose_name="indicatie contact gelukt", + ), + ), + ( + "taal", + models.CharField( + help_text="Taal die bij het klantcontact werd gesproken of geschreven.", + max_length=255, + verbose_name="taal", + ), + ), + ( + "vertrouwelijk", + models.BooleanField( + help_text="Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld.", + verbose_name="vertrouwelijk", + ), + ), + ( + "plaatsgevonden_op", + models.DateTimeField( + default=django.utils.timezone.now, + help_text="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.", + verbose_name="plaatsgevonden op", + ), + ), + ( + "actoren", + models.ManyToManyField( + help_text="De actoren die tijdens het klantcontant contact had met klanten of hun vertegenwoordigers.", + related_name="klantcontacten", + to="klantinteracties.Actor", + verbose_name="actoren", + ), + ), + ], + options={ + "verbose_name": "klantcontact", + "verbose_name_plural": "klantcontacten", + }, + ), + migrations.CreateModel( + name="InterneTaak", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de interne taak.", + unique=True, + ), + ), + ( + "nummer", + models.CharField( + help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke interne taak aan te duiden.", + max_length=10, + validators=[django.core.validators.validate_integer], + verbose_name="nummer", + ), + ), + ( + "gevraagde_handeling", + models.CharField( + help_text="Handeling die moet worden uitgevoerd om de taak af te ronden.", + max_length=200, + verbose_name="gevraagde handeling", + ), + ), + ( + "toelichting", + models.TextField( + 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=400, + verbose_name="toelichting", + ), + ), + ( + "status", + models.CharField( + choices=[ + ("te_verwerken", "Het verzoek is afgehandeld."), + ("verwerkt", "Het verzoek id buiten behandeling gesteld."), + ], + help_text="Aanduiding van de vordering bij afhandeling van de interne taak.", + max_length=12, + verbose_name="status", + ), + ), + ( + "toegewezen_op", + models.DateTimeField( + auto_now_add=True, + help_text="Datum en tijdstip waarop de interne taak aan een actor werd toegewezen.", + verbose_name="toegewezen op", + ), + ), + ( + "actor", + models.ForeignKey( + help_text="De actor aan wie de interne taak werd toegewezen.", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.actor", + verbose_name="actor", + ), + ), + ( + "klantcontact", + models.ForeignKey( + help_text="Het klantcontact dat aanleiding gaf tot het ontstaan van een interne taak.", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.klantcontact", + verbose_name="klantcontact", + ), + ), + ], + options={ + "verbose_name": "interne taak", + "verbose_name_plural": "interne taken", + }, + ), + migrations.CreateModel( + name="GeautomatiseerdeActor", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "functie", + models.CharField( + help_text="Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", + max_length=40, + verbose_name="functie", + ), + ), + ( + "omschrijving", + models.CharField( + blank=True, + help_text="Omschrijving van de geautomatiseerde actor.", + max_length=200, + verbose_name="omschrijving", + ), + ), + ( + "actor", + models.ForeignKey( + help_text="'GeautomatiseerdeActor' was 'Actor'", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.actor", + verbose_name="Actor", + ), + ), + ], + options={ + "verbose_name": "geautomatiseerde actor", + "verbose_name_plural": "geautomatiseerde actoren", + }, + ), + migrations.CreateModel( + name="Contactpersoon", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "contactnaam_voorletters", + models.CharField( + help_text="Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", + max_length=10, + verbose_name="voorletters", + ), + ), + ( + "contactnaam_voornaam", + models.CharField( + blank=True, + help_text="De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=200, + verbose_name="voornaam", + ), + ), + ( + "contactnaam_voorvoegsel_achternaam", + models.CharField( + blank=True, + help_text="Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=10, + verbose_name="voorvoegsel achternaam", + ), + ), + ( + "contactnaam_achternaam", + models.CharField( + blank=True, + help_text="Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", + max_length=200, + verbose_name="achternaam", + ), + ), + ( + "organisatie", + models.ForeignKey( + help_text="De organisatie waar een contactpersoon voor werkt.", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.organisatie", + verbose_name="organistatie", + ), + ), + ( + "partij", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + unique=True, + verbose_name="partij", + ), + ), + ], + options={ + "verbose_name": "contact persoon", + "verbose_name_plural": "contact personen", + }, + ), + migrations.AddField( + model_name="betrokkene", + name="digitaal_adres", + field=models.ForeignKey( + help_text="'Digitaal Adres' had 'Betrokkene bij klantcontact'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.digitaaladres", + verbose_name="digitaal adres", + ), + ), + migrations.AddField( + model_name="betrokkene", + name="klantcontact", + field=models.ForeignKey( + help_text="'Klantcontact' had 'Betrokkene bij klantcontact'", + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.klantcontact", + verbose_name="klantcontact", + ), ), ] diff --git a/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py b/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py deleted file mode 100644 index 2d61aa75..00000000 --- a/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py +++ /dev/null @@ -1,110 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-10 17:54 - -import django.core.validators -from django.db import migrations, models -import uuid - - -class Migration(migrations.Migration): - dependencies = [ - ("klantinteracties", "0001_initial"), - ] - - operations = [ - migrations.CreateModel( - name="Klantcontact", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", - primary_key=True, - serialize=False, - unique=True, - ), - ), - ( - "nummer", - models.CharField( - help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", - max_length=10, - validators=[django.core.validators.validate_integer], - verbose_name="Nummer", - ), - ), - ( - "kanaal", - models.CharField( - help_text="Communicatiekanaal dat bij het klantcontact werd gebruikt.", - max_length=50, - verbose_name="Kanaal", - ), - ), - ( - "onderwerp", - models.CharField( - help_text="Datgene waarover het klantcontact ging.", - max_length=200, - verbose_name="Onderwerp", - ), - ), - ( - "inhoud", - models.CharField( - blank=True, - help_text="Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld, voor zover die voor betrokkenen of actoren relevant is.", - max_length=1000, - verbose_name="Inhoud", - ), - ), - ( - "initiator", - models.CharField( - choices=[ - ("gemeente", "Gemeente"), - ("klant", "Klant"), - ("vertegenwoordiger", "Vertegenwoordiger"), - ], - help_text="Degene die het klantcontact initieerde.", - max_length=17, - verbose_name="Initiator", - ), - ), - ( - "indicatie_contact_gelukt", - models.BooleanField( - help_text="Geeft, indien bekend, aan of de poging contact tussen de gemeente en inwoner(s) of organisatie(s) tot stand te brengen succesvol was.", - null=True, - verbose_name="Indicatie contact gelukt", - ), - ), - ( - "taal", - models.CharField( - help_text="Taal die bij het klantcontact werd gesproken of geschreven.", - max_length=255, - verbose_name="Taal", - ), - ), - ( - "vertrouwelijk", - models.BooleanField( - help_text="Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld.", - verbose_name="Vertrouwelijk", - ), - ), - ( - "plaatsgevonden_op", - models.DateTimeField( - help_text="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.", - verbose_name="Plaatsgevonden op", - ), - ), - ], - options={ - "verbose_name": "klantcontact", - "verbose_name_plural": "klantcontacten", - }, - ), - ] diff --git a/src/openklant/components/klantinteracties/migrations/0003_betrokkene.py b/src/openklant/components/klantinteracties/migrations/0003_betrokkene.py deleted file mode 100644 index 876e9253..00000000 --- a/src/openklant/components/klantinteracties/migrations/0003_betrokkene.py +++ /dev/null @@ -1,211 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-11 10:26 - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - dependencies = [ - ("klantinteracties", "0002_klantcontact"), - ] - - operations = [ - migrations.CreateModel( - name="Betrokkene", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", - primary_key=True, - serialize=False, - unique=True, - ), - ), - ( - "rol", - models.CharField( - choices=[ - ("vertegenwoordiger", "Vertegenwoordiger"), - ("klant", "Klant"), - ], - help_text="Rol die de betrokkene bij klantcontact tijdens dat contact vervulde.", - max_length=17, - verbose_name="Rol", - ), - ), - ( - "organisatienaam", - models.CharField( - blank=True, - help_text="Naam van de organisatie waarmee de betrokkene bij klantcontact een relatie had.", - max_length=200, - verbose_name="Organisatienaam", - ), - ), - ( - "contactnaam_voorletters", - models.CharField( - help_text="Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen de beginletter gecombineerd met de tweede letter van een voornaam.", - max_length=10, - verbose_name="Voorletters", - ), - ), - ( - "contactnaam_voornaam", - models.CharField( - blank=True, - help_text="De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=200, - verbose_name="Voornaam", - ), - ), - ( - "contactnaam_voorvoegsel_achternaam", - models.CharField( - blank=True, - help_text="Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=10, - verbose_name="Voorvoegsel achternaam", - ), - ), - ( - "contactnaam_achternaam", - models.CharField( - blank=True, - help_text="Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente.", - max_length=200, - verbose_name="Achternaam", - ), - ), - ( - "correspondentieadres_nummeraanduiding_id", - models.UUIDField( - blank=True, - help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", - null=True, - unique=True, - verbose_name="Nummeraanduiding ID", - ), - ), - ( - "correspondentieadres_adresregel1", - models.CharField( - blank=True, - help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 1", - ), - ), - ( - "correspondentieadres_adresregel2", - models.CharField( - blank=True, - help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 2", - ), - ), - ( - "correspondentieadres_adresregel3", - models.CharField( - blank=True, - help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 3", - ), - ), - ( - "correspondentieadres_land", - models.CharField( - blank=True, - help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", - max_length=4, - validators=[ - django.core.validators.MinLengthValidator(limit_value=4), - django.core.validators.validate_integer, - ], - verbose_name="Land", - ), - ), - ( - "bezoekadres_nummeraanduiding_id", - models.UUIDField( - blank=True, - help_text="Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen.", - null=True, - unique=True, - verbose_name="Nummeraanduiding ID", - ), - ), - ( - "bezoekadres_adresregel1", - models.CharField( - blank=True, - help_text="Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 1", - ), - ), - ( - "bezoekadres_adresregel2", - models.CharField( - blank=True, - help_text="Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 2", - ), - ), - ( - "bezoekadres_adresregel3", - models.CharField( - blank=True, - help_text="Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen.", - max_length=80, - verbose_name="Adresregel 3", - ), - ), - ( - "bezoekadres_land", - models.CharField( - blank=True, - help_text="Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft.", - max_length=4, - validators=[ - django.core.validators.MinLengthValidator(limit_value=4), - django.core.validators.validate_integer, - ], - verbose_name="Land", - ), - ), - ( - "klantcontact", - models.ForeignKey( - help_text="'Klantcontact' had 'Betrokkene bij klantcontact'", - on_delete=django.db.models.deletion.CASCADE, - related_name="betrokkene", - to="klantinteracties.klantcontact", - verbose_name="Klantcontact", - ), - ), - ], - options={ - "verbose_name": "betrokkene bij klantcontact", - }, - ), - migrations.AddField( - model_name="partij", - name="betrokkene", - field=models.ForeignKey( - help_text="'Betrokkene bij klantcontact' was 'Partij'", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="partijen", - to="klantinteracties.betrokkene", - verbose_name="Betrokkene", - ), - ), - ] diff --git a/src/openklant/components/klantinteracties/migrations/0004_digitaaladres.py b/src/openklant/components/klantinteracties/migrations/0004_digitaaladres.py deleted file mode 100644 index 886e5bce..00000000 --- a/src/openklant/components/klantinteracties/migrations/0004_digitaaladres.py +++ /dev/null @@ -1,80 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-11 15:47 - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - dependencies = [ - ("klantinteracties", "0003_betrokkene"), - ] - - operations = [ - migrations.CreateModel( - name="DigitaalAdres", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van het digitaal adres.", - primary_key=True, - serialize=False, - unique=True, - ), - ), - ( - "soort_digitaal_adres", - models.CharField( - help_text="Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen.", - max_length=254, - verbose_name="Soort digitaal adres", - ), - ), - ( - "adres", - models.CharField( - help_text="Digitaal adres waarmee een persoon of organisatie bereikt kan worden.", - max_length=80, - verbose_name="Adres", - ), - ), - ( - "omschrijving", - models.CharField( - help_text="Omschrijving van het digitaal adres.", - max_length=40, - verbose_name="Omschrijving", - ), - ), - ], - options={ - "verbose_name": "digitaal adres", - }, - ), - migrations.AddField( - model_name="betrokkene", - name="digitaal_adres", - field=models.ForeignKey( - help_text="'Digitaal Adres' had 'Betrokkene bij klantcontact'", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="partijen", - to="klantinteracties.digitaaladres", - verbose_name="Digitaal adres", - ), - ), - migrations.AddField( - model_name="partij", - name="digitaal_adres", - field=models.ForeignKey( - help_text="'Digitaal Adres' was 'Partij'", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="digitale_adressen", - to="klantinteracties.digitaaladres", - verbose_name="Digitaal adres", - ), - ), - ] diff --git a/src/openklant/components/klantinteracties/migrations/0005_actor.py b/src/openklant/components/klantinteracties/migrations/0005_actor.py deleted file mode 100644 index fcdc1cc8..00000000 --- a/src/openklant/components/klantinteracties/migrations/0005_actor.py +++ /dev/null @@ -1,275 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-13 13:39 - -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - dependencies = [ - ("klantinteracties", "0004_digitaaladres"), - ] - - operations = [ - migrations.CreateModel( - name="Actor", - fields=[ - ( - "actoridentifcator_objecttype", - models.CharField( - help_text="Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", - max_length=200, - verbose_name="Objecttype", - ), - ), - ( - "actoridentifcator_soort_object_id", - models.CharField( - help_text="Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", - max_length=200, - verbose_name="Soort Object ID", - ), - ), - ( - "actoridentifcator_object_id", - models.CharField( - help_text="Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", - max_length=200, - verbose_name="Object ID", - ), - ), - ( - "actoridentifcator_register", - models.CharField( - help_text="Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", - max_length=200, - verbose_name="Object ID", - ), - ), - ( - "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van de actor.", - primary_key=True, - serialize=False, - unique=True, - ), - ), - ( - "naam", - models.CharField( - help_text="Naam van de actor.", - max_length=200, - verbose_name="Naam", - ), - ), - ( - "soort_actor", - models.CharField( - choices=[ - ("medewerker", "Medewerker"), - ("geautomatiseerde_actor", "Geautomatiseerde actor"), - ("organisatorische_eenheid", "Organisatorische eenheid"), - ], - help_text="Geeft aan van welke specifieke soort actor sprake is.", - max_length=24, - verbose_name="Soort actor", - ), - ), - ( - "indicatie_actief", - models.BooleanField( - help_text="Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. Voor niet-actieve is dit niet toegestaan.", - verbose_name="Indicatie actief", - ), - ), - ], - options={ - "verbose_name": "actor", - "verbose_name_plural": "actoren", - }, - ), - migrations.AddField( - model_name="klantcontact", - name="klantcontact", - field=models.ForeignKey( - blank=True, - help_text="De persoon of organisatie die betrokken was bij een klantcontact.", - null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name="klantcontacten", - to="klantinteracties.klantcontact", - verbose_name="Klant contact", - ), - ), - migrations.CreateModel( - name="OrganisatorischeEenheid", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "omschrijving", - models.CharField( - blank=True, - help_text="Omschrijving van de geautomatiseerde actor.", - max_length=200, - verbose_name="Omschrijving", - ), - ), - ( - "email", - models.EmailField( - blank=True, - help_text="Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", - max_length=254, - verbose_name="email address", - ), - ), - ( - "faxnummer", - models.CharField( - help_text="Faxnummer waaronder de organisatorische eenheid in de regel bereikbaar is.", - max_length=20, - verbose_name="Faxnummer", - ), - ), - ( - "telefoonnummer", - models.CharField( - help_text="Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", - max_length=20, - verbose_name="Telefoonnummer", - ), - ), - ( - "actor", - models.ForeignKey( - help_text="'GeautomatiseerdeActor' was 'Actor'", - on_delete=django.db.models.deletion.CASCADE, - related_name="organisatorische_eenheid", - to="klantinteracties.actor", - verbose_name="Actor", - ), - ), - ], - options={ - "verbose_name": "organisatorische eenheid", - }, - ), - migrations.CreateModel( - name="Medewerker", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "functie", - models.CharField( - help_text="Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", - max_length=40, - verbose_name="Functie", - ), - ), - ( - "email", - models.EmailField( - blank=True, - help_text="Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is.", - max_length=254, - verbose_name="email address", - ), - ), - ( - "telefoonnummer", - models.CharField( - help_text="Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is.", - max_length=20, - verbose_name="Telefoonnummer", - ), - ), - ( - "actor", - models.ForeignKey( - help_text="'GeautomatiseerdeActor' was 'Actor'", - on_delete=django.db.models.deletion.CASCADE, - related_name="medewerker", - to="klantinteracties.actor", - verbose_name="Actor", - ), - ), - ], - options={ - "verbose_name": "medewerker", - "verbose_name_plural": "Mederwerkers", - }, - ), - migrations.CreateModel( - name="GeautomatiseerdeActor", - fields=[ - ( - "id", - models.AutoField( - auto_created=True, - primary_key=True, - serialize=False, - verbose_name="ID", - ), - ), - ( - "functie", - models.CharField( - help_text="Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert.", - max_length=40, - verbose_name="Functie", - ), - ), - ( - "omschrijving", - models.CharField( - blank=True, - help_text="Omschrijving van de geautomatiseerde actor.", - max_length=200, - verbose_name="Omschrijving", - ), - ), - ( - "actor", - models.ForeignKey( - help_text="'GeautomatiseerdeActor' was 'Actor'", - on_delete=django.db.models.deletion.CASCADE, - related_name="geautomatiseerde_actor", - to="klantinteracties.actor", - verbose_name="Actor", - ), - ), - ], - options={ - "verbose_name": "geautomatiseerde actor", - "verbose_name_plural": "geautomatiseerde actoren", - }, - ), - migrations.AddField( - model_name="klantcontact", - name="actoren", - field=models.ManyToManyField( - help_text="De actoren die tijdens het klantcontant contact had met klanten of hun vertegenwoordigers.", - related_name="klantcontacten", - to="klantinteracties.Actor", - verbose_name="Actoren", - ), - ), - ] diff --git a/src/openklant/components/klantinteracties/migrations/0006_internetaak.py b/src/openklant/components/klantinteracties/migrations/0006_internetaak.py deleted file mode 100644 index 4136867c..00000000 --- a/src/openklant/components/klantinteracties/migrations/0006_internetaak.py +++ /dev/null @@ -1,100 +0,0 @@ -# Generated by Django 3.2.18 on 2023-10-12 16:07 - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - dependencies = [ - ("klantinteracties", "0005_actor"), - ] - - operations = [ - migrations.CreateModel( - name="InterneTaak", - fields=[ - ( - "id", - models.UUIDField( - default=uuid.uuid4, - help_text="Unieke (technische) identificatiecode van de interne taak.", - primary_key=True, - serialize=False, - unique=True, - ), - ), - ( - "nummer", - models.CharField( - help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke interne taak aan te duiden.", - max_length=10, - validators=[django.core.validators.validate_integer], - verbose_name="Nummer", - ), - ), - ( - "gevraagde_handeling", - models.CharField( - help_text="Handeling die moet worden uitgevoerd om de taak af te ronden.", - max_length=200, - verbose_name="Gevraagde handeling", - ), - ), - ( - "toelichting", - models.CharField( - 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=400, - verbose_name="Toelichting", - ), - ), - ( - "status", - models.CharField( - choices=[ - ("te_verwerken", "Het verzoek is afgehandeld."), - ("verwerkt", "Het verzoek id buiten behandeling gesteld."), - ], - help_text="Aanduiding van de vordering bij afhandeling van de interne taak.", - max_length=12, - verbose_name="Status", - ), - ), - ( - "toegewezen_op", - models.DateTimeField( - help_text="Datum en tijdstip waarop de interne taak aan een actor werd toegewezen.", - verbose_name="Toegewezen op", - ), - ), - ( - "actor", - models.ForeignKey( - help_text="De actor aan wie de interne taak werd toegewezen.", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="interne_taak", - to="klantinteracties.actor", - verbose_name="Actor", - ), - ), - ( - "klantcontact", - models.ForeignKey( - help_text="Het klantcontact dat aanleiding gaf tot het ontstaan van een interne taak.", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="interne_taak", - to="klantinteracties.klantcontact", - verbose_name="Klantcontact", - ), - ), - ], - options={ - "verbose_name": "interne taak", - "verbose_name_plural": "interne taken", - }, - ), - ] diff --git a/src/openklant/components/klantinteracties/models/actoren.py b/src/openklant/components/klantinteracties/models/actoren.py index c741e815..2c7858af 100644 --- a/src/openklant/components/klantinteracties/models/actoren.py +++ b/src/openklant/components/klantinteracties/models/actoren.py @@ -4,34 +4,33 @@ from django.utils.translation import gettext_lazy as _ from .constants import SoortActor -from .mixins import ActorIdentifcatorMixin +from .mixins import IdentificatorMixin -class Actor(ActorIdentifcatorMixin): - id = models.UUIDField( - primary_key=True, +class Actor(IdentificatorMixin): + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van de actor."), ) naam = models.CharField( - _("Naam"), + _("naam"), help_text=_("Naam van de actor."), max_length=200, ) soort_actor = models.CharField( - _("Soort actor"), + _("soort actor"), help_text=_("Geeft aan van welke specifieke soort actor sprake is."), choices=SoortActor.choices, max_length=24, ) indicatie_actief = models.BooleanField( - _("Indicatie actief"), + _("indicatie actief"), help_text=_( "Geeft aan of aan de actor nog betrokken mag worden bij nieuwe klantcontacten. " "Voor niet-actieve is dit niet toegestaan." ), - blank=False, + default=True, ) class Meta: @@ -47,19 +46,17 @@ class GeautomatiseerdeActor(models.Model): Actor, on_delete=models.CASCADE, verbose_name=_("Actor"), - related_name="geautomatiseerde_actor", help_text=_("'GeautomatiseerdeActor' was 'Actor'"), - null=False, ) functie = models.CharField( - _("Functie"), + _("functie"), help_text=_( "Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert." ), max_length=40, ) omschrijving = models.CharField( - _("Omschrijving"), + _("omschrijving"), help_text=_("Omschrijving van de geautomatiseerde actor."), max_length=200, blank=True, @@ -77,27 +74,25 @@ class Medewerker(models.Model): actor = models.ForeignKey( Actor, on_delete=models.CASCADE, - verbose_name=_("Actor"), - related_name="medewerker", + verbose_name=_("actor"), help_text=_("'GeautomatiseerdeActor' was 'Actor'"), - null=False, ) functie = models.CharField( - _("Functie"), + _("functie"), help_text=_( "Functie van de geautomatiseerde actor of beschrijving van de werkzaamheden die deze uitvoert." ), max_length=40, ) - email = models.EmailField( - _("email address"), + emailadres = models.EmailField( + _("e-mailadres"), help_text=_( "Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is." ), blank=True, ) telefoonnummer = models.CharField( - _("Telefoonnummer"), + _("telefoonnummer"), help_text=_( "Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is." ), @@ -106,7 +101,7 @@ class Medewerker(models.Model): class Meta: verbose_name = _("medewerker") - verbose_name_plural = _("Mederwerkers") + verbose_name_plural = _("mederwerkers") def __str__(self): return self.functie @@ -116,33 +111,32 @@ class OrganisatorischeEenheid(models.Model): actor = models.ForeignKey( Actor, on_delete=models.CASCADE, - verbose_name=_("Actor"), - related_name="organisatorische_eenheid", + verbose_name=_("actor"), help_text=_("'GeautomatiseerdeActor' was 'Actor'"), - null=False, + unique=True, ) omschrijving = models.CharField( - _("Omschrijving"), + _("omschrijving"), help_text=_("Omschrijving van de geautomatiseerde actor."), max_length=200, blank=True, ) - email = models.EmailField( - _("email address"), + emailadres = models.EmailField( + _("e-mailadres"), help_text=_( "Elektronisch postadres waaronder de MEDEWERKER in de regel bereikbaar is." ), blank=True, ) faxnummer = models.CharField( - _("Faxnummer"), + _("faxnummer"), help_text=_( "Faxnummer waaronder de organisatorische eenheid in de regel bereikbaar is." ), max_length=20, ) telefoonnummer = models.CharField( - _("Telefoonnummer"), + _("telefoonnummer"), help_text=_( "Telefoonnummer waaronder de MEDEWERKER in de regel bereikbaar is." ), diff --git a/src/openklant/components/klantinteracties/models/constants.py b/src/openklant/components/klantinteracties/models/constants.py index 88a2ba0b..c9daac7f 100644 --- a/src/openklant/components/klantinteracties/models/constants.py +++ b/src/openklant/components/klantinteracties/models/constants.py @@ -3,14 +3,6 @@ from djchoices import ChoiceItem, DjangoChoices -# TODO: change value when document gets updated: -# https://vng-realisatie.github.io/klantinteracties/informatiemodel/gegevenswoordenboek#detail_class_Model_Initiator -class Initiator(DjangoChoices): - gemeente = ChoiceItem("gemeente", _("Gemeente")) - klant = ChoiceItem("klant", _("Klant")) - vertegenwoordiger = ChoiceItem("vertegenwoordiger", _("Vertegenwoordiger")) - - class Taakstatus(DjangoChoices): te_verwerken = ChoiceItem("te_verwerken", _("Het verzoek is afgehandeld.")) verwerkt = ChoiceItem("verwerkt", _("Het verzoek id buiten behandeling gesteld.")) diff --git a/src/openklant/components/klantinteracties/models/digitaal_adres.py b/src/openklant/components/klantinteracties/models/digitaal_adres.py index 12f172c6..aecaa247 100644 --- a/src/openklant/components/klantinteracties/models/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/models/digitaal_adres.py @@ -5,29 +5,28 @@ class DigitaalAdres(models.Model): - id = models.UUIDField( - primary_key=True, + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van het digitaal adres."), ) soort_digitaal_adres = models.CharField( - _("Soort digitaal adres"), + _("soort digitaal adres"), help_text=_( "Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen " "met dit adres contact kan worden opgenomen." ), - max_length=254, + max_length=255, ) adres = models.CharField( - _("Adres"), + _("adres"), help_text=_( "Digitaal adres waarmee een persoon of organisatie bereikt kan worden." ), max_length=80, ) omschrijving = models.CharField( - _("Omschrijving"), + _("omschrijving"), help_text=_("Omschrijving van het digitaal adres."), max_length=40, ) diff --git a/src/openklant/components/klantinteracties/models/internetaken.py b/src/openklant/components/klantinteracties/models/internetaken.py index 0d8d4be3..0509dd8a 100644 --- a/src/openklant/components/klantinteracties/models/internetaken.py +++ b/src/openklant/components/klantinteracties/models/internetaken.py @@ -10,8 +10,7 @@ class InterneTaak(models.Model): - id = models.UUIDField( - primary_key=True, + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van de interne taak."), @@ -19,23 +18,19 @@ class InterneTaak(models.Model): actor = models.ForeignKey( Actor, on_delete=models.CASCADE, - verbose_name=_("Actor"), - related_name="interne_taak", + verbose_name=_("actor"), help_text=_("De actor aan wie de interne taak werd toegewezen."), - null=True, ) klantcontact = models.ForeignKey( Klantcontact, on_delete=models.CASCADE, - verbose_name=_("Klantcontact"), - related_name="interne_taak", + verbose_name=_("klantcontact"), help_text=_( "Het klantcontact dat aanleiding gaf tot het ontstaan van een interne taak." ), - null=True, ) nummer = models.CharField( - _("Nummer"), + _("nummer"), help_text=_( "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan " "worden gebruikt om de specifieke interne taak aan te duiden." @@ -44,12 +39,12 @@ class InterneTaak(models.Model): max_length=10, ) gevraagde_handeling = models.CharField( - _("Gevraagde handeling"), + _("gevraagde handeling"), help_text=_("Handeling die moet worden uitgevoerd om de taak af te ronden."), max_length=200, ) - toelichting = models.CharField( - _("Toelichting"), + toelichting = models.TextField( + _("toelichting"), help_text=_( "Toelichting die, aanvullend bij de inhoud van het klantcontact dat " "aanleiding gaf tot de taak en de gevraagde handeling, " @@ -58,16 +53,17 @@ class InterneTaak(models.Model): max_length=400, ) status = models.CharField( - _("Status"), + _("status"), help_text=_("Aanduiding van de vordering bij afhandeling van de interne taak."), choices=Taakstatus.choices, max_length=12, ) toegewezen_op = models.DateTimeField( - _("Toegewezen op"), + _("toegewezen op"), help_text=_( "Datum en tijdstip waarop de interne taak aan een actor werd toegewezen." ), + auto_now_add=True, blank=False, ) diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py index 6680d7ca..9867cbf6 100644 --- a/src/openklant/components/klantinteracties/models/klantcontacten.py +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -2,37 +2,26 @@ from django.core.validators import validate_integer from django.db import models +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from .actoren import Actor -from .constants import Initiator, Klantcontrol +from .constants import Klantcontrol from .digitaal_adres import DigitaalAdres from .mixins import BezoekAdresMixin, ContactNaamMixin, CorrespondentieAdresMixin class Klantcontact(models.Model): - id = models.UUIDField( - primary_key=True, + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_( "Unieke (technische) identificatiecode van de betrokkene bij klantcontact." ), ) - klantcontact = models.ForeignKey( - "self", - on_delete=models.SET_NULL, - related_name="klantcontacten", - verbose_name=_("Klant contact"), - help_text=_( - "De persoon of organisatie die betrokken was bij een klantcontact." - ), - blank=True, - null=True, - ) actoren = models.ManyToManyField( Actor, - verbose_name=_("Actoren"), + verbose_name=_("actoren"), related_name="klantcontacten", help_text=_( "De actoren die tijdens het klantcontant contact had met klanten of hun vertegenwoordigers." @@ -42,7 +31,7 @@ class Klantcontact(models.Model): # TODO: add fk to Onderwerpobject # TODO: add fk to Inhoudsobject nummer = models.CharField( - _("Nummer"), + _("nummer"), help_text=_( "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan " "worden gebruikt om het specifieke klantcontact aan te duiden." @@ -51,17 +40,17 @@ class Klantcontact(models.Model): max_length=10, ) kanaal = models.CharField( - _("Kanaal"), + _("kanaal"), help_text=_("Communicatiekanaal dat bij het klantcontact werd gebruikt."), max_length=50, ) onderwerp = models.CharField( - _("Onderwerp"), + _("onderwerp"), help_text=_("Datgene waarover het klantcontact ging."), max_length=200, ) - inhoud = models.CharField( - _("Inhoud"), + inhoud = models.TextField( + _("inhoud"), help_text=_( "Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld, " "voor zover die voor betrokkenen of actoren relevant is." @@ -69,14 +58,8 @@ class Klantcontact(models.Model): max_length=1000, blank=True, ) - initiator = models.CharField( - _("Initiator"), - help_text=_("Degene die het klantcontact initieerde."), - choices=Initiator.choices, - max_length=17, - ) indicatie_contact_gelukt = models.BooleanField( - _("Indicatie contact gelukt"), + _("indicatie contact gelukt"), help_text=( "Geeft, indien bekend, aan of de poging contact tussen de gemeente " "en inwoner(s) of organisatie(s) tot stand te brengen succesvol was." @@ -84,25 +67,26 @@ class Klantcontact(models.Model): null=True, ) taal = models.CharField( - _("Taal"), + _("taal"), help_text=_("Taal die bij het klantcontact werd gesproken of geschreven."), max_length=255, ) vertrouwelijk = models.BooleanField( - _("Vertrouwelijk"), + _("vertrouwelijk"), help_text=_( "Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld." ), ) # TODO: does this field require auto_now? plaatsgevonden_op = models.DateTimeField( - _("Plaatsgevonden op"), + _("plaatsgevonden op"), help_text=_( "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." ), + default=timezone.now, blank=False, ) @@ -112,8 +96,7 @@ class Meta: class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): - id = models.UUIDField( - primary_key=True, + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_( @@ -123,21 +106,18 @@ class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): klantcontact = models.ForeignKey( Klantcontact, on_delete=models.CASCADE, - verbose_name=_("Klantcontact"), - related_name="betrokkene", + verbose_name=_("klantcontact"), help_text=_("'Klantcontact' had 'Betrokkene bij klantcontact'"), - null=False, ) digitaal_adres = models.ForeignKey( DigitaalAdres, on_delete=models.CASCADE, - verbose_name=_("Digitaal adres"), - related_name="partijen", + verbose_name=_("digitaal adres"), help_text=_("'Digitaal Adres' had 'Betrokkene bij klantcontact'"), null=True, ) rol = models.CharField( - _("Rol"), + _("rol"), help_text=_( "Rol die de betrokkene bij klantcontact tijdens dat contact vervulde." ), @@ -145,13 +125,17 @@ class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): max_length=17, ) organisatienaam = models.CharField( - _("Organisatienaam"), + _("organisatienaam"), help_text=_( "Naam van de organisatie waarmee de betrokkene bij klantcontact een relatie had." ), max_length=200, blank=True, ) + # TODO: add help_text when it is provided + initiator = models.BooleanField( + _("initiator"), + ) class Meta: verbose_name = _("betrokkene bij klantcontact") diff --git a/src/openklant/components/klantinteracties/models/mixins.py b/src/openklant/components/klantinteracties/models/mixins.py index d0408e45..b75ab273 100644 --- a/src/openklant/components/klantinteracties/models/mixins.py +++ b/src/openklant/components/klantinteracties/models/mixins.py @@ -6,17 +6,17 @@ class BezoekAdresMixin(models.Model): - bezoekadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), + # TODO: Check if this is correct. + bezoekadres_nummeraanduiding_id = models.CharField( + _("nummeraanduiding id"), help_text=_( "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." ), - unique=True, + max_length=255, blank=True, - null=True, ) bezoekadres_adresregel1 = models.CharField( - _("Adresregel 1"), + _("adresregel 1"), help_text=_( "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -24,7 +24,7 @@ class BezoekAdresMixin(models.Model): blank=True, ) bezoekadres_adresregel2 = models.CharField( - _("Adresregel 2"), + _("adresregel 2"), help_text=_( "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -32,7 +32,7 @@ class BezoekAdresMixin(models.Model): blank=True, ) bezoekadres_adresregel3 = models.CharField( - _("Adresregel 3"), + _("adresregel 3"), help_text=_( "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -40,7 +40,7 @@ class BezoekAdresMixin(models.Model): blank=True, ) bezoekadres_land = models.CharField( - _("Land"), + _("land"), help_text=_( "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " "aangeeft alwaar de ingeschrevene verblijft." @@ -55,10 +55,10 @@ class BezoekAdresMixin(models.Model): bezoekadres = GegevensGroepType( { - "nummeraanduiding id": bezoekadres_nummeraanduiding_id, - "adresregel 1": bezoekadres_adresregel1, - "adresregel 2": bezoekadres_adresregel2, - "adresregel 3": bezoekadres_adresregel3, + "nummeraanduiding_id": bezoekadres_nummeraanduiding_id, + "adresregel_1": bezoekadres_adresregel1, + "adresregel_2": bezoekadres_adresregel2, + "adresregel_3": bezoekadres_adresregel3, "land": bezoekadres_land, } ) @@ -68,17 +68,17 @@ class Meta: class CorrespondentieAdresMixin(models.Model): - correspondentieadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), + # TODO: Check if this is correct. + correspondentieadres_nummeraanduiding_id = models.CharField( + _("nummeraanduiding ID"), help_text=_( "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." ), - unique=True, + max_length=255, blank=True, - null=True, ) correspondentieadres_adresregel1 = models.CharField( - _("Adresregel 1"), + _("adresregel 1"), help_text=_( "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -86,7 +86,7 @@ class CorrespondentieAdresMixin(models.Model): blank=True, ) correspondentieadres_adresregel2 = models.CharField( - _("Adresregel 2"), + _("adresregel 2"), help_text=_( "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -94,7 +94,7 @@ class CorrespondentieAdresMixin(models.Model): blank=True, ) correspondentieadres_adresregel3 = models.CharField( - _("Adresregel 3"), + _("adresregel 3"), help_text=_( "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." ), @@ -102,7 +102,7 @@ class CorrespondentieAdresMixin(models.Model): blank=True, ) correspondentieadres_land = models.CharField( - _("Land"), + _("land"), help_text=_( "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " "aangeeft alwaar de ingeschrevene verblijft." @@ -117,10 +117,10 @@ class CorrespondentieAdresMixin(models.Model): correspondentieadres = GegevensGroepType( { - "nummeraanduiding id": correspondentieadres_nummeraanduiding_id, - "adresregel 1": correspondentieadres_adresregel1, - "adresregel 2": correspondentieadres_adresregel2, - "adresregel 3": correspondentieadres_adresregel3, + "nummeraanduiding_id": correspondentieadres_nummeraanduiding_id, + "adresregel_1": correspondentieadres_adresregel1, + "adresregel_2": correspondentieadres_adresregel2, + "adresregel_3": correspondentieadres_adresregel3, "land": correspondentieadres_land, }, ) @@ -131,7 +131,7 @@ class Meta: class ContactNaamMixin(models.Model): contactnaam_voorletters = models.CharField( - _("Voorletters"), + _("voorletters"), help_text=_( "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen " "de beginletter gecombineerd met de tweede letter van een voornaam." @@ -139,7 +139,7 @@ class ContactNaamMixin(models.Model): max_length=10, ) contactnaam_voornaam = models.CharField( - _("Voornaam"), + _("voornaam"), help_text=_( "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente." ), @@ -147,7 +147,7 @@ class ContactNaamMixin(models.Model): blank=True, ) contactnaam_voorvoegsel_achternaam = models.CharField( - _("Voorvoegsel achternaam"), + _("voorvoegsel achternaam"), help_text=_( "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon " "wil gebruiken tijdens communicatie met de gemeente." @@ -156,7 +156,7 @@ class ContactNaamMixin(models.Model): blank=True, ) contactnaam_achternaam = models.CharField( - _("Achternaam"), + _("achternaam"), help_text=_( "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente." ), @@ -168,7 +168,7 @@ class ContactNaamMixin(models.Model): { "voorletters": contactnaam_voorletters, "voornaam": contactnaam_voornaam, - "voorvoegsel achternaam": contactnaam_voorvoegsel_achternaam, + "voorvoegsel_achternaam": contactnaam_voorvoegsel_achternaam, "achternaam": contactnaam_achternaam, } ) @@ -177,33 +177,33 @@ class Meta: abstract = True -class ActorIdentifcatorMixin(models.Model): - actoridentifcator_objecttype = models.CharField( - _("Objecttype"), +class IdentificatorMixin(models.Model): + identificator_objecttype = models.CharField( + _("objecttype"), help_text=_( "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'." ), max_length=200, blank=False, ) - actoridentifcator_soort_object_id = models.CharField( - _("Soort Object ID"), + identificator_soort_object_id = models.CharField( + _("soort object id"), help_text=_( "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'." ), max_length=200, blank=False, ) - actoridentifcator_object_id = models.CharField( - _("Object ID"), + identificator_object_id = models.CharField( + _("object id"), help_text=_( "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'." ), max_length=200, blank=False, ) - actoridentifcator_register = models.CharField( - _("Object ID"), + identificator_register = models.CharField( + _("register"), help_text=_( "Binnen het landschap van registers unieke omschrijving van het register waarin " "het object is geregistreerd, bijvoorbeeld: 'BRP'." @@ -212,12 +212,12 @@ class ActorIdentifcatorMixin(models.Model): blank=False, ) - actoridentifcator = GegevensGroepType( + identificator = GegevensGroepType( { - "objecttype": actoridentifcator_objecttype, - "soort object id": actoridentifcator_soort_object_id, - "object id": actoridentifcator_object_id, - "register": actoridentifcator_register, + "objecttype": identificator_objecttype, + "soort_object_id": identificator_soort_object_id, + "object_id": identificator_object_id, + "register": identificator_register, } ) diff --git a/src/openklant/components/klantinteracties/models/partijen.py b/src/openklant/components/klantinteracties/models/partijen.py index 41ba0735..016c05a2 100644 --- a/src/openklant/components/klantinteracties/models/partijen.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -11,8 +11,7 @@ class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): - id = models.UUIDField( - primary_key=True, + uuid = models.UUIDField( unique=True, default=uuid.uuid4, help_text=_("Unieke (technische) identificatiecode van de partij."), @@ -20,21 +19,34 @@ class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): betrokkene = models.ForeignKey( Betrokkene, on_delete=models.CASCADE, - verbose_name=_("Betrokkene"), - related_name="partijen", + verbose_name=_("betrokkene"), help_text=_("'Betrokkene bij klantcontact' was 'Partij'"), null=True, ) digitaal_adres = models.ForeignKey( DigitaalAdres, on_delete=models.CASCADE, - verbose_name=_("Digitaal adres"), - related_name="digitale_adressen", + verbose_name=_("digitaal adres"), help_text=_("'Digitaal Adres' was 'Partij'"), null=True, ) + voorkeurs_digitaal_adres = models.ForeignKey( + DigitaalAdres, + on_delete=models.CASCADE, + related_name="voorkeurs_partij", + verbose_name=_("voorkeurs digitaal adres"), + help_text=_("'Partij' gaf voorkeur aan voor contact via 'Digitaal adres'"), + null=True, + ) + vertegenwoordigde = models.ManyToManyField( + "self", + verbose_name=_("vertegenwoordigde"), + help_text=_("'Partij' die een andere 'Partij' vertegenwoordigde."), + blank=True, + null=True, + ) nummer = models.CharField( - _("Nummer"), + _("nummer"), help_text=_( "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan " "worden gebruikt om de specifieke partij aan te duiden." @@ -42,8 +54,8 @@ class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): validators=[validate_integer], max_length=10, ) - interne_notitie = models.CharField( - _("Interne notitie"), + interne_notitie = models.TextField( + _("interne notitie"), help_text=_( "Mededelingen, aantekeningen of bijzonderheden over de partij, bedoeld voor intern gebruik." ), @@ -51,36 +63,29 @@ class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): blank=True, ) soort_partij = models.CharField( - _("Soort partij"), + _("soort partij"), help_text=_("Geeft aan van welke specifieke soort partij sprake is."), max_length=14, choices=SoortPartij.choices, ) indicatie_geheimhouding = models.BooleanField( - _("Indicatie geheimhouding"), + _("indicatie geheimhouding"), help_text=_( "Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat " "deze gegevens als geheim beschouwd moeten worden." ), ) - voorkeurskanaal = models.CharField( - _("Voorkeurskanaal"), - help_text=_( - "Kanaal dat de partij bij voorkeur gebruikt voor contact met de gemeente." - ), - max_length=50, - blank=True, - ) voorkeurstaal = models.CharField( - _("Voorkeurstaal"), + _("voorkeurstaal"), help_text=_( - "Taal waarin de partij bij voorkeur contact heeft met de gemeente." + "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" ), - max_length=255, + max_length=3, blank=True, ) indicatie_actief = models.BooleanField( - _("Indicatie actief"), + _("indicatie actief"), help_text=_( "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." @@ -96,12 +101,11 @@ class Organisatie(models.Model): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, - verbose_name=_("Partij"), - related_name="organisatie", - null=True, + verbose_name=_("partij"), + unique=True, ) naam = models.CharField( - _("Naam"), + _("naam"), help_text=_("Naam van de organisatie."), max_length=200, blank=True, @@ -119,9 +123,8 @@ class Persoon(ContactNaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, - verbose_name=_("Partij"), - related_name="persoon", - null=True, + verbose_name=_("partij"), + unique=True, ) class Meta: @@ -136,15 +139,13 @@ class Contactpersoon(ContactNaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, - verbose_name=_("Partij"), - related_name="contact_persoon", - null=True, + verbose_name=_("partij"), + unique=True, ) organisatie = models.ForeignKey( Organisatie, on_delete=models.CASCADE, - verbose_name=_("Organistatie"), - related_name="contact_personen", + verbose_name=_("organistatie"), help_text=_("De organisatie waar een contactpersoon voor werkt."), null=True, )