From a5a93a884ca3a652d3dc6eb44128e43e396bd751 Mon Sep 17 00:00:00 2001 From: Remco van 't Veer Date: Fri, 23 Sep 2022 14:54:32 +0200 Subject: [PATCH] Filter out inactive objects Objects with status denoting it no longer exists will be considered inactive and thus excluded from the exposed tables and views. --- ...20220922130000-add-status-columns.down.sql | 15 ++++ .../20220922130000-add-status-columns.up.sql | 72 +++++++++++++++++++ src/straatnaam/data.clj | 6 +- src/straatnaam/lvbag.clj | 32 +++++++-- src/straatnaam/lvbag/bag.sql | 23 +++--- src/straatnaam/sanity.clj | 9 ++- 6 files changed, 135 insertions(+), 22 deletions(-) create mode 100644 resources/migrations/20220922130000-add-status-columns.down.sql create mode 100644 resources/migrations/20220922130000-add-status-columns.up.sql diff --git a/resources/migrations/20220922130000-add-status-columns.down.sql b/resources/migrations/20220922130000-add-status-columns.down.sql new file mode 100644 index 0000000..bcc0553 --- /dev/null +++ b/resources/migrations/20220922130000-add-status-columns.down.sql @@ -0,0 +1,15 @@ +ALTER TABLE template.openbareRuimte DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.nummeraanduiding DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.pand DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.standplaats DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.ligplaats DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.verblijfsobject DROP COLUMN status, DROP COLUMN actief; +--;; +ALTER TABLE template.woonplaats DROP COLUMN status, DROP COLUMN actief; +--;; +DROP TYPE status; diff --git a/resources/migrations/20220922130000-add-status-columns.up.sql b/resources/migrations/20220922130000-add-status-columns.up.sql new file mode 100644 index 0000000..c1a8e34 --- /dev/null +++ b/resources/migrations/20220922130000-add-status-columns.up.sql @@ -0,0 +1,72 @@ +CREATE TYPE status AS ENUM ( + 'Naamgeving uitgegeven', + 'Naamgeving ingetrokken', + + 'Bouwvergunning verleend', + 'Niet gerealiseerd pand', + 'Bouw gestart', + 'Pand in gebruik (niet ingemeten)', + 'Pand in gebruik', + 'Verbouwing pand', + 'Sloopvergunning verleend', + 'Pand gesloopt', + 'Pand buiten gebruik', + 'Pand ten onrechte opgevoerd', + + 'Plaats aangewezen', + 'Plaats ingetrokken', + + 'Verblijfsobject gevormd', + 'Niet gerealiseerd verblijfsobject', + 'Verblijfsobject in gebruik (niet ingemeten)', + 'Verblijfsobject in gebruik', + 'Verbouwing verblijfsobject', + 'Verblijfsobject ingetrokken', + 'Verblijfsobject buiten gebruik', + 'Verblijfsobject ten onrechte opgevoerd', + + 'Woonplaats aangewezen', + 'Woonplaats ingetrokken' +); +--;; + +ALTER TABLE template.openbareRuimte ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.nummeraanduiding ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.pand ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.standplaats ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.ligplaats ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.verblijfsobject ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; +ALTER TABLE template.woonplaats ADD COLUMN status status, ADD COLUMN actief BOOLEAN; +--;; + +SET SCHEMA 'template'; +--;; + +DROP INDEX verblijfsobject_nummeraanduiding_idx; +--;; +CREATE INDEX verblijfsobject_nummeraanduiding_idx ON verblijfsobject (nummeraanduiding_id, actief, einddatum); +--;; +DROP INDEX ligplaats_nummeraanduiding_idx; +--;; +CREATE INDEX ligplaats_nummeraanduiding_idx ON ligplaats (nummeraanduiding_id, actief, einddatum); +--;; +DROP INDEX standplaats_nummeraanduiding_idx; +--;; +CREATE INDEX standplaats_nummeraanduiding_idx ON standplaats (nummeraanduiding_id, actief, einddatum); +--;; +DROP INDEX woonplaats_idx; +--;; +CREATE INDEX woonplaats_idx ON woonplaats (id, actief, einddatum); +--;; +DROP INDEX openbareruimte_idx; +--;; +CREATE INDEX openbareruimte_idx ON openbareruimte (id, actief, einddatum); + +--;; +SET SCHEMA 'public'; diff --git a/src/straatnaam/data.clj b/src/straatnaam/data.clj index 210aac0..1da7e17 100644 --- a/src/straatnaam/data.clj +++ b/src/straatnaam/data.clj @@ -36,11 +36,13 @@ (str "DROP VIEW IF EXISTS public.verblijfsobject") (str "CREATE VIEW public.verblijfsobject AS - SELECT * FROM " sn ".verblijfsobject WHERE einddatum IS NULL") + SELECT * FROM " sn ".verblijfsobject + WHERE actief AND einddatum IS NULL") (str "DROP VIEW IF EXISTS public.pand") (str "CREATE VIEW public.pand AS - SELECT * FROM " sn ".pand WHERE einddatum IS NULL") + SELECT * FROM " sn ".pand + WHERE actief AND einddatum IS NULL") (str "DROP VIEW IF EXISTS public.verblijfsobject_pand") (str "CREATE VIEW public.verblijfsobject_pand AS diff --git a/src/straatnaam/lvbag.clj b/src/straatnaam/lvbag.clj index 5d4cc04..3a404b6 100644 --- a/src/straatnaam/lvbag.clj +++ b/src/straatnaam/lvbag.clj @@ -38,13 +38,33 @@ :else {tag (reduce merge (map xml-seq->map content))})) +(def status-inactief + #{"Naamgeving ingetrokken" + + "Niet gerealiseerd pand" + "Pand gesloopt" + "Pand ten onrechte opgevoerd" + + "Plaats ingetrokken" + + "Niet gerealiseerd verblijfsobject" + "Verblijfsobject ingetrokken" + "Verblijfsobject ten onrechte opgevoerd" + + "Woonplaats ingetrokken"}) + +(def status-actief (complement status-inactief)) + (defn parse-base - [{:keys [identificatie] + [{:keys [identificatie + status] {{:keys [beginGeldigheid eindGeldigheid]} :Voorkomen} :voorkomen}] {:id (some-> identificatie first bigdec) :begindatum (some-> beginGeldigheid first) - :einddatum (some-> eindGeldigheid first)}) + :einddatum (some-> eindGeldigheid first) + :status (some-> status first) + :actief (-> status first status-actief boolean)}) (defn parse-point-geometrie [k rec] @@ -227,6 +247,8 @@ (:geometrie) "?::gis.GEOMETRY" (:begindatum :einddatum) "?::DATE" (:neven_nummeraanduiding_ids :pand_ids) "?::NUMERIC[]" + (:status) "?::status" + (:actief) "?::BOOLEAN" "?")) (string/join ", ")) table (str sn "." table)] @@ -262,7 +284,8 @@ x.pand_ids AS a, GENERATE_SUBSCRIPTS(x.pand_ids, 1) AS i FROM " sn ".verblijfsobject x - WHERE x.einddatum IS NULL + WHERE x.actief + AND (x.einddatum IS NULL OR x.einddatum > CURRENT_DATE) ) y")] (map #(str "INSERT INTO " sn "." % "_neven SELECT id, a[i] FROM ( @@ -271,7 +294,8 @@ x.neven_nummeraanduiding_ids AS a, GENERATE_SUBSCRIPTS(x.neven_nummeraanduiding_ids, 1) AS i FROM " sn "." % " x - WHERE x.einddatum IS NULL + WHERE x.actief + AND (x.einddatum IS NULL OR x.einddatum > CURRENT_DATE) ) y") ["verblijfsobject" "standplaats" diff --git a/src/straatnaam/lvbag/bag.sql b/src/straatnaam/lvbag/bag.sql index f85d35e..a82cd31 100644 --- a/src/straatnaam/lvbag/bag.sql +++ b/src/straatnaam/lvbag/bag.sql @@ -1,5 +1,4 @@ SELECT - DISTINCT ON (num.postcode, num.huisnummer, num.huisletter, num.huisnummertoevoeging) num.id AS id, opr.naam AS openbareruimte, num.huisnummer AS huisnummer, @@ -49,31 +48,33 @@ SELECT gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(sta2.geometrie), 4326))) AS breedtegraad FROM nummeraanduiding num -JOIN openbareruimte opr - ON opr.id = num.openbareruimte_id AND opr.einddatum IS NULL +LEFT JOIN openbareruimte opr + ON opr.id = num.openbareruimte_id AND opr.actief AND (opr.einddatum IS NULL OR opr.einddatum > CURRENT_DATE) LEFT JOIN woonplaats wpl - ON wpl.id = num.woonplaats_id AND wpl.einddatum IS NULL + ON wpl.id = num.woonplaats_id AND wpl.actief AND (wpl.einddatum IS NULL OR wpl.einddatum > CURRENT_DATE) LEFT JOIN woonplaats wpl2 - ON wpl2.id = opr.woonplaats_id AND wpl2.einddatum IS NULL + ON wpl2.id = opr.woonplaats_id AND wpl2.actief AND (wpl2.einddatum IS NULL OR wpl2.einddatum > CURRENT_DATE) LEFT JOIN verblijfsobject vbo - ON vbo.nummeraanduiding_id = num.id AND vbo.einddatum IS NULL + ON vbo.nummeraanduiding_id = num.id AND vbo.actief AND (vbo.einddatum IS NULL OR vbo.einddatum > CURRENT_DATE) LEFT JOIN verblijfsobject_neven vbo_n ON vbo_n.nummeraanduiding_id = num.id LEFT JOIN verblijfsobject vbo2 - ON vbo_n.id = vbo2.id AND vbo2.einddatum IS NULL + ON vbo_n.id = vbo2.id AND vbo2.actief AND (vbo2.einddatum IS NULL OR vbo2.einddatum > CURRENT_DATE) LEFT JOIN ligplaats lig - ON lig.nummeraanduiding_id = num.id AND lig.einddatum IS NULL + ON lig.nummeraanduiding_id = num.id AND lig.actief AND (lig.einddatum IS NULL OR lig.einddatum > CURRENT_DATE) LEFT JOIN ligplaats_neven lig_n ON lig_n.nummeraanduiding_id = num.id LEFT JOIN ligplaats lig2 - ON lig_n.id = lig2.id AND lig2.einddatum IS NULL + ON lig_n.id = lig2.id AND lig2.actief AND (lig2.einddatum IS NULL OR lig2.einddatum > CURRENT_DATE) LEFT JOIN standplaats sta - ON sta.nummeraanduiding_id = num.id AND sta.einddatum IS NULL + ON sta.nummeraanduiding_id = num.id AND sta.actief AND (sta.einddatum IS NULL OR sta.einddatum > CURRENT_DATE) LEFT JOIN standplaats_neven stand_n ON stand_n.nummeraanduiding_id = num.id LEFT JOIN standplaats sta2 - ON stand_n.id = sta2.id AND sta2.einddatum IS NULL + ON stand_n.id = sta2.id AND sta2.actief AND (sta2.einddatum IS NULL OR sta2.einddatum > CURRENT_DATE) WHERE + num.actief +AND num.einddatum IS NULL AND num.postcode IS NOT NULL diff --git a/src/straatnaam/sanity.clj b/src/straatnaam/sanity.clj index bf32864..f61eacd 100644 --- a/src/straatnaam/sanity.clj +++ b/src/straatnaam/sanity.clj @@ -72,11 +72,10 @@ baseline values. Bad stats are logged." [db sn] (let [[pred - baseline] (if (virgin? db) - [#(< 0.90 (val %) 1.20) - *baseline-count-by-object-type*] - [#(< 0.95 (val %) 1.10) - (count-by-object-type db "public")]) + baseline] [#(< 0.90 (val %) 1.20) + (if (virgin? db) + *baseline-count-by-object-type* + (count-by-object-type db "public"))] new (count-by-object-type db sn) bad-ratios (remove pred (ratio-vals baseline new))] (if (seq bad-ratios) -- 2.45.2