~jomco/straatnaam

a5a93a884ca3a652d3dc6eb44128e43e396bd751 — Remco van 't Veer 1 year, 11 months ago 978317f
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.
A resources/migrations/20220922130000-add-status-columns.down.sql => resources/migrations/20220922130000-add-status-columns.down.sql +15 -0
@@ 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;

A resources/migrations/20220922130000-add-status-columns.up.sql => resources/migrations/20220922130000-add-status-columns.up.sql +72 -0
@@ 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';

M src/straatnaam/data.clj => src/straatnaam/data.clj +4 -2
@@ 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

M src/straatnaam/lvbag.clj => src/straatnaam/lvbag.clj +28 -4
@@ 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"

M src/straatnaam/lvbag/bag.sql => src/straatnaam/lvbag/bag.sql +12 -11
@@ 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

M src/straatnaam/sanity.clj => src/straatnaam/sanity.clj +4 -5
@@ 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)