diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d9de9e..0aaa26e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,9 @@ - Frontend [v1.41.1](https://github.com/lblod/frontend-organization-portal/blob/v1.41.1/CHANGELOG.md) [DL-7438] - Fix broken lmb mandataris mappin query [OP-3867] - Add the value politiecollege to the existing dropdown list beslissingsorgaan [DL-7473] -- Bump construct-organization-relationships [DL-7473] +- Bump construct-organization-relationships [DL-7473] [OP-3851] +- fix duplicate van rechtswege/grote helft mandates [OP-3851] + - IMPORTANT NOTE: Make sure first the loket migration has completed + data has flown from loket to OP ### Deploy notes ``` diff --git a/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql b/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql new file mode 100644 index 0000000..b1581f6 --- /dev/null +++ b/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql @@ -0,0 +1,45 @@ +# Delete duplicate van rechtswege mandaten per governing body +# Must be run AFTER the corresponding loket migration + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: + +DELETE { + GRAPH { + ?orgaanInTime org:hasPost ?mandaat . + ?mandaat ?p ?o . + } +} +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?canonicalMandaat . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + org:hasPost ?mandaat . + ?mandaat org:role ; + ?p ?o . + + FILTER NOT EXISTS { ?holder org:holds ?mandaat . } + } + + { + SELECT ?orgaan (IRI(MIN(STR(?anyMandaat))) AS ?canonicalMandaat) WHERE { + GRAPH { + ?anyOrgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + org:hasPost ?anyMandaat . + ?anyMandaat org:role . + } + } + GROUP BY ?orgaan + } + + FILTER(?mandaat != ?canonicalMandaat) +} diff --git a/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql b/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql new file mode 100644 index 0000000..8844989 --- /dev/null +++ b/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql @@ -0,0 +1,65 @@ +# Delete duplicate grote helft mandaten within a single election cycle period +# Must be run AFTER the corresponding loket migration + +PREFIX ere: +PREFIX besluit: +PREFIX org: +PREFIX mandaat: +PREFIX generiek: + +DELETE { + GRAPH { + ?orgaanInTime org:hasPost ?mandaat . + ?mandaat ?p ?o . + } +} +INSERT { + GRAPH { + ?orgaanInTime org:hasPost ?canonicalMandaat . + } +} +WHERE { + GRAPH { + ?worshipService a ere:BestuurVanDeEredienst . + ?orgaan besluit:bestuurt ?worshipService . + ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?start ; + org:hasPost ?mandaat . + ?mandaat org:role ; + ?p ?o . + + FILTER NOT EXISTS { ?holder org:holds ?mandaat . } + } + + BIND(YEAR(?start) AS ?startYear) + VALUES (?startYear ?pairIndex) { + (2017 0) + (2020 1) + (2023 1) + (2026 2) + (2029 2) + } + + { + SELECT ?orgaan ?pairIndex (IRI(MIN(STR(?anyMandaat))) AS ?canonicalMandaat) WHERE { + GRAPH { + ?anyOrgaanInTime generiek:isTijdspecialisatieVan ?orgaan ; + mandaat:bindingStart ?anyStart ; + org:hasPost ?anyMandaat . + ?anyMandaat org:role . + } + + BIND(YEAR(?anyStart) AS ?anyStartYear) + VALUES (?anyStartYear ?pairIndex) { + (2017 0) + (2020 1) + (2023 1) + (2026 2) + (2029 2) + } + } + GROUP BY ?orgaan ?pairIndex + } + + FILTER(?mandaat != ?canonicalMandaat) +}