diff --git a/CHANGELOG.md b/CHANGELOG.md index c332028..f8125e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,31 @@ ## Unreleased - Added service to link addresses to addressregister uris [OP-3795] - Derive an organization's reference region(s) from its werkingsgebied; bump scope-of-operation to 0.2.0 [OP-3799] -- Frontend [v1.38.0] +- Site type changes [OP-3818] +- Frontend [v1.40.1](https://github.com/lblod/frontend-organization-portal/blob/v1.40.1/CHANGELOG.md), [v1.40.0](https://github.com/lblod/frontend-organization-portal/blob/5d2147662f620d420f54b9624a12c42ca2ac964a/CHANGELOG.md#v1400-2026-07-06), [v1.39.0](https://github.com/lblod/frontend-organization-portal/blob/5d2147662f620d420f54b9624a12c42ca2ac964a/CHANGELOG.md#v1390-2026-06-25) ,[v1.38.0](https://github.com/lblod/frontend-organization-portal/blob/5d2147662f620d420f54b9624a12c42ca2ac964a/CHANGELOG.md#v1380-2026-06-12) +- Added Juridische vorm [OP-3816] [OP-3820] +- Add new organization types (interlokale vereniging, vervoerregioraad, zorgraad, bosgroep, woonmaatschappij); add werkingsgebied (dct:spatial) to registered organizations [OP-3828] +- Rename generic organization types to "Vereniging algemeen" / "Vennootschap algemeen" [OP-3828] +- bump construct-organization-relationships [OP-3810] +- "In Oprichting" bestuursorgaan lifecycle [OP-3810] ### Deploy notes ``` -drc up -d link-adressenregister-uri +drc up -d link-adressenregister-uri frontend construct-organization-relationships +drc restart resource migrations dispatcher ``` ``` +drc restart migrations drc up -d frontend scope-of-operation +drc restart cache resource +``` + +``` +drc pull construct-organization-relationships && drc up -d construct-organization-relationships +drc restart migrations +drc restart resource cache +scripts/reset-elastic.sh ``` ## v1.40.0 diff --git a/config/dispatcher/dispatcher.ex b/config/dispatcher/dispatcher.ex index 7fc74a4..b92cbef 100644 --- a/config/dispatcher/dispatcher.ex +++ b/config/dispatcher/dispatcher.ex @@ -386,7 +386,7 @@ defmodule Dispatcher do layer: :api_services, accept: %{json: true} } do - forward(conn, path, "http://construct-organization-relationships/create-relationships/") + forward(conn, path, "http://construct-organization-relationships/") end post "/kbo-data-sync/*path", %{layer: :api_services, accept: %{json: true}} do diff --git a/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.graph b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.ttl b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.ttl new file mode 100644 index 0000000..9afe88d --- /dev/null +++ b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100000-add-new-organization-classification-codes.ttl @@ -0,0 +1,51 @@ +# New organization classification codes (ticket: new org types). +# prefLabel = technically-correct org name; altLabel = colloquial werkingsgebied term. +# URIs under data.vlaanderen.be/id/concept// (to be published upstream) - matches existing codes. +# Each code is inScheme its family scheme AND the public-export scheme (10caf4a4) = the export switch. +@prefix rdf: . +@prefix skos: . +@prefix mu: . +@prefix ext: . +@prefix code: . +@prefix scheme: . + +# --- BestuurseenheidClassificatieCode (besluit:Bestuurseenheid) --- + + + rdf:type ext:OrganizationClassificationCode , code:BestuurseenheidClassificatieCode ; + mu:uuid "3a2649ef-7345-4d3a-8709-f89fc9b44f58" ; + skos:prefLabel "Interlokale vereniging" ; + skos:topConceptOf scheme:BestuurseenheidClassificatieCode ; + skos:inScheme scheme:BestuurseenheidClassificatieCode , . + + + rdf:type ext:OrganizationClassificationCode , code:BestuurseenheidClassificatieCode ; + mu:uuid "b2133b86-24f0-44f0-9d10-5b4c7f944a9d" ; + skos:prefLabel "Vervoerregioraad" ; + skos:altLabel "Vervoerregio" ; # Modelled as the werkingsgebied of a Vervoerregioraad, but colloquially known as a Vervoerregio. + skos:topConceptOf scheme:BestuurseenheidClassificatieCode ; + skos:inScheme scheme:BestuurseenheidClassificatieCode , . + +# --- GeregistreerdeOrganisatieClassificatieCode (regorg:RegisteredOrganization) --- + + + rdf:type ext:OrganizationClassificationCode , ext:GeregistreerdeOrganisatieClassificatieCode ; + mu:uuid "8392b885-a875-4b0d-b6a2-b52e53bda454" ; + skos:prefLabel "Zorgraad" ; + skos:altLabel "Eerstelijnszone" ; # Modelled as the werkingsgebied of a Zorgraad, but colloquially known as an Eerstelijnszone. + skos:topConceptOf scheme:GeregistreerdeOrganisatieClassificatieCode ; + skos:inScheme scheme:GeregistreerdeOrganisatieClassificatieCode , . + + + rdf:type ext:OrganizationClassificationCode , ext:GeregistreerdeOrganisatieClassificatieCode ; + mu:uuid "b22948f9-e695-4f24-a530-b6bf3af3b37f" ; + skos:prefLabel "Bosgroep" ; + skos:topConceptOf scheme:GeregistreerdeOrganisatieClassificatieCode ; + skos:inScheme scheme:GeregistreerdeOrganisatieClassificatieCode , . + + + rdf:type ext:OrganizationClassificationCode , ext:GeregistreerdeOrganisatieClassificatieCode ; + mu:uuid "f4e5bb57-1007-4397-828b-b34bbf1e760d" ; + skos:prefLabel "Woonmaatschappij" ; + skos:topConceptOf scheme:GeregistreerdeOrganisatieClassificatieCode ; + skos:inScheme scheme:GeregistreerdeOrganisatieClassificatieCode , . diff --git a/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.graph b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.graph new file mode 100644 index 0000000..092c3a9 --- /dev/null +++ b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public diff --git a/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.ttl b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.ttl new file mode 100644 index 0000000..81fa2d2 --- /dev/null +++ b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100100-add-vervoerregioraad-governing-body-codes.ttl @@ -0,0 +1,35 @@ +# Governing body (bestuursorgaan) + mandate (bestuursfunctie) codes for the Vervoerregioraad. +# The vervoerregioraad is itself the deliberative organ (no AV/RvB substructure); members + a +# (dual) voorzitter. URIs under data.vlaanderen.be (to be published), matching existing codes. +# NOTE (business to confirm): exact role set + the dual voorzitterschap (gemeente-vertegenwoordiger +# + Departement MOW) — modeled here as a single Voorzitter + Lid. +@prefix rdf: . +@prefix skos: . +@prefix mu: . +@prefix ext: . +@prefix code: . +@prefix scheme: . + +# --- Bestuursorgaan: the Vervoerregioraad itself --- + + rdf:type code:BestuursorgaanClassificatieCode , skos:Concept , ext:BestuursorgaanClassificatieCode ; + mu:uuid "a04a5fb1-b79c-4b8d-a664-c5410d466d49" ; + skos:prefLabel "Vervoerregioraad" ; + skos:inScheme . + +# --- Bestuursfunctie codes (mandate roles) applying to the Vervoerregioraad --- + + rdf:type code:BestuursfunctieCode ; + mu:uuid "540f3be6-73ed-4935-9de7-30997bab379c" ; + skos:prefLabel "Voorzitter van de vervoerregioraad" ; + ext:appliesTo ; + skos:topConceptOf scheme:BestuursfunctieCode ; + skos:inScheme scheme:BestuursfunctieCode , . + + + rdf:type code:BestuursfunctieCode ; + mu:uuid "1093c55c-84d5-424b-980e-8b2ca32dc445" ; + skos:prefLabel "Lid van de vervoerregioraad" ; + ext:appliesTo ; + skos:topConceptOf scheme:BestuursfunctieCode ; + skos:inScheme scheme:BestuursfunctieCode , . diff --git a/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100200-rename-generic-organization-type-labels.sparql b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100200-rename-generic-organization-type-labels.sparql new file mode 100644 index 0000000..6b52970 --- /dev/null +++ b/config/migrations/2026/20260619100000-onboarding-new-org-types/20260619100200-rename-generic-organization-type-labels.sparql @@ -0,0 +1,31 @@ +DELETE { + GRAPH { + ?oldLabel. + } +} +INSERT { + GRAPH { + "Vereniging algemeen". + } +} +WHERE { + GRAPH { + ?oldLabel. + } +}; + +DELETE { + GRAPH { + ?oldLabel. + } +} +INSERT { + GRAPH { + "Vennootschap algemeen". + } +} +WHERE { + GRAPH { + ?oldLabel. + } +} diff --git a/config/migrations/2026/20260624101800-add-site-type-bezoekadres.sparql b/config/migrations/2026/20260624101800-add-site-type-bezoekadres.sparql new file mode 100644 index 0000000..5c3d43e --- /dev/null +++ b/config/migrations/2026/20260624101800-add-site-type-bezoekadres.sparql @@ -0,0 +1,10 @@ +INSERT DATA { + GRAPH { + . + "Bezoekadres" . + "019ef8b6-ba27-7388-a5cc-faf74f357963" . + . + . + . + } +} diff --git a/config/migrations/2026/20260630100000-cleanup-in-oprichting-worship-services.sparql b/config/migrations/2026/20260630100000-cleanup-in-oprichting-worship-services.sparql new file mode 100644 index 0000000..70ba656 --- /dev/null +++ b/config/migrations/2026/20260630100000-cleanup-in-oprichting-worship-services.sparql @@ -0,0 +1,95 @@ +PREFIX mandaat: +PREFIX ere: +PREFIX besluit: +PREFIX generiek: +PREFIX regorg: +PREFIX org: + +DELETE { + GRAPH { + ?otherOrgaanInTime ?p ?o . + ?s ?p2 ?otherOrgaanInTime . + ?mandate ?mp ?mo . + ?ms ?mp2 ?mandate . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst ; + regorg:orgStatus . + + ?bestuursorgaan besluit:bestuurt ?worshipService . + + { + SELECT ?bestuursorgaan (MAX(?start) AS ?keptStart) { + GRAPH { + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan ; + mandaat:bindingStart ?start . + FILTER(?start <= NOW()) + } + } + GROUP BY ?bestuursorgaan + } + + ?keptOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan ; + mandaat:bindingStart ?keptStart . + + ?otherOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + FILTER(?otherOrgaanInTime != ?keptOrgaanInTime) + + { ?otherOrgaanInTime ?p ?o . } + UNION + { ?s ?p2 ?otherOrgaanInTime . } + UNION + { ?otherOrgaanInTime org:hasPost ?mandate . ?mandate ?mp ?mo . } + UNION + { ?otherOrgaanInTime org:hasPost ?mandate . ?ms ?mp2 ?mandate . } + } +}; + +DELETE { + GRAPH { + ?mandate ?p ?o . + ?s ?p2 ?mandate . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst ; + regorg:orgStatus . + + ?bestuursorgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + ?orgaanInTime org:hasPost ?mandate . + ?mandate a mandaat:Mandaat ; + org:role ?role . + + FILTER(?role NOT IN ( + , + , + + )) + + { ?mandate ?p ?o . } + UNION + { ?s ?p2 ?mandate . } + } +}; + +DELETE { + GRAPH { + ?orgaanInTime mandaat:bindingEinde ?endDate . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst ; + regorg:orgStatus . + + ?bestuursorgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + + ?orgaanInTime mandaat:bindingEinde ?endDate . + } +}; diff --git a/config/resources/domain.json b/config/resources/domain.json index 3297918..50fdd45 100644 --- a/config/resources/domain.json +++ b/config/resources/domain.json @@ -532,6 +532,13 @@ "registered-organizations": { "class": "regorg:RegisteredOrganization", "super": ["organizations"], + "relationships": { + "scope": { + "predicate": "dc_terms:spatial", + "target": "locations", + "cardinality": "one" + } + }, "new-resource-base": "http://data.lblod.info/id/geregistreerdeOrganisaties/" }, "organization-classification-codes": { @@ -540,6 +547,10 @@ "label": { "type": "string", "predicate": "skos:prefLabel" + }, + "alt-label": { + "type": "string", + "predicate": "skos:altLabel" } }, "new-resource-base": "http://data.vlaanderen.be/id/concept/OrganizationClassificationCode/" diff --git a/config/search/config.json b/config/search/config.json index d15f2c6..a342e94 100644 --- a/config/search/config.json +++ b/config/search/config.json @@ -663,6 +663,10 @@ "http://www.w3.org/ns/org#classification", "http://www.w3.org/2004/02/skos/core#prefLabel" ], + "classification_alternative_name": [ + "http://www.w3.org/ns/org#classification", + "http://www.w3.org/2004/02/skos/core#altLabel" + ], "status": [ "http://www.w3.org/ns/regorg#orgStatus", "http://www.w3.org/2004/02/skos/core#prefLabel" @@ -745,6 +749,15 @@ } } }, + "classification_alternative_name": { + "type": "text", + "fields": { + "field": { + "type": "keyword", + "normalizer": "custom_sort_normalizer" + } + } + }, "status": { "type": "text", "fields": { diff --git a/docker-compose.yml b/docker-compose.yml index 0b2618a..1f6272e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -215,11 +215,12 @@ services: restart: always logging: *default-logging frontend: - image: lblod/frontend-organization-portal:1.38.0 + image: lblod/frontend-organization-portal:1.40.1 volumes: - ./config/frontend/add-x-frame-options-header.conf:/config/add-x-frame-options.conf environment: EMBER_ENABLE_EDIT_CONTACT_DATA_FEATURE: "true" + EMBER_ENABLE_LEGAL_FORM_EDITABLE_FEATURE: "true" EMBER_OAUTH_API_REDIRECT_URL: "https://organisaties.abb.lblod.info/authorization/callback" EMBER_OAUTH_API_KEY: "677af572-2e2f-4e61-ad38-036723bb314c" EMBER_OAUTH_API_BASE_URL: "https://authenticatie-ti.vlaanderen.be/op/v1/auth" @@ -307,7 +308,7 @@ services: restart: always logging: *default-logging construct-organization-relationships: - image: lblod/construct-organization-relationships-service:1.1.1 + image: lblod/construct-organization-relationships-service:1.1.3 links: - db:database labels: