diff --git a/CHANGELOG.md b/CHANGELOG.md index 5beca2b..e9046e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Add column to query organizations in Dashboard [OP-3758] - Query list change events of organisations in Dashboard [OP-3760] - Disable SPARQL endpoint +- Prepare worship election period: backfill missing 2026-2029 governing bodies + mandates, seed fresh 2029-2032 period, and clean up `hhttp://` Secretaris typo from the 2022 central-worship migrations ### Deploy notes ``` diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100100-create-missing-organen-in-time-2026-2029.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100100-create-missing-organen-in-time-2026-2029.sparql new file mode 100644 index 0000000..21a0894 --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100100-create-missing-organen-in-time-2026-2029.sparql @@ -0,0 +1,48 @@ +PREFIX mandaat: +PREFIX ere: +PREFIX besluit: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: +PREFIX regorg: + +INSERT { + GRAPH { + ?orgaanInTime a besluit:Bestuursorgaan ; + mu:uuid ?uuidOrgaanInTime ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime ; + generiek:isTijdspecialisatieVan ?bestuursorgaan . + } +} +WHERE { + GRAPH { + VALUES ?type { + ere:BestuurVanDeEredienst + ere:CentraalBestuurVanDeEredienst + } + + ?bestuurseenheid a ?type . + + FILTER NOT EXISTS { + ?bestuurseenheid regorg:orgStatus . + } + + ?bestuursorgaan besluit:bestuurt ?bestuurseenheid . + + FILTER NOT EXISTS { + ?missingOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + ?missingOrgaanInTime mandaat:bindingStart ?start . + FILTER CONTAINS(STR(?start), "2026") + } + + FILTER NOT EXISTS { + ?missingOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + ?missingOrgaanInTime mandaat:bindingEinde ?end . + FILTER CONTAINS(STR(?end), "2029") + } + } + + BIND(MD5(CONCAT(?bestuurseenheid, ?bestuursorgaan, "2026-2029")) as ?uuidOrgaanInTime) + BIND(IRI(CONCAT("http://data.lblod.info/id/bestuursorganen/", ?uuidOrgaanInTime)) AS ?orgaanInTime) +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100200-create-missing-positions-worship-services-2026-2029.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100200-create-missing-positions-worship-services-2026-2029.sparql new file mode 100644 index 0000000..961a781 --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100200-create-missing-positions-worship-services-2026-2029.sparql @@ -0,0 +1,187 @@ +# Add missing mandates to worship services for period 2026-2029 + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: + +## Case LidVanRechtswege : shared mandate for all the organen in time + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?lidVanRechtswege . + + ?lidVanRechtswege a mandaat:Mandaat ; + mu:uuid ?uuidLidVanRechtswege ; + org:role . + } +} WHERE { + GRAPH { + VALUES (?start ?end) { + ("2026-04-01T00:00:00"^^xsd:dateTime "2029-03-31T00:00:00"^^xsd:dateTime) + } + + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?start ; + mandaat:bindingEinde ?end . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?lidVanRechtswege . + ?lidVanRechtswege org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Rechtswege")) as ?uuidLidVanRechtswege) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidLidVanRechtswege)) AS ?lidVanRechtswege) +} + +## Case Bestuursleden, small or big half : 2026 is the beginning of a GH + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslidGH . + + ?bestuurslidGH a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslidGH ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslidGH . + ?bestuurslidGH org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "BestuurslidGH 2026-2032")) as ?uuidBestuurslidGH) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslidGH)) AS ?bestuurslidGH) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslidKH . + + ?bestuurslidKH a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslidKH ; + org:role . + } +} WHERE { + GRAPH { + VALUES (?start ?end) { + ("2026-04-01T00:00:00"^^xsd:dateTime "2029-03-31T00:00:00"^^xsd:dateTime) + } + + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?start ; + mandaat:bindingEinde ?end . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslidKH . + ?bestuurslidKH org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "BestuurslidKH 2023-2029")) as ?uuidBestuurslidKH) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslidKH)) AS ?bestuurslidKH) +} + +; + +## Other cases are simpler, one mandate is linked to only one orgaan in time. Creating them when missing. + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?voorzitter . + + ?voorzitter a mandaat:Mandaat ; + mu:uuid ?uuidVoorzitter ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?voorzitter . + ?voorzitter org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Voorzitter 2026-2029")) as ?uuidVoorzitter) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVoorzitter)) AS ?voorzitter) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?secretaris . + + ?secretaris a mandaat:Mandaat ; + mu:uuid ?uuidSecretaris ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?secretaris . + ?secretaris org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Secretaris 2026-2029")) as ?uuidSecretaris) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidSecretaris)) AS ?secretaris) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?penningmeester . + + ?penningmeester a mandaat:Mandaat ; + mu:uuid ?uuidPenningmeester ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?penningmeester . + ?penningmeester org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Penningmeester 2026-2029")) as ?uuidPenningmeester) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidPenningmeester)) AS ?penningmeester) +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100300-create-missing-positions-central-worship-services-2026-2029.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100300-create-missing-positions-central-worship-services-2026-2029.sparql new file mode 100644 index 0000000..4499a7c --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100300-create-missing-positions-central-worship-services-2026-2029.sparql @@ -0,0 +1,154 @@ +# Add missing mandates to central worship services + +## 2026 - 2029 + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: +PREFIX regorg: + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?expert . + + ?expert a mandaat:Mandaat ; + mu:uuid ?uuidExpert ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?expert . + ?expert org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Expert 2026-2029")) as ?uuidExpert) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidExpert)) AS ?expert) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?vertegenwoordiger . + + ?vertegenwoordiger a mandaat:Mandaat ; + mu:uuid ?uuidVertegenwoordiger ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?vertegenwoordiger . + ?vertegenwoordiger org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Vertegenwoordiger 2026-2029")) as ?uuidVertegenwoordiger) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVertegenwoordiger)) AS ?vertegenwoordiger) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?secretaris . + + ?secretaris a mandaat:Mandaat ; + mu:uuid ?uuidSecretaris ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?secretaris . + ?secretaris org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Secretaris 2026-2029")) as ?uuidSecretaris) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidSecretaris)) AS ?secretaris) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?voorzitter . + + ?voorzitter a mandaat:Mandaat ; + mu:uuid ?uuidVoorzitter ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?voorzitter . + ?voorzitter org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Voorzitter 2026-2029")) as ?uuidVoorzitter) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVoorzitter)) AS ?voorzitter) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslid . + + ?bestuurslid a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslid ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2026-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2029-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?worshipService regorg:orgStatus . + } + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslid . + ?bestuurslid org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Bestuurslid 2026-2029")) as ?uuidBestuurslid) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslid)) AS ?bestuurslid) +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100400-cleanup-malformed-hhttp-secretaris-role.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100400-cleanup-malformed-hhttp-secretaris-role.sparql new file mode 100644 index 0000000..d0b8d65 --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100400-cleanup-malformed-hhttp-secretaris-role.sparql @@ -0,0 +1,19 @@ +# Cleanup leftover `hhttp://` malformed Secretaris org:role triples introduced by +# the 2022 migrations `20220929092641-create-central-worship-organen-2023-2026.sparql` +# and `20220929104939-create-central-worship-organen-2026-2029.sparql` (line 31). +# +# By this point migration C (20260420100300) has already inserted the correct +# Secretaris `org:role` triple on the same mandate IRI, so removing the malformed +# one leaves each central-worship Secretaris mandate with exactly one valid role. + +PREFIX org: + +DELETE { + GRAPH { + ?s org:role . + } +} WHERE { + GRAPH { + ?s org:role . + } +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100500-create-organen-in-time-2029-2032.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100500-create-organen-in-time-2029-2032.sparql new file mode 100644 index 0000000..c8f580d --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100500-create-organen-in-time-2029-2032.sparql @@ -0,0 +1,48 @@ +PREFIX mandaat: +PREFIX ere: +PREFIX besluit: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: +PREFIX regorg: + +INSERT { + GRAPH { + ?orgaanInTime a besluit:Bestuursorgaan ; + mu:uuid ?uuidOrgaanInTime ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime ; + generiek:isTijdspecialisatieVan ?bestuursorgaan . + } +} +WHERE { + GRAPH { + VALUES ?type { + ere:BestuurVanDeEredienst + ere:CentraalBestuurVanDeEredienst + } + + ?bestuurseenheid a ?type . + + FILTER NOT EXISTS { + ?bestuurseenheid regorg:orgStatus . + } + + ?bestuursorgaan besluit:bestuurt ?bestuurseenheid . + + FILTER NOT EXISTS { + ?missingOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + ?missingOrgaanInTime mandaat:bindingStart ?start . + FILTER CONTAINS(STR(?start), "2029") + } + + FILTER NOT EXISTS { + ?missingOrgaanInTime generiek:isTijdspecialisatieVan ?bestuursorgaan . + ?missingOrgaanInTime mandaat:bindingEinde ?end . + FILTER CONTAINS(STR(?end), "2032") + } + } + + BIND(MD5(CONCAT(?bestuurseenheid, ?bestuursorgaan, "2029-2032")) as ?uuidOrgaanInTime) + BIND(IRI(CONCAT("http://data.lblod.info/id/bestuursorganen/", ?uuidOrgaanInTime)) AS ?orgaanInTime) +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100600-create-positions-worship-services-2029-2032.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100600-create-positions-worship-services-2029-2032.sparql new file mode 100644 index 0000000..b49b76b --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100600-create-positions-worship-services-2029-2032.sparql @@ -0,0 +1,187 @@ +# Create mandates for worship services for period 2029-2032 + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: + +## Case LidVanRechtswege : shared mandate for all the organen in time + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?lidVanRechtswege . + + ?lidVanRechtswege a mandaat:Mandaat ; + mu:uuid ?uuidLidVanRechtswege ; + org:role . + } +} WHERE { + GRAPH { + VALUES (?start ?end) { + ("2029-04-01T00:00:00"^^xsd:dateTime "2032-03-31T00:00:00"^^xsd:dateTime) + } + + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?start ; + mandaat:bindingEinde ?end . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?lidVanRechtswege . + ?lidVanRechtswege org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Rechtswege")) as ?uuidLidVanRechtswege) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidLidVanRechtswege)) AS ?lidVanRechtswege) +} + +## Case Bestuursleden, small or big half : 2029 is the beginning of a KH (cycle 2029-2035); GH continues its 2026-2032 cycle. + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslidGH . + + ?bestuurslidGH a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslidGH ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslidGH . + ?bestuurslidGH org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "BestuurslidGH 2026-2032")) as ?uuidBestuurslidGH) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslidGH)) AS ?bestuurslidGH) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslidKH . + + ?bestuurslidKH a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslidKH ; + org:role . + } +} WHERE { + GRAPH { + VALUES (?start ?end) { + ("2029-04-01T00:00:00"^^xsd:dateTime "2032-03-31T00:00:00"^^xsd:dateTime) + } + + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?start ; + mandaat:bindingEinde ?end . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslidKH . + ?bestuurslidKH org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "BestuurslidKH 2029-2035")) as ?uuidBestuurslidKH) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslidKH)) AS ?bestuurslidKH) +} + +; + +## Other cases are simpler, one mandate is linked to only one orgaan in time. Creating them when missing. + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?voorzitter . + + ?voorzitter a mandaat:Mandaat ; + mu:uuid ?uuidVoorzitter ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?voorzitter . + ?voorzitter org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Voorzitter 2029-2032")) as ?uuidVoorzitter) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVoorzitter)) AS ?voorzitter) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?secretaris . + + ?secretaris a mandaat:Mandaat ; + mu:uuid ?uuidSecretaris ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?secretaris . + ?secretaris org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Secretaris 2029-2032")) as ?uuidSecretaris) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidSecretaris)) AS ?secretaris) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?penningmeester . + + ?penningmeester a mandaat:Mandaat ; + mu:uuid ?uuidPenningmeester ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?penningmeester . + ?penningmeester org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Penningmeester 2029-2032")) as ?uuidPenningmeester) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidPenningmeester)) AS ?penningmeester) +} diff --git a/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100700-create-positions-central-worship-services-2029-2032.sparql b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100700-create-positions-central-worship-services-2029-2032.sparql new file mode 100644 index 0000000..e347397 --- /dev/null +++ b/config/migrations/2026/20260420100000-prepare-worship-election-period-2026/20260420100700-create-positions-central-worship-services-2029-2032.sparql @@ -0,0 +1,154 @@ +# Create mandates for central worship services + +## 2029 - 2032 + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: +PREFIX mu: +PREFIX xsd: +PREFIX regorg: + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?expert . + + ?expert a mandaat:Mandaat ; + mu:uuid ?uuidExpert ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?expert . + ?expert org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Expert 2029-2032")) as ?uuidExpert) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidExpert)) AS ?expert) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?vertegenwoordiger . + + ?vertegenwoordiger a mandaat:Mandaat ; + mu:uuid ?uuidVertegenwoordiger ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?vertegenwoordiger . + ?vertegenwoordiger org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Vertegenwoordiger 2029-2032")) as ?uuidVertegenwoordiger) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVertegenwoordiger)) AS ?vertegenwoordiger) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?secretaris . + + ?secretaris a mandaat:Mandaat ; + mu:uuid ?uuidSecretaris ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?secretaris . + ?secretaris org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Secretaris 2029-2032")) as ?uuidSecretaris) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidSecretaris)) AS ?secretaris) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?voorzitter . + + ?voorzitter a mandaat:Mandaat ; + mu:uuid ?uuidVoorzitter ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?voorzitter . + ?voorzitter org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Voorzitter 2029-2032")) as ?uuidVoorzitter) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidVoorzitter)) AS ?voorzitter) +} + +; + +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?bestuurslid . + + ?bestuurslid a mandaat:Mandaat ; + mu:uuid ?uuidBestuurslid ; + org:role . + } +} WHERE { + GRAPH { + ?worshipService a ere:CentraalBestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart "2029-04-01T00:00:00"^^xsd:dateTime ; + mandaat:bindingEinde "2032-03-31T00:00:00"^^xsd:dateTime . + + FILTER NOT EXISTS { + ?worshipService regorg:orgStatus . + } + + FILTER NOT EXISTS { + ?orgaanInTime org:hasPost ?bestuurslid . + ?bestuurslid org:role . + } + } + + BIND(MD5(CONCAT(?worshipService, ?orgaan, "Bestuurslid 2029-2032")) as ?uuidBestuurslid) + BIND(IRI(CONCAT("http://data.lblod.info/id/mandaten/", ?uuidBestuurslid)) AS ?bestuurslid) +}