From 68b5c67a16a848cb64daa54816b13aef02671980 Mon Sep 17 00:00:00 2001 From: Nordine Bittich <3816305+nbittich@users.noreply.github.com> Date: Mon, 15 May 2023 18:16:54 +0200 Subject: [PATCH] Fix/limit positions to types we already onboarded rebased (#278) * rebased * Fix n3q query for mandatarissen --------- Co-authored-by: Claire Lovisa --- .../delta-context-config.js | 65 ++++++++++- .../delta-context-config.js | 65 ++++++++++- ...e-not-yet-onboarded-functionarissen.sparql | 21 ++++ config/reasoner/dl2op/main/query.n3q | 102 ++++++++++++++++++ docker-compose.yml | 2 +- 5 files changed, 250 insertions(+), 5 deletions(-) create mode 100644 config/migrations/2023/20230515111900-remove-not-yet-onboarded-functionarissen.sparql diff --git a/config/loket-consumer/leidinggevenden-dispatching/delta-context-config.js b/config/loket-consumer/leidinggevenden-dispatching/delta-context-config.js index a8df81cc..973462f0 100644 --- a/config/loket-consumer/leidinggevenden-dispatching/delta-context-config.js +++ b/config/loket-consumer/leidinggevenden-dispatching/delta-context-config.js @@ -1,11 +1,72 @@ + +const PREFIXES = ` +PREFIX org: +PREFIX mandaat: +PREFIX lblodlg: +PREFIX besluit: ` + const contextConfig = { addTypes: { scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta }, - contextQueries: [] + contextQueries: [ + // Case Leidnggevenden + // They can be triggered when being inserted or when their link to a bestuursfunctie is added + { + trigger: { // subjectType or predicateValue + subjectType: "lblodlg:Functionaris" + }, + queryTemplate: (subject) => ` + ${PREFIXES} + CONSTRUCT { + ?functionaris org:holds ?bestuursfunctie ; + ?p ?o . + ?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } WHERE { + GRAPH { + VALUES ?functionaris { ${subject} } + ?functionaris org:holds ?bestuursfunctie ; + ?p ?o . + ?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } + }` + }, + { + trigger: { + predicateValue: "org:holds" + }, + queryTemplate: (subject) => ` + ${PREFIXES} + CONSTRUCT { + ?functionaris org:holds ?bestuursfunctie ; + ?p ?o . + ?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } WHERE { + GRAPH { + VALUES ?functionaris { ${subject} } + ?functionaris org:holds ?bestuursfunctie ; + ?p ?o . + ?orgaanInTime lblodlg:heeftBestuursfunctie ?bestuursfunctie ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } + }` + } + ] } module.exports = { - contextConfig + contextConfig, + PREFIXES }; diff --git a/config/loket-consumer/mandatarissen-dispatching/delta-context-config.js b/config/loket-consumer/mandatarissen-dispatching/delta-context-config.js index a8df81cc..c32c2a9a 100644 --- a/config/loket-consumer/mandatarissen-dispatching/delta-context-config.js +++ b/config/loket-consumer/mandatarissen-dispatching/delta-context-config.js @@ -1,11 +1,72 @@ + +const PREFIXES = ` +PREFIX org: +PREFIX mandaat: +PREFIX lblodlg: +PREFIX besluit: ` + const contextConfig = { addTypes: { scope: 'all', // 'inserts, 'deletes', 'all' or none. To add rdf:type to subjects of inserts, deletes or both exhausitive: false, // true or false: find all types for a subject, even if one is already present in delta }, - contextQueries: [] + contextQueries: [ + // Case Mandatarissen + // They can be triggered when being inserted or when their link to a mandate is added + { + trigger: { // subjectType or predicateValue + subjectType: "mandaat:Mandataris" + }, + queryTemplate: (subject) => ` + ${PREFIXES} + CONSTRUCT { + ?mandataris org:holds ?mandate ; + ?p ?o . + ?orgaanInTime org:hasPost ?mandate ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } WHERE { + GRAPH { + VALUES ?mandataris { ${subject} } + ?mandataris org:holds ?mandate ; + ?p ?o . + ?orgaanInTime org:hasPost ?mandate ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } + }` + }, + { + trigger: { + predicateValue: "org:holds" + }, + queryTemplate: (subject) => ` + ${PREFIXES} + CONSTRUCT { + ?mandataris org:holds ?mandate ; + ?p ?o . + ?orgaanInTime org:hasPost ?mandate ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } WHERE { + GRAPH { + VALUES ?mandataris { ${subject} } + ?mandataris org:holds ?mandate ; + ?p ?o . + ?orgaanInTime org:hasPost ?mandate ; + mandaat:isTijdspecialisatieVan ?orgaan . + ?orgaan besluit:bestuurt ?eenheid . + ?eenheid besluit:classificatie ?classification . + } + }` + } + ] } module.exports = { - contextConfig + contextConfig, + PREFIXES }; diff --git a/config/migrations/2023/20230515111900-remove-not-yet-onboarded-functionarissen.sparql b/config/migrations/2023/20230515111900-remove-not-yet-onboarded-functionarissen.sparql new file mode 100644 index 00000000..a3ee318a --- /dev/null +++ b/config/migrations/2023/20230515111900-remove-not-yet-onboarded-functionarissen.sparql @@ -0,0 +1,21 @@ +DELETE { + GRAPH { + ?functionaris ?pfunctionaris ?ofunctionaris . + } +} WHERE { + GRAPH { + ?functionaris a ; + ?bestuursfunctie ; + ?pfunctionaris ?ofunctionaris . + } + + ?orgaan ?bestuursfunctie ; + // ?classification . + + FILTER(?classification NOT IN ( + , + , + , + + )) +} diff --git a/config/reasoner/dl2op/main/query.n3q b/config/reasoner/dl2op/main/query.n3q index ed0415d2..5998591e 100644 --- a/config/reasoner/dl2op/main/query.n3q +++ b/config/reasoner/dl2op/main/query.n3q @@ -1,5 +1,7 @@ # Filtering classes to ingest +@prefix log: . + { ?s a ; ?p ?o . @@ -24,17 +26,117 @@ ?p ?o . }. +# Functionarissen should be linked to a gemeente, district, provincie or ocmw only (FOR NOW) + +{ + ?s a ; + ?bestuursfunctie ; + ?p ?o . + + ?orgaanInTime ?bestuursfunctie ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { + ?s a ; + ?p ?o . +}. + +{ + ?s a ; + ?bestuursfunctie ; + ?p ?o . + + ?orgaanInTime ?bestuursfunctie ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { + ?s a ; + ?p ?o . +}. + { ?s a ; + ?bestuursfunctie ; ?p ?o . + + ?orgaanInTime ?bestuursfunctie ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . } => { ?s a ; ?p ?o . }. { + ?s a ; + ?bestuursfunctie ; + ?p ?o . + + ?orgaanInTime ?bestuursfunctie ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { + ?s a ; + ?p ?o . +}. + +# Mandatarissen should be linked to a gemeente, district, provincie or ocmw only (FOR NOW) + +{ + ?s a ; + ?mandate ; + ?p ?o . + + ?orgaanInTime ?mandate ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { ?s a ; ?p ?o . +}. + +{ + ?s a ; + ?mandate ; + ?p ?o . + + ?orgaanInTime ?mandate ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { + ?s a ; + ?p ?o . +}. + +{ + ?s a ; + ?mandate ; + ?p ?o . + + ?orgaanInTime ?mandate ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . + } => { + ?s a ; + ?p ?o . +}. + +{ + ?s a ; + ?mandate ; + ?p ?o . + + ?orgaanInTime ?mandate ; + ?orgaan . + ?orgaan ?bestuur . + ?bestuur . } => { ?s a ; ?p ?o . diff --git a/docker-compose.yml b/docker-compose.yml index 93e3509f..91018bfa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -228,7 +228,7 @@ services: restart: always logging: *default-logging reasoner: - image: eyereasoner/reasoning-service:1.0.2 + image: eyereasoner/reasoning-service:increased-stack-limit volumes: - ./config/reasoner:/config ################################################################################