Merge branch 'development' into DL-7485-restrict-imam-roles-based-on-worship-status

# Conflicts:
#	CHANGELOG.md
This commit is contained in:
Damon
2026-08-07 16:36:20 +02:00
17 changed files with 413 additions and 10 deletions

View File

@@ -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]

View File

@@ -7,7 +7,12 @@ CONSTRUCT {
FILTER (?p IN (
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>,
<http://mu.semte.ch/vocabularies/core/uuid>,
<http://xmlns.com/foaf/0.1/familyName>
<http://xmlns.com/foaf/0.1/familyName>,
<http://www.w3.org/2002/07/owl#sameAs>,
<http://www.w3.org/ns/prov#wasGeneratedBy>,
<http://www.w3.org/ns/prov#wasAssociatedWith>,
<http://redpencil.data.gift/vocabularies/tasks/modifiedOn>,
<http://redpencil.data.gift/vocabularies/tasks/modifiedBy>
))
FILTER NOT EXISTS {

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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
###############################################################

View File

@@ -0,0 +1,25 @@
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX scheme: <http://data.vlaanderen.be/id/conceptscheme/>
INSERT DATA {
GRAPH <http://mu.semte.ch/graphs/public> {
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/e3afe092-6ca6-4685-94c6-1ee20811efc4>
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 , <http://lblod.data.gift/concept-schemes/10caf4a4-1ff5-4c05-917e-56489910d68b> .
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/7a199d27-31c3-44bb-a58f-b3a64673a8b6>
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 , <http://lblod.data.gift/concept-schemes/10caf4a4-1ff5-4c05-917e-56489910d68b> .
}
}

View File

@@ -0,0 +1,24 @@
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ext: <http://mu.semte.ch/vocabularies/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 <http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/7a199d27-31c3-44bb-a58f-b3a64673a8b6> . }
}
WHERE {
VALUES ?g {
<http://mu.semte.ch/graphs/administrative-unit>
<http://mu.semte.ch/graphs/shared>
<http://mu.semte.ch/graphs/worship-service>
}
VALUES ?legacy {
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/3e5c8e30-95a7-47b0-b0a4-210d5bd440a7>
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/b9ed22af-3661-4c3e-b07f-b641d80ebf61>
}
GRAPH ?g { ?org org:classification ?legacy . }
}

View File

@@ -0,0 +1,13 @@
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
DELETE {
GRAPH <http://mu.semte.ch/graphs/public> { ?code ?p ?o . }
}
WHERE {
VALUES ?code {
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/3e5c8e30-95a7-47b0-b0a4-210d5bd440a7>
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/b9ed22af-3661-4c3e-b07f-b641d80ebf61>
}
GRAPH <http://mu.semte.ch/graphs/public> { ?code ?p ?o . }
}

View File

@@ -0,0 +1,36 @@
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX organisatie: <https://data.vlaanderen.be/ns/organisatie#>
PREFIX adres: <https://data.vlaanderen.be/ns/adres#>
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX dct: <http://purl.org/dc/terms/>
INSERT {
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
?org dct:spatial ?werkingsgebied .
}
} WHERE {
VALUES ?classification {
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/82250452-83a0-48f4-89cc-b430320493ce>
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/35833ba2-7371-400b-8df2-2912f66fb153>
<http://data.vlaanderen.be/id/concept/GeregistreerdeOrganisatieClassificatieCode/82fd21dc-e8bb-4d13-a010-f4a12358ef10>
}
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
?org org:classification ?classification ;
org:hasPrimarySite ?site .
?site organisatie:bestaatUit ?address .
?address adres:gemeentenaam ?municipalityName .
}
FILTER NOT EXISTS {
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
?org dct:spatial ?existing .
}
}
GRAPH <http://mu.semte.ch/graphs/shared> {
?municipality org:classification <http://data.vlaanderen.be/id/concept/BestuurseenheidClassificatieCode/5ab0e9b8a3b2ca7c5e000001> ;
skos:prefLabel ?municipalityName .
}
GRAPH <http://mu.semte.ch/graphs/administrative-unit> {
?municipality besluit:werkingsgebied ?werkingsgebied .
}
}

View File

@@ -0,0 +1,10 @@
INSERT DATA {
GRAPH <http://mu.semte.ch/graphs/public> {
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://lblod.data.gift/vocabularies/organisatie/TypeVestiging> .
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://www.w3.org/2004/02/skos/core#prefLabel> "Wijkkantoor" .
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://mu.semte.ch/vocabularies/core/uuid> "eeaf623d-9629-4de3-9c37-2dbb132b13d8" .
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://www.w3.org/2004/02/skos/core#topConceptOf> <http://lblod.data.gift/concept-schemes/f8319ccf40fc2a1697edc5cf7e03018f> .
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://www.w3.org/2004/02/skos/core#inScheme> <http://lblod.data.gift/concept-schemes/f8319ccf40fc2a1697edc5cf7e03018f> .
<http://lblod.data.gift/concepts/eeaf623d-9629-4de3-9c37-2dbb132b13d8> <http://www.w3.org/2004/02/skos/core#inScheme> <http://lblod.data.gift/concept-schemes/10caf4a4-1ff5-4c05-917e-56489910d68b> .
}
}

View File

@@ -0,0 +1,35 @@
DELETE WHERE {
graph <http://mu.semte.ch/graphs/worship-service> {
<http://data.lblod.info/id/betrokkenLokaleBesturen/6187e2d787cc954587dd7dce215e96b5> ?p ?o.
}
}
;
DELETE WHERE {
graph <http://mu.semte.ch/graphs/worship-service> {
<http://data.lblod.info/id/bestuurseenheden/73840d393bd94828f0903e8357c7f328d4bf4b8fbd63adbfa443e784f056a589> <http://data.lblod.info/vocabularies/erediensten/betrokkenBestuur> <http://data.lblod.info/id/betrokkenLokaleBesturen/6187e2d787cc954587dd7dce215e96b5>.
}
}
;
DELETE {
GRAPH ?g {
?localInvolvementPajottegem <http://data.lblod.info/vocabularies/erediensten/financieringspercentage> ?percentage.
}
}
INSERT {
GRAPH ?g {
?localInvolvementPajottegem <http://data.lblod.info/vocabularies/erediensten/financieringspercentage> 100.
}
}
WHERE {
BIND(<http://mu.semte.ch/graphs/worship-service> AS ?g)
GRAPH ?g {
?localInvolvementPajottegem <http://data.lblod.info/vocabularies/erediensten/financieringspercentage> ?percentage.
}
VALUES ?localInvolvementPajottegem {
<http://data.lblod.info/id/betrokkenLokaleBesturen/58bfe3f61f5a661383a5db8502994210>
}
}

View File

@@ -0,0 +1 @@
http://mu.semte.ch/graphs/public

View File

@@ -0,0 +1,75 @@
@prefix cleanup: <http://mu.semte.ch/vocabularies/ext/cleanup/> .
@prefix mu: <http://mu.semte.ch/vocabularies/core/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
<http://data.lblod.info/id/cleanup-job/db1e677e-fc84-47b1-8204-020ce139cfbb> a cleanup:Job ;
mu:uuid "db1e677e-fc84-47b1-8204-020ce139cfbb" ;
dcterms:title "Adding new werkingsgebieden to codelist" ;
cleanup:randomQuery """
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX prov: <http://www.w3.org/ns/prov#>
PREFIX core: <http://mu.semte.ch/vocabularies/core/>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
INSERT {
GRAPH <http://mu.semte.ch/graphs/public> {
?uri a skos:Concept ;
skos:inScheme <http://lblod.data.gift/concept-schemes/3307738e-f84d-4f95-9b14-3e9162d83394> ;
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 <http://lblod.data.gift/concept-schemes/3307738e-f84d-4f95-9b14-3e9162d83394> .
}
}
""" .
<http://data.lblod.info/id/cleanup-job/6061ca0c-12d8-4fb7-9c24-511e21ab7e0e> a cleanup:Job ;
mu:uuid "6061ca0c-12d8-4fb7-9c24-511e21ab7e0e" ;
dcterms:title "Updating werkingsgebieden labels from codelist" ;
cleanup:randomQuery """
PREFIX besluit: <http://data.vlaanderen.be/ns/besluit#>
PREFIX prov: <http://www.w3.org/ns/prov#>
PREFIX ext: <http://mu.semte.ch/vocabularies/ext/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
DELETE {
GRAPH <http://mu.semte.ch/graphs/public> {
?uri skos:prefLabel ?oldLabel .
}
}
INSERT {
GRAPH <http://mu.semte.ch/graphs/public> {
?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 <http://lblod.data.gift/concept-schemes/3307738e-f84d-4f95-9b14-3e9162d83394> ;
skos:prefLabel ?oldLabel .
FILTER(STR(?oldLabel) != STR(?newLabel))
}
""" .

View File

@@ -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",

View File

@@ -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"
}
}
}

View File

@@ -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: