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": {