diff --git a/CHANGELOG.md b/CHANGELOG.md index 03868f5..647ea05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Changelog + ## 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] @@ -11,6 +12,17 @@ - "In Oprichting" bestuursorgaan lifecycle [OP-3810] - Added "werkingsgebied" filter [OP-3812] - Inhoudelijk thema [OP-3817] +- Werkingsgebied (dct:spatial) for private OCMW associations [OP-3832] +- Add a new "Wijkkantoor" site type [OP-3837] +- cleanup local involvement herne [OP-3858] +- Search organizations by vendor [OP-3808] +- Add organization types "Regionaal zorgplatform" (altLabel "Regionale zorgzone") and residual "Andere" [OP-3844] +- Move organizations from "Vereniging algemeen" / "Vennootschap algemeen" to "Andere"; delete those codes [OP-3844] +- Bump construct-organization-relationships [OP-3844] +- Frontend [v1.40.5](https://github.com/lblod/frontend-organization-portal/blob/v1.40.5/CHANGELOG.md) [OP-3844] [OP-3808] [OP-3849] +- Consume and serve provenance properties on harvested Worship positions [DL-7437] +- Frontend [v1.41.0](https://github.com/lblod/frontend-organization-portal/blob/v1.41.0/CHANGELOG.md) [DL-7438] +- Keep werkingsgebied filter up to date via db-cleanup service [OP-3841] - Restrict available imam roles based on worship organisation status [DL-7485] ### Deploy notes @@ -29,17 +41,39 @@ drc restart cache resource drc pull construct-organization-relationships && drc up -d construct-organization-relationships drc restart migrations drc restart resource cache +drc restart delta-producer-publication-graph-maintainer scripts/reset-elastic.sh -``` -``` drc restart migrations frontend db resource cache # reindex elastic search: /bin/bash scripts/reset-elastic.sh +drc restart migrations search +drc up -d frontend ``` +``` +drc restart migrations +drc restart db-cleanup +``` + +``` +# requires frontend >= 1.40.5 and construct-organization-relationships >= 1.1.4 (both bumped in compose here) +drc pull construct-organization-relationships && drc up -d construct-organization-relationships +drc restart migrations-triggering-indexing +drc up -d frontend +drc restart cache resource +``` + ``` drc restart migrations resource delta-producer-publication-graph-maintainer ``` +## v1.41.0 + - added explicit healtchecks [DL-7466] + +### Deploy notes +``` +drc restart dispatcher +``` + ## v1.40.0 - Query to check missing address URI's [OP-3784] - Create new query 'organisations shown in OP frontend' in Dashboard [OP-3774] diff --git a/config/delta-consumers/worship-services-main-info/mapping/queries/dl2op/pass/person.sparql b/config/delta-consumers/worship-services-main-info/mapping/queries/dl2op/pass/person.sparql index 1276ece..9eb6da3 100644 --- a/config/delta-consumers/worship-services-main-info/mapping/queries/dl2op/pass/person.sparql +++ b/config/delta-consumers/worship-services-main-info/mapping/queries/dl2op/pass/person.sparql @@ -7,7 +7,12 @@ CONSTRUCT { FILTER (?p IN ( , , - + , + , + , + , + , + )) FILTER NOT EXISTS { diff --git a/config/delta-producer/organizations-public-info/export.json b/config/delta-producer/organizations-public-info/export.json index e3ca489..cc569c1 100644 --- a/config/delta-producer/organizations-public-info/export.json +++ b/config/delta-producer/organizations-public-info/export.json @@ -108,7 +108,7 @@ "graphsFilter": ["http://mu.semte.ch/graphs/administrative-unit"], "properties": [ "http://mu.semte.ch/vocabularies/core/uuid", - "http://data.vlaanderen.be/ns/besluit#werkingsgebied", + "http://purl.org/dc/terms/spatial", "http://www.opengis.net/ont/geosparql#sfWithin", "http://www.w3.org/2002/07/owl#sameAs", "http://www.w3.org/2004/02/skos/core#altLabel", diff --git a/config/delta-producer/organizations/export.json b/config/delta-producer/organizations/export.json index 47190f2..3c68e81 100644 --- a/config/delta-producer/organizations/export.json +++ b/config/delta-producer/organizations/export.json @@ -240,7 +240,7 @@ ], "properties": [ "http://mu.semte.ch/vocabularies/core/uuid", - "http://data.vlaanderen.be/ns/besluit#werkingsgebied", + "http://purl.org/dc/terms/spatial", "http://www.opengis.net/ont/geosparql#sfWithin", "http://www.w3.org/2002/07/owl#sameAs", "http://www.w3.org/2004/02/skos/core#altLabel", diff --git a/config/delta-producer/public/export.json b/config/delta-producer/public/export.json index b13cc52..f6c6c00 100644 --- a/config/delta-producer/public/export.json +++ b/config/delta-producer/public/export.json @@ -126,7 +126,7 @@ ], "properties": [ "http://mu.semte.ch/vocabularies/core/uuid", - "http://data.vlaanderen.be/ns/besluit#werkingsgebied", + "http://purl.org/dc/terms/spatial", "http://www.opengis.net/ont/geosparql#sfWithin", "http://www.w3.org/2002/07/owl#sameAs", "http://www.w3.org/2004/02/skos/core#altLabel", diff --git a/config/dispatcher/dispatcher.ex b/config/dispatcher/dispatcher.ex index b92cbef..1890123 100644 --- a/config/dispatcher/dispatcher.ex +++ b/config/dispatcher/dispatcher.ex @@ -235,6 +235,10 @@ defmodule Dispatcher do Proxy.forward(conn, path, "http://cache/membership-roles/") end + match "/vendors/*path", %{accept: [:json], layer: :api} do + Proxy.forward(conn, path, "http://cache/vendors/") + end + # There is currently no logic to invalidate the kboOrganization cache when wegwijse updates the content match "/kbo-organizations/*path", %{accept: [:any], layer: :api} do Proxy.forward(conn, path, "http://resource/kbo-organizations/") @@ -507,6 +511,14 @@ defmodule Dispatcher do # forward(conn, path, "http://db:8890/sparql/") # end + ################################################################# + # Health checks + ################################################################# + + get "/health/accounts", %{layer: :api} do + Proxy.forward(conn, [], "http://resource/accounts/") + end + ############################################################### # errors ############################################################### diff --git a/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162242-add-zorgplatform-and-andere-classification-codes.sparql b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162242-add-zorgplatform-and-andere-classification-codes.sparql new file mode 100644 index 0000000..3894671 --- /dev/null +++ b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162242-add-zorgplatform-and-andere-classification-codes.sparql @@ -0,0 +1,25 @@ +PREFIX rdf: +PREFIX skos: +PREFIX mu: +PREFIX ext: +PREFIX scheme: + +INSERT DATA { + GRAPH { + + rdf:type ext:OrganizationClassificationCode , ext:GeregistreerdeOrganisatieClassificatieCode ; + mu:uuid "e3afe092-6ca6-4685-94c6-1ee20811efc4" ; + skos:prefLabel "Regionaal zorgplatform" ; + skos:altLabel "Regionale zorgzone" ; + skos:topConceptOf scheme:GeregistreerdeOrganisatieClassificatieCode ; + skos:inScheme scheme:GeregistreerdeOrganisatieClassificatieCode , . + + + rdf:type ext:OrganizationClassificationCode , ext:GeregistreerdeOrganisatieClassificatieCode ; + mu:uuid "7a199d27-31c3-44bb-a58f-b3a64673a8b6" ; + skos:prefLabel "Andere" ; + skos:definition "Restcategorie: geregistreerde organisatie die niet onder een van de andere classificaties valt." ; + skos:topConceptOf scheme:GeregistreerdeOrganisatieClassificatieCode ; + skos:inScheme scheme:GeregistreerdeOrganisatieClassificatieCode , . + } +} diff --git a/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162300-move-orgs-to-andere.sparql b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162300-move-orgs-to-andere.sparql new file mode 100644 index 0000000..ba5fc26 --- /dev/null +++ b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162300-move-orgs-to-andere.sparql @@ -0,0 +1,24 @@ +PREFIX org: +PREFIX skos: +PREFIX ext: + +# All graphs authorized for regorg:RegisteredOrganization (see config/authorization/config.lisp), +# so no dangling org:classification survives the code deletion in the next migration. +DELETE { + GRAPH ?g { ?org org:classification ?legacy . } +} +INSERT { + GRAPH ?g { ?org org:classification . } +} +WHERE { + VALUES ?g { + + + + } + VALUES ?legacy { + + + } + GRAPH ?g { ?org org:classification ?legacy . } +} diff --git a/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162400-delete-legacy-other-classification-codes.sparql b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162400-delete-legacy-other-classification-codes.sparql new file mode 100644 index 0000000..56b577c --- /dev/null +++ b/config/migrations-triggering-indexing/2026/20260714162242-restructure-other-org-types/20260714162400-delete-legacy-other-classification-codes.sparql @@ -0,0 +1,13 @@ +PREFIX skos: +PREFIX ext: + +DELETE { + GRAPH { ?code ?p ?o . } +} +WHERE { + VALUES ?code { + + + } + GRAPH { ?code ?p ?o . } +} diff --git a/config/migrations/2026/20260716140000-add-werkingsgebied-private-ocmw-associations.sparql b/config/migrations/2026/20260716140000-add-werkingsgebied-private-ocmw-associations.sparql new file mode 100644 index 0000000..e22652f --- /dev/null +++ b/config/migrations/2026/20260716140000-add-werkingsgebied-private-ocmw-associations.sparql @@ -0,0 +1,36 @@ +PREFIX org: +PREFIX skos: +PREFIX organisatie: +PREFIX adres: +PREFIX besluit: +PREFIX dct: + +INSERT { + GRAPH { + ?org dct:spatial ?werkingsgebied . + } +} WHERE { + VALUES ?classification { + + + + } + GRAPH { + ?org org:classification ?classification ; + org:hasPrimarySite ?site . + ?site organisatie:bestaatUit ?address . + ?address adres:gemeentenaam ?municipalityName . + } + FILTER NOT EXISTS { + GRAPH { + ?org dct:spatial ?existing . + } + } + GRAPH { + ?municipality org:classification ; + skos:prefLabel ?municipalityName . + } + GRAPH { + ?municipality besluit:werkingsgebied ?werkingsgebied . + } +} diff --git a/config/migrations/2026/20260728160900-add-site-type-wijkkantoor-pz.sparql b/config/migrations/2026/20260728160900-add-site-type-wijkkantoor-pz.sparql new file mode 100644 index 0000000..9b8ecc5 --- /dev/null +++ b/config/migrations/2026/20260728160900-add-site-type-wijkkantoor-pz.sparql @@ -0,0 +1,10 @@ +INSERT DATA { + GRAPH { + . + "Wijkkantoor" . + "eeaf623d-9629-4de3-9c37-2dbb132b13d8" . + . + . + . + } +} \ No newline at end of file diff --git a/config/migrations/2026/20260804101638-cleanup-local-involvement-herne.sparql b/config/migrations/2026/20260804101638-cleanup-local-involvement-herne.sparql new file mode 100644 index 0000000..e05ae45 --- /dev/null +++ b/config/migrations/2026/20260804101638-cleanup-local-involvement-herne.sparql @@ -0,0 +1,35 @@ +DELETE WHERE { + graph { + ?p ?o. + } +} + +; + +DELETE WHERE { + graph { + . + } +} + +; + +DELETE { + GRAPH ?g { + ?localInvolvementPajottegem ?percentage. + } +} +INSERT { + GRAPH ?g { + ?localInvolvementPajottegem 100. + } +} +WHERE { + BIND( AS ?g) + GRAPH ?g { + ?localInvolvementPajottegem ?percentage. + } + VALUES ?localInvolvementPajottegem { + + } +} diff --git a/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.graph b/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.graph new file mode 100644 index 0000000..d5c0765 --- /dev/null +++ b/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.graph @@ -0,0 +1 @@ +http://mu.semte.ch/graphs/public \ No newline at end of file diff --git a/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.ttl b/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.ttl new file mode 100644 index 0000000..6c262c5 --- /dev/null +++ b/config/migrations/2026/20260805110230-cleanup-codelist-operation-areas.ttl @@ -0,0 +1,75 @@ +@prefix cleanup: . +@prefix mu: . +@prefix dcterms: . + + a cleanup:Job ; + mu:uuid "db1e677e-fc84-47b1-8204-020ce139cfbb" ; + dcterms:title "Adding new werkingsgebieden to codelist" ; + cleanup:randomQuery """ + + PREFIX besluit: + PREFIX prov: + PREFIX core: + PREFIX ext: + PREFIX skos: + PREFIX rdfs: + + INSERT { + GRAPH { + ?uri a skos:Concept ; + skos:inScheme ; + core:uuid ?uuid ; + skos:prefLabel ?label . + } + } + WHERE { + ?sub besluit:werkingsgebied ?uri . + + ?uri a prov:Location ; + core:uuid ?uuid ; + rdfs:label ?label ; + ext:werkingsgebiedNiveau "Gemeente" . + + FILTER NOT EXISTS { + ?existingConcept a skos:Concept ; + core:uuid ?uuid ; + skos:inScheme . + } + } + """ . + + a cleanup:Job ; + mu:uuid "6061ca0c-12d8-4fb7-9c24-511e21ab7e0e" ; + dcterms:title "Updating werkingsgebieden labels from codelist" ; + cleanup:randomQuery """ + + PREFIX besluit: + PREFIX prov: + PREFIX ext: + PREFIX skos: + PREFIX rdfs: + + DELETE { + GRAPH { + ?uri skos:prefLabel ?oldLabel . + } + } + INSERT { + GRAPH { + ?uri skos:prefLabel ?newLabel . + } + } + WHERE { + ?sub besluit:werkingsgebied ?uri . + + ?uri a prov:Location ; + rdfs:label ?newLabel ; + ext:werkingsgebiedNiveau "Gemeente" . + + ?uri a skos:Concept ; + skos:inScheme ; + skos:prefLabel ?oldLabel . + + FILTER(STR(?oldLabel) != STR(?newLabel)) + } + """ . \ No newline at end of file diff --git a/config/resources/domain.json b/config/resources/domain.json index f23b469..b65df7b 100644 --- a/config/resources/domain.json +++ b/config/resources/domain.json @@ -32,7 +32,10 @@ "nacebel": "http://data.gift/vocabularies/nace-bel/", "time": "http://www.w3.org/2006/time#", "muAccount": "http://mu.semte.ch/vocabularies/account/", - "sh": "http://www.w3.org/ns/shacl#" + "sh": "http://www.w3.org/ns/shacl#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "owl": "http://www.w3.org/2002/07/owl#", + "task": "http://redpencil.data.gift/vocabularies/tasks/" }, "resources": { "agents": { @@ -66,9 +69,30 @@ "first-name-used": { "type": "string", "predicate": "persoon:gebruikteVoornaam" + }, + "harvest-source": { + "type": "string", + "predicate": "prov:wasGeneratedBy" + }, + "harvest-original-uri": { + "type": "uri", + "predicate": "owl:sameAs" + }, + "harvest-date": { + "type": "datetime", + "predicate": "task:modifiedOn" + }, + "harvest-job": { + "type": "uri", + "predicate": "task:modifiedBy" } }, "relationships": { + "vendor": { + "predicate": "prov:wasAssociatedWith", + "target": "vendors", + "cardinality": "one" + }, "mandatories": { "predicate": "mandaat:isBestuurlijkeAliasVan", "target": "mandatories", @@ -101,9 +125,34 @@ "agent-end-date": { "type": "datetime", "predicate": "ch:eindedatum" + }, + "harvest-source": { + "type": "string", + "predicate": "prov:wasGeneratedBy" + }, + "harvest-original-uri": { + "type": "uri", + "predicate": "owl:sameAs" + }, + "harvest-date": { + "type": "datetime", + "predicate": "task:modifiedOn" + }, + "harvest-job": { + "type": "uri", + "predicate": "task:modifiedBy" + }, + "harvestLink": { + "type": "uri", + "predicate": "rdfs:seeAlso" } }, "relationships": { + "vendor": { + "predicate": "prov:wasAssociatedWith", + "target": "vendors", + "cardinality": "one" + }, "person": { "predicate": "org:heldBy", "target": "people", @@ -197,9 +246,30 @@ "reason-stopped": { "type": "string", "predicate": "ere:redenVanStopzetting" + }, + "harvest-source": { + "type": "string", + "predicate": "prov:wasGeneratedBy" + }, + "harvest-original-uri": { + "type": "uri", + "predicate": "owl:sameAs" + }, + "harvest-date": { + "type": "datetime", + "predicate": "task:modifiedOn" + }, + "harvest-job": { + "type": "uri", + "predicate": "task:modifiedBy" } }, "relationships": { + "vendor": { + "predicate": "prov:wasAssociatedWith", + "target": "vendors", + "cardinality": "one" + }, "type-half": { "predicate": "ere:typeHelft", "target": "half-elections", @@ -240,9 +310,30 @@ "type": { "type": "string", "predicate": "schema:contactType" + }, + "harvest-source": { + "type": "string", + "predicate": "prov:wasGeneratedBy" + }, + "harvest-original-uri": { + "type": "uri", + "predicate": "owl:sameAs" + }, + "harvest-date": { + "type": "datetime", + "predicate": "task:modifiedOn" + }, + "harvest-job": { + "type": "uri", + "predicate": "task:modifiedBy" } }, "relationships": { + "vendor": { + "predicate": "prov:wasAssociatedWith", + "target": "vendors", + "cardinality": "one" + }, "contact-address": { "predicate": "locn:address", "target": "addresses", @@ -603,6 +694,7 @@ "cardinality": "many" } }, + "features": ["include-uri"], "new-resource-base": "http://data.lblod.info/vendors/" }, "worship-services": { @@ -846,9 +938,30 @@ "address-register-uri": { "type": "url", "predicate": "adres:verwijstNaar" + }, + "harvest-source": { + "type": "string", + "predicate": "prov:wasGeneratedBy" + }, + "harvest-original-uri": { + "type": "uri", + "predicate": "owl:sameAs" + }, + "harvest-date": { + "type": "datetime", + "predicate": "task:modifiedOn" + }, + "harvest-job": { + "type": "uri", + "predicate": "task:modifiedBy" } }, "relationships": { + "vendor": { + "predicate": "prov:wasAssociatedWith", + "target": "vendors", + "cardinality": "one" + }, "source": { "predicate": "dc_terms:source", "target": "concepts", diff --git a/config/search/config.json b/config/search/config.json index 2dfb25d..a670458 100644 --- a/config/search/config.json +++ b/config/search/config.json @@ -700,7 +700,15 @@ ], "operation_area": [ "http://data.vlaanderen.be/ns/besluit#werkingsgebied", - "http://www.w3.org/2004/02/skos/core#prefLabel" + "http://www.w3.org/2000/01/rdf-schema#label" + ], + "operation_area_spatial": [ + "http://purl.org/dc/terms/spatial", + "http://www.w3.org/2000/01/rdf-schema#label" + ], + "vendor": [ + "^http://mu.semte.ch/vocabularies/account/canActOnBehalfOf", + "http://mu.semte.ch/vocabularies/core/uuid" ] }, "mappings": { @@ -821,6 +829,18 @@ "normalizer": "custom_sort_normalizer" } } + }, + "operation_area_spatial": { + "type": "keyword", + "fields": { + "field": { + "type": "keyword", + "normalizer": "custom_sort_normalizer" + } + } + }, + "vendor": { + "type": "keyword" } } } diff --git a/docker-compose.yml b/docker-compose.yml index f848133..d10cf56 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -215,7 +215,7 @@ services: restart: always logging: *default-logging frontend: - image: lblod/frontend-organization-portal:1.40.3 + image: lblod/frontend-organization-portal:1.41.0 volumes: - ./config/frontend/add-x-frame-options-header.conf:/config/add-x-frame-options.conf environment: @@ -308,7 +308,7 @@ services: restart: always logging: *default-logging construct-organization-relationships: - image: lblod/construct-organization-relationships-service:1.1.3 + image: lblod/construct-organization-relationships-service:1.1.4 links: - db:database labels: