diff --git a/CHANGELOG.md b/CHANGELOG.md index 55c2727..cff6b9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ - 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] + - IMPORTANT NOTE: Make sure first the [DL-7485] loket migration has completed + data has flown from loket to OP ### Deploy notes ``` @@ -61,6 +63,10 @@ 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] diff --git a/config/delta-producer/public/export.json b/config/delta-producer/public/export.json index ca34f41..f6c6c00 100644 --- a/config/delta-producer/public/export.json +++ b/config/delta-producer/public/export.json @@ -535,7 +535,8 @@ ], "properties": [ "http://mu.semte.ch/vocabularies/core/uuid", - "http://www.w3.org/2004/02/skos/core#prefLabel" + "http://www.w3.org/2004/02/skos/core#prefLabel", + "http://data.lblod.info/vocabularies/erediensten/vanToepassingBijStatus" ] }, { diff --git a/config/migrations/2026/20260720100000-fix-islam-imam-roles-by-status.sparql b/config/migrations/2026/20260720100000-fix-islam-imam-roles-by-status.sparql new file mode 100644 index 0000000..a2b5d1b --- /dev/null +++ b/config/migrations/2026/20260720100000-fix-islam-imam-roles-by-status.sparql @@ -0,0 +1,72 @@ +PREFIX ere: +PREFIX mu: +PREFIX org: + +# Deduplicate islamitisch minister positions: if an eredienstbestuur has more +# than one position for the same function (e.g. 2 "Waarnemende Imam"), keep +# only one - deterministically the lowest-URI position - and drop the rest +DELETE { + GRAPH { + ?worshipService ere:wordtBediendDoor ?position . + ?position ?p ?o . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst ; + ere:typeEredienst ; # Islamitisch + ere:wordtBediendDoor ?position . + + ?position ?p ?o ; + ere:functie ?functie . + + { + SELECT ?worshipService ?functie (IRI(MIN(STR(?anyPosition))) AS ?keptPosition) WHERE { + GRAPH { + ?worshipService ere:wordtBediendDoor ?anyPosition . + ?anyPosition ere:functie ?functie . + } + } + GROUP BY ?worshipService ?functie + } + + FILTER(?position != ?keptPosition) + FILTER NOT EXISTS { ?anyMinister org:holds ?position } + } +} +; + +# Create any of the 4 islamitisch minister positions (Waarnemende Imam, Eerste/ +# Tweede/Derde Imam in rang) that a worship service is missing, so every +# islamitisch eredienstbestuur always has all 4 positions, regardless of its +# current status. +INSERT { + GRAPH { + ?worshipService ere:wordtBediendDoor ?newMinisterPosition . + + ?newMinisterPosition a org:Post , ere:PositieBedienaar ; + mu:uuid ?uuidNewMinisterPosition ; + ere:functie ?functie . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst ; + ere:typeEredienst . # Islamitisch + + VALUES ?functie { + # Waarnemende Imam + # Eerste Imam in rang + # Tweede Imam in rang + # Derde Imam in rang + } + + FILTER NOT EXISTS { + ?worshipService ere:wordtBediendDoor ?ministerPosition . + ?ministerPosition ere:functie ?functie . + } + + BIND(MD5(CONCAT(?worshipService, ?functie, "fix-islam-imam-roles-by-status")) as ?uuidNewMinisterPosition) + BIND(IRI(CONCAT("http://data.lblod.info/id/positiesBedienaar/", ?uuidNewMinisterPosition)) AS ?newMinisterPosition) + } +} diff --git a/config/migrations/2026/20260804090000-add-applicable-statuses-to-islam-minister-functions.sparql b/config/migrations/2026/20260804090000-add-applicable-statuses-to-islam-minister-functions.sparql new file mode 100644 index 0000000..ed696a8 --- /dev/null +++ b/config/migrations/2026/20260804090000-add-applicable-statuses-to-islam-minister-functions.sparql @@ -0,0 +1,17 @@ +PREFIX ere: + +INSERT DATA { + GRAPH { + # Waarnemende Imam + ere:vanToepassingBijStatus . # In Oprichting + + # Eerste Imam in rang + ere:vanToepassingBijStatus . # Actief + + # Tweede Imam in rang + ere:vanToepassingBijStatus . # Actief + + # Derde Imam in rang + ere:vanToepassingBijStatus . # Actief + } +} diff --git a/config/resources/domain.json b/config/resources/domain.json index 545b4de..b65df7b 100644 --- a/config/resources/domain.json +++ b/config/resources/domain.json @@ -1263,6 +1263,13 @@ "predicate": "skos:prefLabel" } }, + "relationships": { + "applicable-statuses": { + "predicate": "ere:vanToepassingBijStatus", + "target": "organization-status-codes", + "cardinality": "many" + } + }, "new-resource-base": "http://lblod.data.gift/concepts/" }, "financing-codes": {