--
-- $Id$
--
-- Script containing customer specific db-configuration for KFNS.

DEFINE thisfile = 'KFNS.SQL'
DEFINE dbuser   = '^KFNS'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

------ payload begin ------

CREATE OR REPLACE VIEW kfns_v_rap_import_log
(
   fclt_f_applicatie,
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT COALESCE (fac_import_app_code, imp_log_applicatie),
          TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'),
          imp_log_status,
          imp_log_omschrijving,
          imp_log_hint
     FROM imp_log il1, fac_import fi1, fac_import_app fia1
    WHERE il1.fac_import_key = fi1.fac_import_key(+)
          AND fi1.fac_import_app_key = fia1.fac_import_app_key(+)
          AND NOT EXISTS
                (SELECT 1
                   FROM imp_log il2, fac_import fi2
                  WHERE     il2.fac_import_key = fi2.fac_import_key
                        AND fi2.fac_import_app_key = fi1.fac_import_app_key
                        AND il2.fac_import_key > il1.fac_import_key);

CREATE OR REPLACE VIEW KFNS_V_RAP_GEBOUWOVERZICHT
(
   DISTRICT,
   LOCATIE,
   GEBOUW,
   GEBOUW_NAAM,
   ADRES_BEZOEK,
   POSTCODE_BEZOEK,
   PLAATS_BEZOEK,
   VERANTWOORDELIJK_PERS,
   ADRES,
   POSTCODE,
   PLAATS
)
AS
   SELECT ad.alg_district_omschrijving,
          al.alg_locatie_omschrijving,
          ag.alg_gebouw_code,
          ag.alg_gebouw_naam,
          ml.mld_adres_bezoek_adres,
          ml.mld_adres_bezoek_postcode,
          ml.mld_adres_bezoek_plaats,
          p.prs_perslid_naam_full,
          al.alg_locatie_adres,
          al.alg_locatie_postcode,
          al.alg_locatie_plaats
     FROM alg_district ad,
          alg_gebouw ag,
          alg_locatie al,
          prs_v_perslid_fullnames_all p,
          mld_adres ml
    WHERE     al.alg_district_key = ad.alg_district_key
          AND ag.alg_locatie_key = al.alg_locatie_key
          AND ag.alg_gebouw_verwijder IS NULL
          AND al.alg_locatie_verwijder IS NULL
          AND ad.alg_district_verwijder IS NULL
          AND ag.prs_perslid_key_verantw = p.prs_perslid_key(+)
          AND ag.mld_adres_key = ml.mld_adres_key(+);

CREATE OR REPLACE VIEW kfns_v_rap_gebouwpaspoort
(
   GEBOUWKEY,
   DISTRICT,
   LOCATIE,
   CODE,
   GEBOUWNAAM,
   GEBOUWFUNCTIE,
   BEBOUWDOPPM2,
   VERVALDATUM,
   GEBOUW_OPMERKING,
   OMTREK,
   INHOUD,
   X_COORDINAAT,
   Y_COORDINAAT,
   CONTRACTPARTIJ,
   EIGENAAR_VAN_OBJECT,
   STRUKTON_GEBOUWCODE,
   VERANT_FM,
   VERANT_FC,
   LEVERAN_INFO,
   GEBOUW_FACT_NIETVERHUUR,
   KADASTRAAL,
   BOUWJAAR,
   EIGENAAR,
   ENERGIELABEL,
   WETTELIJKE_VERPLICHTINGEN,
   GEBRUIKSMELDING,
   KEURING_LIFTEN,
   KEURING_BMI,
   BHV_PLAN,
   KEURING_OAI,
   ONTRUIMINGSPLAN,
   KEURING_SPRINKLERINSTALLATIE,
   KEURING_GASBLUSINSTALLATIE,
   KEURING_INBRAAKINSTALLATIE,
   KEURING_KOELINSTALLATIE,
   KEURING_STOOKINSTALLATIE,
   KEURING_WKO,
   KEURING_EINSTALLATIES,
   KEURING_NOODVERLICHTING,
   KEURING_KEERKLEPPEN_DRWTR,
   KEURING_DROGE_BLUSLEIDING,
   KEURING_GASDETECTIE,
   KEURING_NSA,
   LEGIONELLABEHEERSPLAN,
   RI_E
)
AS
   SELECT ag.alg_gebouw_key,
          ad.alg_district_omschrijving,
          al.alg_locatie_omschrijving,
          ag.alg_gebouw_upper,
          ag.alg_gebouw_naam,
          asg.alg_srtgebouw_omschrijving,
          ag.alg_gebouw_bruto_vloeropp,
          ag.alg_gebouw_vervaldatum,
          ag.alg_gebouw_opmerking,
          ag.alg_gebouw_omtrek,
          ag.alg_gebouw_inhoud,
          ag.alg_gebouw_x,
          ag.alg_gebouw_y,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1000
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             contractpartij,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1002
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             eigenaarobj,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1003
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             struktoncode,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1004
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             verantw_fm,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1005
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             verantw_fc,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1083
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             leveranciersinfo,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1006
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             geb_fact_n_v,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1260
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             kadastraal,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1221
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             bouwjaar,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1001
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             eigenaar,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1240
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             energielabel,
          (SELECT ao.alg_onrgoedkenmerk_waarde km
             FROM alg_onrgoedkenmerk ao
            WHERE     ao.alg_kenmerk_key = 1340
                  AND ao.alg_onrgoed_niveau = 'G'
                  AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                  AND ao.alg_onrgoedkenmerk_verwijder IS NULL)
             wet_verpl,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1281
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             gebruiksmelding,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1300
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_liften,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1302
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_bmi,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1428
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             bhv_plan,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1304
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_oai,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1426
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             ont_plan,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1320
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_sprinkler,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1322
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_gasblus,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1324
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_inbraak,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1360
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_koel,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1362
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_stook,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1380
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_wko,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1382
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_einstall,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1384
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_noodverl,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1400
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_keerklep,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1402
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_d_busl,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1404
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_gasd,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1420
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             k_nsa,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1422
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             legio_beheer,
           DECODE ((SELECT CASE
                     WHEN FAC.SAFE_TO_DATE (ao.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') BETWEEN SYSDATE AND TO_DATE ('01-01-2099', 'DD-MM-YYYY') THEN 'V'
                     ELSE
                     'X' END
                     FROM alg_onrgoedkenmerk ao
               WHERE     ao.alg_kenmerk_key = 1424
                     AND ao.alg_onrgoed_niveau = 'G'
                     AND ao.alg_onrgoed_key = ag.alg_gebouw_key
                     AND ao.alg_onrgoedkenmerk_verwijder IS NULL),
                     'X', 'X', NULL, '-', 'V', 'V')
             ri_e
     FROM alg_locatie al, alg_gebouw ag, alg_srtgebouw asg, alg_district ad
    WHERE al.alg_locatie_key = ag.alg_locatie_key
          AND ad.alg_district_key = al.alg_district_key
          AND asg.alg_srtgebouw_key = ag.alg_srtgebouw_key
          AND ag.alg_gebouw_verwijder IS NULL;

CREATE OR REPLACE VIEW kfns_v_rap_gebpaspoort
(
   GEBOUWKEY,
   DISTRICT,
   LOCATIE,
   CODE,
   GEBOUWNAAM,
   GEBOUWFUNCTIE,
   BEBOUWDOPPM2,
   VERVALDATUM,
   GEBOUW_OPMERKING,
   OMTREK,
   INHOUD,
   X_COORDINAAT,
   Y_COORDINAAT,
   CONTRACTPARTIJ,
   EIGENAAR_VAN_OBJECT,
   STRUKTON_GEBOUWCODE,
   VERANT_FM,
   VERANT_FC,
   LEVERAN_INFO,
   GEBOUW_FACT_NIETVERHUUR,
   KADASTRAAL,
   BOUWJAAR,
   EIGENAAR,
   ENERGIELABEL,
   WETTELIJKE_VERPLICHTINGEN,
   GEBRUIKSMELDING,
   KEURING_LIFTEN,
   KEURING_BMI,
   BHV_PLAN,
   KEURING_OAI,
   ONTRUIMINGSPLAN,
   KEURING_SPRINKLERINSTALLATIE,
   KEURING_GASBLUSINSTALLATIE,
   KEURING_INBRAAKINSTALLATIE,
   KEURING_KOELINSTALLATIE,
   KEURING_STOOKINSTALLATIE,
   KEURING_WKO,
   KEURING_EINSTALLATIES,
   KEURING_NOODVERLICHTING,
   KEURING_KEERKLEPPEN_DRWTR,
   KEURING_DROGE_BLUSLEIDING,
   KEURING_GASDETECTIE,
   KEURING_NSA,
   LEGIONELLABEHEERSPLAN,
   RI_E
)
AS
   SELECT GEBOUWKEY,
          DISTRICT,
          LOCATIE,
          CODE,
          GEBOUWNAAM,
          GEBOUWFUNCTIE,
          BEBOUWDOPPM2,
          VERVALDATUM,
          GEBOUW_OPMERKING,
          OMTREK,
          INHOUD,
          X_COORDINAAT,
          Y_COORDINAAT,
          CONTRACTPARTIJ,
          EIGENAAR_VAN_OBJECT,
          STRUKTON_GEBOUWCODE,
          VERANT_FM,
          VERANT_FC,
          LEVERAN_INFO,
          GEBOUW_FACT_NIETVERHUUR,
          KADASTRAAL,
          BOUWJAAR,
          EIGENAAR,
          ENERGIELABEL,
          ROUND( (  DECODE (GEBRUIKSMELDING, 'V', 1, 0)
                  + DECODE (KEURING_LIFTEN, 'V', 1, 0)
                  + DECODE (KEURING_BMI, 'V', 1, 0)
                  + DECODE (BHV_PLAN, 'V', 1, 0)
                  + DECODE (KEURING_OAI, 'V', 1, 0)
                  + DECODE (ONTRUIMINGSPLAN, 'V', 1, 0)
                  + DECODE (KEURING_SPRINKLERINSTALLATIE, 'V', 1, 0)
                  + DECODE (KEURING_GASBLUSINSTALLATIE, 'V', 1, 0)
                  + DECODE (KEURING_INBRAAKINSTALLATIE, 'V', 1, 0)
                  + DECODE (KEURING_KOELINSTALLATIE, 'V', 1, 0)
                  + DECODE (KEURING_STOOKINSTALLATIE, 'V', 1, 0)
                  + DECODE (KEURING_WKO, 'V', 1, 0)
                  + DECODE (KEURING_EINSTALLATIES, 'V', 1, 0)
                  + DECODE (KEURING_NOODVERLICHTING, 'V', 1, 0)
                  + DECODE (KEURING_KEERKLEPPEN_DRWTR, 'V', 1, 0)
                  + DECODE (KEURING_DROGE_BLUSLEIDING, 'V', 1, 0)
                  + DECODE (KEURING_GASDETECTIE, 'V', 1, 0)
                  + DECODE (KEURING_NSA, 'V', 1, 0)
                  + DECODE (LEGIONELLABEHEERSPLAN, 'V', 1, 0)
                  + DECODE (RI_E, 'V', 1, 0))
                / (  DECODE (GEBRUIKSMELDING, 'V', 1, 'X', 1, 0.00000001)
                   + DECODE (KEURING_LIFTEN, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_BMI, 'V', 1, 'X', 1, 0)
                   + DECODE (BHV_PLAN, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_OAI, 'V', 1, 'X', 1, 0)
                   + DECODE (ONTRUIMINGSPLAN, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_SPRINKLERINSTALLATIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_GASBLUSINSTALLATIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_INBRAAKINSTALLATIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_KOELINSTALLATIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_STOOKINSTALLATIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_WKO, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_EINSTALLATIES, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_NOODVERLICHTING, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_KEERKLEPPEN_DRWTR, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_DROGE_BLUSLEIDING, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_GASDETECTIE, 'V', 1, 'X', 1, 0)
                   + DECODE (KEURING_NSA, 'V', 1, 'X', 1, 0)
                   + DECODE (LEGIONELLABEHEERSPLAN, 'V', 1, 'X', 1, 0)
                   + DECODE (RI_E, 'V', 1, 'X', 1, 0))
                * 100) berek,
          GEBRUIKSMELDING,
          KEURING_LIFTEN,
          KEURING_BMI,
          BHV_PLAN,
          KEURING_OAI,
          ONTRUIMINGSPLAN,
          KEURING_SPRINKLERINSTALLATIE,
          KEURING_GASBLUSINSTALLATIE,
          KEURING_INBRAAKINSTALLATIE,
          KEURING_KOELINSTALLATIE,
          KEURING_STOOKINSTALLATIE,
          KEURING_WKO,
          KEURING_EINSTALLATIES,
          KEURING_NOODVERLICHTING,
          KEURING_KEERKLEPPEN_DRWTR,
          KEURING_DROGE_BLUSLEIDING,
          KEURING_GASDETECTIE,
          KEURING_NSA,
          LEGIONELLABEHEERSPLAN,
          RI_E
     FROM kfns_v_rap_gebouwpaspoort;

CREATE OR REPLACE VIEW kfns_v_rap_km_freeze
(
   weeknummer,
   alg_gebouw_code,
   alg_gebouw_omschrijving,
   prs_kostensoort_oms,
   prs_kostensoortgrp_oms,
   volgorde,
   bedrag
)
AS
   SELECT weeknummer,
          alg_gebouw_code,
          alg_gebouw_omschrijving,
          prs_kostensoort_oms,
          prs_kostensoortgrp_oms,
          volgorde,
          bedrag
     FROM kfns_km_freeze;

CREATE OR REPLACE PROCEDURE KFNS_EXPORT_KM_FREEZE (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
   V_WEEKNUMMER   VARCHAR2 (10);
BEGIN
   IF TRUNC (SYSDATE, 'Q') = TRUNC (SYSDATE)
   THEN
      V_WEEKNUMMER :=
            TO_CHAR (SYSDATE, 'yyyy')
         || '-'
         || FAC.SAFE_TO_NUMBER (TO_CHAR ( (SYSDATE), 'WW'));

      INSERT INTO KFNS_KM_FREEZE (WEEKNUMMER,
                                  ALG_GEBOUW_CODE,
                                  ALG_GEBOUW_OMSCHRIJVING,
                                  PRS_KOSTENSOORT_OMS,
                                  PRS_KOSTENSOORTGRP_OMS,
                                  VOLGORDE,
                                  BEDRAG)
         SELECT
                V_WEEKNUMMER,
                ALG_GEBOUW_CODE,
                ALG_GEBOUW_OMSCHRIJVING,
                PRS_KOSTENSOORT_OMS,
                PRS_KOSTENSOORTGRP_OMS,
                VOLGORDE,
                BEDRAG
           FROM KFNS_V_RAP_KOSTEN_MONITOR;
   END IF;
END;
/


-- Import vanuit Strukton
CREATE OR REPLACE PROCEDURE kfns_import_opdrstat_strukton (p_import_key IN NUMBER)
AS
   c_delim                VARCHAR2 (1) := ';';
   v_newline              VARCHAR2 (4000);                       -- Input line
   v_errormsg             VARCHAR2 (1000);
   oracle_err_num         NUMBER;
   oracle_err_mes         VARCHAR2 (200);
   v_aanduiding           VARCHAR2 (1000) := '';
   header_is_valid        NUMBER := 0;
   v_count_tot            NUMBER (10) := 0;
   v_count_imp            NUMBER (10) := 0;
   v_ongeldig             NUMBER (1) := 0;
   -- De importvelden
   v_mld_opdr_key_tekst   VARCHAR2 (100);
   v_extern_nummer        VARCHAR2 (100);
   v_status_code          VARCHAR2 (100);
   v_status               NUMBER (10);
   v_datumtijd_tekst      VARCHAR2 (100);
   v_datumtijd            DATE;
   v_status_tekst         VARCHAR2 (100);
   v_opmerking            VARCHAR2 (4000);
   v_totaal_tekst         VARCHAR2 (100);
   v_totaal               NUMBER (8,2);
   -- Overige velden
   v_mld_opdr_key         NUMBER (10);
   v_mld_opdr_opmerking   VARCHAR2 (4000);

   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM kfns_imp_opdrstat_strukton;
   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden.
         fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst);
         v_mld_opdr_key_tekst := TRIM (v_mld_opdr_key_tekst);
         fac.imp_getfield (v_newline, c_delim, v_extern_nummer);
         v_extern_nummer := TRIM (v_extern_nummer);
         fac.imp_getfield (v_newline, c_delim, v_status_code);       -- typeID
         v_status_code := TRIM (v_status_code);
         fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst);
         v_datumtijd_tekst := TRIM (v_datumtijd_tekst);
         fac.imp_getfield (v_newline, c_delim, v_status_tekst);
         v_status_tekst := TRIM (v_status_tekst);
         fac.imp_getfield (v_newline, c_delim, v_opmerking);
         v_opmerking := SUBSTR (TRIM (v_opmerking), 1, 1000);
         fac.imp_getfield (v_newline, c_delim, v_totaal_tekst);
         v_totaal := fac.safe_to_number (v_totaal_tekst);
         -- Verwijder de markering voor cr/lf die in stylesheet is toegevoegd.
         v_opmerking := REPLACE (v_opmerking, '@@', CHR (13));
         v_aanduiding := '[' || v_mld_opdr_key_tekst || '|' || v_extern_nummer || '|' || v_status_code || '|' || v_datumtijd_tekst || '|' || v_status_tekst || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF     UPPER (TRIM (v_mld_opdr_key_tekst)) = 'REFERENCEID'
               AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
               AND UPPER (TRIM (v_status_code)) = 'TYPEID'
               AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
               AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
               AND UPPER (TRIM (v_totaal_tekst)) = 'TOTAL'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;

            -- Controleer alle veldwaarden.
            v_errormsg := 'Fout bepalen opdracht';

            BEGIN
               SELECT o.mld_opdr_key, o.mld_opdr_opmerking
                 INTO v_mld_opdr_key, v_mld_opdr_opmerking
                 FROM mld_opdr o, mld_melding m, mld_stdmelding sm, ins_tab_discipline td, ins_srtdiscipline sd
                WHERE o.mld_melding_key = m.mld_melding_key
                      AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                      AND sm.mld_ins_discipline_key = td.ins_discipline_key
                      AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                      AND sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = v_mld_opdr_key_tekst;
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_ongeldig := 1;
                  oracle_err_num := SQLCODE;
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                  fac.writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Status ongedefinieerd';

               CASE
                  WHEN v_status_code = '5'
                  THEN
                     v_status := 5;                              -- uitgegeven
                  WHEN v_status_code = '10'
                  THEN
                     v_status := 8;                            -- geaccepteerd
                  WHEN v_status_code = '20'                  -- monteur gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '25'               -- specialist gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  WHEN v_status_code = '30'                -- technisch gereed
                  THEN
                     v_status := 6;                                -- afgemeld
                  -- KFNS#52066: Uitprijs/fiatteer-functionaliteit!
                  --WHEN v_status_code = '40'                     -- uitgeprijst (fiattering aan FACILITOR-kant)
                  --THEN
                  --   v_status := 9;                                -- afgerond
                  WHEN v_status_code = '45'                     -- gefiatteerd (fiattering aan Strukton-kant)
                  THEN
                     v_status := 9;                                -- afgerond
                  WHEN v_status_code = '70'
                  THEN
                     v_status := 1;                             -- geannuleerd
                  WHEN v_status_code = '80'
                  THEN
                     v_status := 1;                               -- afgewezen
                  ELSE
                     v_status := NULL;
                     v_ongeldig := 1;                         -- nog te bezien
               END CASE;
            END IF;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Datumtijd ongeldig';

               IF INSTR (v_datumtijd_tekst, '.') > 0
               THEN
                  v_datumtijd := fac.safe_to_date (REPLACE (SUBSTR (v_datumtijd_tekst, 1, INSTR (v_datumtijd_tekst, '.') - 1), 'T', ' '), 'yyyy-mm-dd hh24:mi:ss');
               ELSE
                  v_datumtijd := fac.safe_to_date (REPLACE (v_datumtijd_tekst, 'T', ' '), 'yyyy-mm-dd hh24:mi:ss');
               END IF;
            END IF;

            IF v_ongeldig = 0
            THEN
               v_errormsg := 'Opmerking ongeldig';

               -- Controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang is gemeld.
               IF v_opmerking IS NOT NULL AND INSTR (v_mld_opdr_opmerking, v_opmerking) = 0
               THEN
                  v_opmerking := '[' || v_datumtijd_tekst || '] - ' || v_status_tekst || CHR (13) || CHR (10) || v_opmerking;
               ELSE
                  v_opmerking := '[' || v_datumtijd_tekst || '] - ' || v_status_tekst;
               END IF;
            END IF;

            -- Insert geformatteerde import record.
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout wegschrijven statusbericht';

                  INSERT INTO kfns_imp_opdrstat_strukton (mld_opdr_key,
                                                          extern_nummer,
                                                          status,
                                                          datumtijd,
                                                          opmerking,
                                                          totaal)
                      VALUES (v_mld_opdr_key,
                              v_extern_nummer,
                              v_status,
                              v_datumtijd,
                              v_opmerking,
                              v_totaal);

                  v_count_imp := v_count_imp + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                     v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
                     fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
               END;
            ELSE
               -- Foutmeldingen onderdrukken als uitprijzen/fiatteren niet is aangeschakeld.
               IF v_status_code <> '40' AND v_status_code <> '45'
               THEN
                  fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
               END IF;
            END IF;
         END IF;
      END;
   END LOOP;

   IF header_is_valid = 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ingelezen statusberichten: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ongeldige niet ingelezen statusberichten: ' || TO_CHAR (v_count_tot - v_count_imp), '');
   END IF;
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces statusberichten afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE kfns_update_opdrstat_strukton (p_import_key IN NUMBER)
AS
   -- Cursor loopt - per opdracht in volgorde! - over alle ingelezen statusberichten.
   CURSOR c1
   IS
        SELECT mld_opdr_key, extern_nummer, status, datumtijd, opmerking, totaal
          FROM kfns_imp_opdrstat_strukton
      ORDER BY 1, 4;

   c_user_key              NUMBER (10) := 5;                 -- _STRUKTON-user
   c_refnr_srtkkey         NUMBER (10) := 41;            -- Refnr. Leverancier
   v_errormsg              VARCHAR2 (1000);
   oracle_err_num          NUMBER;
   oracle_err_mes          VARCHAR2 (200);
   v_aanduiding            VARCHAR2 (200);
   v_count_tot             NUMBER (10) := 0;
   v_count                 NUMBER (10) := 0;
   v_mld_key               NUMBER (10);
   v_opdr_key              NUMBER (10);
   v_opdr_status           NUMBER (10);
   v_mld_typeopdr_key      NUMBER (10);
   v_mld_kenmerk_key       NUMBER (10);
   v_mld_kenmerkopdr_key   NUMBER (10);
BEGIN
   -- Loop over alle ingelezen Strukton-statusberichten.
   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.mld_opdr_key || '|' || SUBSTR (rec.opmerking, 1, 100) || '] ';
         v_count_tot := v_count_tot + 1;

         -- Key van melding/opdracht bepalen en Refnr. bij opdracht opslaan.
         IF rec.mld_opdr_key IS NOT NULL
         THEN
            v_errormsg := 'Fout bepalen opdracht.';

            SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key
              INTO v_mld_key, v_opdr_key, v_opdr_status, v_mld_typeopdr_key
              FROM mld_opdr
             WHERE mld_opdr_key = rec.mld_opdr_key;

            v_errormsg := 'Fout bepalen Refnr-kenmerk.';

            SELECT k.mld_kenmerk_key
              INTO v_mld_kenmerk_key
              FROM mld_kenmerk k
             WHERE k.mld_srtkenmerk_key = c_refnr_srtkkey AND k.mld_typeopdr_key = v_mld_typeopdr_key;

            v_errormsg := 'Fout bepalen Refnr-kenmerkopdracht.';

            SELECT MAX (ko.mld_kenmerkopdr_key)
              INTO v_mld_kenmerkopdr_key
              FROM mld_kenmerkopdr ko
             WHERE ko.mld_opdr_key = v_opdr_key AND v_mld_kenmerk_key = ko.mld_kenmerk_key;

            IF v_mld_kenmerkopdr_key IS NULL
            THEN
               -- Kenmerk toevoegen
               v_errormsg := 'Fout toevoegen Refnr-kenmerkopdracht.';

               INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde)
                   VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer);
            ELSE
               -- Kenmerk bijwerken
               v_errormsg := 'Fout bijwerken Refnr-kenmerkopdracht.';

               UPDATE mld_kenmerkopdr
                  SET mld_kenmerkopdr_waarde = rec.extern_nummer
                WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
            END IF;

            v_errormsg := 'Fout bijwerken Opmerking (opdracht).';

            v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte!

            UPDATE mld_opdr
               SET mld_opdr_opmerking =
                      DECODE (mld_opdr_opmerking,
                              NULL, rec.opmerking,
                              rec.opmerking || CHR (13) || CHR (10) || SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count)))
             WHERE mld_opdr_key = v_opdr_key;

            v_errormsg := 'Fout bijwerken Status.';

            IF v_opdr_status <> rec.status
            THEN
               IF rec.status = 8 AND v_opdr_status = 5
               THEN
                  -- Accepteer de opdracht als deze uitgegeven was
                  MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton
               ELSIF rec.status = 6 AND v_opdr_status = 5
               THEN
                  -- Meld de opdracht af als deze uitgegeven was (na eerst accepteren)
                  MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton
                  MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
               ELSIF rec.status = 6 AND v_opdr_status = 8
               THEN
                  -- Meld de opdracht af als deze geaccepteerd was
                  MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
               ELSIF rec.status = 1 AND v_opdr_status IN (5, 8)
               THEN
                  -- Wijs de opdracht af als deze niet/wel geaccepteerd was
                  MLD.setopdrachtstatus (v_opdr_key, 1, c_user_key); -- Strukton
                  MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
               ELSIF rec.status = 9 AND v_opdr_status = 6      -- Per KFNS#52066
               THEN
                  -- Neem ontvangen totaal over (als kosten=0, dus niet voor offerteopdrachten)
                  UPDATE mld_opdr
                     SET mld_opdr_materiaal = rec.totaal,
                         mld_opdr_kosten = rec.totaal
                   WHERE mld_opdr_key = v_opdr_key AND COALESCE (mld_opdr_kosten, 0) = 0;

                  -- Rond de opdracht af als deze afgemeld was
                  MLD.setopdrachtstatus (v_opdr_key, 9, c_user_key); -- Strukton
               END IF;

               IF rec.status = 6 AND v_opdr_status <> 6
               THEN
                  -- AADO#30922: Melding niet meer automatisch afmelden.
                  -- KFNS#37965: Opmerking-veld bij melding niet meer bijwerken.
                  MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
               END IF;
            END IF;
         END IF;
         COMMIT;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Statusbericht-loop');
      END;
   END LOOP;
END;
/


/* Formatted on 10-6-2015 15:16:44 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_export_res_ruimte_xml (result, result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
     FROM fac_rapport
    WHERE fac_rapport_node = SUBSTR ('RES_RUIMTE_XML', 1, 12);

/* Formatted on 10-6-2015 15:18:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE kfns_select_res_ruimte_xml (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2)
AS
   CURSOR c_res
   IS
      SELECT TRIM(SUBSTR (
                     rr.res_ruimte_nr,
                     DECODE (INSTR (rr.res_ruimte_nr, 'etage -'),
                             0, 0,
                             INSTR (rr.res_ruimte_nr, 'etage -') + 7)))
                res_ruimte_nr,
             rg.alg_locatie_code,
             rg.alg_locatie_omschrijving,
             rg.alg_gebouw_upper,
             rg.alg_gebouw_omschrijving,
             rg.alg_verdieping_code,
             rg.alg_verdieping_omschrijving,
             rr.res_ruimte_key,
             TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') van,
             TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') tot,
             rrr.res_reservering_key,
             rrr.res_rsv_ruimte_volgnr,
             rrr.res_rsv_ruimte_omschrijving,
             ph.prs_perslid_naam_full host,
             pc.prs_perslid_naam_full contact,
             rrr.res_rsv_ruimte_host_key,
             rrr.res_rsv_ruimte_bezoekers,
             DECODE (
                (SELECT COUNT ( * )
                   FROM bez_bezoekers b, bez_afspraak a
                  WHERE a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                        AND a.bez_afspraak_key = b.bez_afspraak_key),
                0,
                'nee',
                'ja')
                bez_aangemeld,
             rd.res_disc_params_preposttime schoonmaak
        FROM res_rsv_ruimte rrr,
             (  SELECT res_rsv_ruimte_key,
                       res_ruimte_key,
                       MAX (alg_ruimte_key) alg_ruimte_key
                  FROM res_v_rsv_ruimte_2_alg_ruimte
              GROUP BY res_rsv_ruimte_key, res_ruimte_key) rarg,
             res_ruimte rr,
             alg_v_ruimte_gegevens rg,
             prs_v_perslid_fullnames pc,
             prs_v_perslid_fullnames ph,
             res_disc_params rd
       WHERE     rarg.res_ruimte_key IS NOT NULL
             AND rarg.res_ruimte_key = rr.res_ruimte_key
             AND rarg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
             AND TRUNC (rrr.res_rsv_ruimte_van) = TRUNC (SYSDATE)
             AND rarg.alg_ruimte_key = rg.alg_ruimte_key
             AND rg.alg_gebouw_key IN (50, 110) -- ZL0000-901/Meander + UT0000-901/KTT
             AND rrr.res_rsv_ruimte_host_key = ph.prs_perslid_key
             AND rrr.res_rsv_ruimte_contact_key = pc.prs_perslid_key
             AND rr.res_discipline_key = rd.res_ins_discipline_key;

   v_first   NUMBER;
   v_count   NUMBER;

   PROCEDURE add_row (p_regel IN VARCHAR2)
   AS
   BEGIN
      INSERT INTO fac_rapport (fac_rapport_node,
                               fac_rapport_volgnr,
                               fac_rapport_regel)
          VALUES (SUBSTR (p_applname, 1, 12), v_count, p_regel);

      v_count := v_count + 1;
   END;

   PROCEDURE add_element (p_tag IN VARCHAR2, p_value IN VARCHAR2)
   AS
   BEGIN
      add_row(   '<'
              || p_tag
              || '>'
              || xml.char_to_html (p_value)
              || '</'
              || p_tag
              || '>');
   END;
BEGIN
   v_count := 0;

   DELETE fac_rapport
    WHERE fac_rapport_node = SUBSTR (p_applname, 1, 12);

   -- header
   add_row ('<?xml version="1.0" encoding="windows-1252" standalone="yes" ?>');
   add_row ('<FACILITOR>');
   add_row ('<RESERVERING>');

   FOR rec IN c_res
   LOOP
      BEGIN
         add_row ('<ROW>');
         add_element ('RUIMTE_NAAM', rec.res_ruimte_nr);
         add_element ('LOCATIE_CODE', rec.alg_locatie_code);
         add_element ('LOCATIE_NAAM', rec.alg_locatie_omschrijving);
         add_element ('GEBOUW_CODE', rec.alg_gebouw_upper);
         add_element ('GEBOUW_NAAM', rec.alg_gebouw_omschrijving);
         add_element ('VERDIEPING_CODE', rec.alg_verdieping_code);
         add_element ('VERDIEPING_NAAM', rec.alg_verdieping_omschrijving);
         add_element ('RUIMTE_KEY', rec.res_ruimte_key);
         add_element ('VAN', rec.van);
         add_element ('TOT', rec.tot);
         add_element ('GASTHEER_NAAM', rec.HOST);
         add_element ('CONTACT_NAAM', rec.contact);
         add_element ('OMSCHRIJVING', rec.res_rsv_ruimte_omschrijving);
         add_element ('BEZOEKERS_AANGEMELD', rec.bez_aangemeld);
         add_element ('SCHOONMAAKTIJD', rec.schoonmaak);
         add_row ('</ROW>');
      END;
   END LOOP;

   add_row ('</RESERVERING>');
   add_row ('</FACILITOR>');
END;
/


/* Formatted on 7-10-2015 15:42:24 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_rap_actual_cost_tot
(
   fclt_3d_afdeling_key,                   -- Kunnen beperken per leverancier!
   maand,
   --prs_bedrijf_key,
   fclt_f_leverancier,
   --cp_perslid_key,
   --cp_aanhef,
   --cp_naam,
   --cp_email,
   --cnt_contract_key,
   contractnr,
   beschrijving,
   inkoopordernr,
   aantal,
   kosten
)
AS                              -- Vaste contractkosten over de ACTUAL termijn
   SELECT c.cp_afdeling_key,
          TO_CHAR (SYSDATE, 'yyyy-mm'), -- Deze maand volgende maand factureren (achteraf)
          --c.prs_bedrijf_key,
          c.prs_bedrijf_naam bedrijf,
          --c.cp_perslid_key,
          --c.cp_aanhef,
          --c.cp_naam,
          --c.cp_email,
          --c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          c.cnt_contract_omschrijving,
          --kc.cnt_kenmerkcontract_waarde,
          c.cnt_contract_nummer, -- Uit deze maand lopend contract, anders geen vaste kosten
          --NULL mld_opdr_key,
          --NULL opdr_id,
          0 aantal,
          ROUND (
             DECODE (COALESCE (c.cnt_contract_termijnkosten, 0),
                     0, c.cnt_contract_kosten / 12,
                     c.cnt_contract_termijnkosten),
             2)
          + fac.safe_to_number (COALESCE (ce.cnt_kenmerkcontract_waarde, '0'))
          + fac.safe_to_number (COALESCE (bm.cnt_kenmerkcontract_waarde, '0'))
             kosten                                -- Wat als looptijd < jaar?
     FROM (SELECT b.prs_bedrijf_key,
                  b.prs_bedrijf_naam,
                  pcp.prs_afdeling_key cp_afdeling_key,
                  pcp.prs_perslid_key cp_perslid_key,
                  DECODE (pcp.prs_perslid_geslacht,
                          0, 'Mevr. ',
                          1, 'Dhr. ',
                          '')
                     cp_aanhef,
                  DECODE (
                     COALESCE (pcp.prs_perslid_voorletters,
                               SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
                     NULL,
                     NULL,
                     COALESCE (
                        pcp.prs_perslid_voorletters,
                        SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
                     || ' ')
                  || DECODE (pcp.prs_perslid_tussenvoegsel,
                             NULL, NULL,
                             pcp.prs_perslid_tussenvoegsel || ' ')
                  || pcp.prs_perslid_naam
                     cp_naam,
                  pcp.prs_perslid_email cp_email,
                  c.cnt_contract_key,
                  c.cnt_contract_nummer_intern,
                  c.cnt_contract_omschrijving,
                  c.cnt_contract_nummer,
                  c.cnt_contract_kosten,
                  c.cnt_contract_termijnkosten
             FROM cnt_v_aanwezigcontract c,
                  prs_bedrijf b,
                  cnt_contract mc,
                  prs_contactpersoon cp,
                  prs_perslid pcp,
                  prs_perslid pcm
            WHERE c.ins_discipline_key = 141               -- Vaste contracten
                  --AND c.cnt_contract_status = 0            -- NIET Gesloten
                  AND TRUNC (c.cnt_contract_looptijd_van) < TRUNC (LAST_DAY (SYSDATE))
                  AND c.cnt_contract_looptijd_tot >= TRUNC (LAST_DAY (SYSDATE))
                  AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                  AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
                  AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
                  AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
                  AND c.prs_perslid_key_beh = pcm.prs_perslid_key) c
          LEFT JOIN cnt_kenmerkcontract kc
             ON kc.cnt_kenmerk_key = 4                 -- Inkoopordernummer NS
                AND c.cnt_contract_key = kc.cnt_contract_key
          LEFT JOIN cnt_kenmerkcontract ce
             ON ce.cnt_kenmerk_key = 102                -- Credit/extra kosten
                AND c.cnt_contract_key = ce.cnt_contract_key
          LEFT JOIN cnt_kenmerkcontract bm
             ON bm.cnt_kenmerk_key = 122                        -- Bonus/malus
                AND c.cnt_contract_key = bm.cnt_contract_key
   UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten
     SELECT pcp.prs_afdeling_key,
            TO_CHAR (SYSDATE, 'yyyy-mm'), -- Deze maand ORDAFR, volgende maand factureren (achteraf)
            --b.prs_bedrijf_key,
            b.prs_bedrijf_naam,
            --pcp.prs_perslid_key cp_perslid_key,
            --DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
            --   cp_aanhef,
            --DECODE (
            --   COALESCE (pcp.prs_perslid_voorletters,
            --             SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
            --   NULL,
            --   NULL,
            --   COALESCE (pcp.prs_perslid_voorletters,
            --             SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
            --   || ' ')
            --|| DECODE (pcp.prs_perslid_tussenvoegsel,
            --           NULL, NULL,
            --           pcp.prs_perslid_tussenvoegsel || ' ')
            --|| pcp.prs_perslid_naam
            --   cp_naam,
            --pcp.prs_perslid_email cp_email,
            --c.cnt_contract_key,
            c.cnt_contract_nummer_intern,
            c.cnt_contract_omschrijving,
            --kc.cnt_kenmerkcontract_waarde,
            c.cnt_contract_nummer,
            --o.mld_opdr_key,
            --   TO_CHAR (o.mld_melding_key)
            --|| '/'
            --|| TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
            --   opdr_id,
            COUNT ( * ) aantal,
            SUM (o.mld_opdr_kosten) kosten
       FROM mld_opdr o,
            fac_tracking t,
            cnt_contract c,
            --cnt_contract c2,
            --mld_melding m,
            --prs_v_perslid_fullnames_all pf,
            --alg_v_allonrgoed_gegevens og,
            --mld_stdmelding sm,
            --ins_tab_discipline td,
            --ins_srtdiscipline sd,
            --prs_kostensoort ksm,
            --prs_kostensoort ksv,
            --prs_kostenplaats kp
            cnt_contract mc,
            prs_bedrijf b,
            prs_contactpersoon cp,
            prs_perslid pcp,
            prs_perslid pcm
      WHERE     o.mld_statusopdr_key = 9
            AND o.mld_opdr_key = t.fac_tracking_refkey
            AND t.fac_srtnotificatie_key = 70                        -- ORDAFR
            AND t.fac_tracking_datum > TRUNC (SYSDATE, 'mm')
            AND NOT EXISTS                     -- Niet gemarkeerd als dispuut!
                  (SELECT 1
                     FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                    WHERE     ko.mld_opdr_key = o.mld_opdr_key
                          AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                          AND k.mld_srtkenmerk_key = 101            -- Dispuut
                          AND ko.mld_kenmerkopdr_waarde = '1')   -- Aangevinkt
            AND o.cnt_contract_key = c.cnt_contract_key
            AND c.ins_discipline_key = 143             -- Variabele contracten
            --AND c1.cnt_contract_nummer_intern = c2.cnt_contract_nummer_intern
            --AND (t.fac_tracking_datum BETWEEN c2.cnt_contract_looptijd_van
            --                              AND  c2.cnt_contract_looptijd_tot
            --     OR NOT EXISTS
            --          (SELECT 1
            --             FROM cnt_contract
            --            WHERE t.fac_tracking_datum BETWEEN cnt_contract_looptijd_van
            --                                           AND  cnt_contract_looptijd_tot
            --                  AND cnt_contract_nummer_intern = c2.cnt_contract_nummer_intern))
            --AND o.mld_melding_key = m.mld_melding_key
            --AND m.prs_perslid_key = pf.prs_perslid_key
            --AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
            --AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            --AND sm.mld_ins_discipline_key = td.ins_discipline_key
            --AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            --AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
            --AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
            --AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
            --AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
            AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
            AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
            AND c.prs_perslid_key_beh = pcm.prs_perslid_key
   GROUP BY pcp.prs_afdeling_key,
            TO_CHAR (SYSDATE, 'yyyy-mm'),
            --b.prs_bedrijf_key,
            b.prs_bedrijf_naam,
            --c.cnt_contract_key,
            c.cnt_contract_nummer_intern,
            c.cnt_contract_omschrijving,
            c.cnt_contract_nummer;

-- Actual regels en basis voor oa. te exporteren/bevriezen regels op de 10e van
-- de maand; voor de output geldt:
-- Dat deze de actual vaste contractkosten toont (over afgelopen maand).
-- Dat deze de actual variabele opdrachten toont (voor 1e ORDAFR).
-- Dat deze tot de 10e van de huidige maand alleen nog door Kien wijzigbaar is.
/* Formatted on 7-10-2015 15:44:16 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_actual_fact                 -- Tbv. FACT_EXPORT!
(
   prs_afdeling_key,
   maand,
   prs_bedrijf_key,
   prs_bedrijf_naam,
   cp_perslid_key,
   cp_aanhef,
   cp_naam,
   cp_email,
   cnt_contract_key,
   contractnr,
   beschrijving,
   inkoopordernr,
   cm_aanhef,
   cm_naam,
   mld_opdr_key,
   opdr_id,
   aantal,
   kosten
)
AS
   SELECT c.cp_afdeling_key,    -- Vaste contractkosten over de ACTUAL termijn
          TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm'), -- Afgelopen maand deze maand factureren (achteraf)
          c.prs_bedrijf_key,
          c.prs_bedrijf_naam,
          c.cp_perslid_key,
          c.cp_aanhef,
          c.cp_naam,
          c.cp_email,
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          c.cnt_contract_omschrijving,
          --kc.cnt_kenmerkcontract_waarde,
          c.cnt_contract_nummer, -- Uit afgelopen maand lopend contract, anders geen vaste kosten
          c.cm_aanhef,
          c.cm_naam,
          NULL mld_opdr_key,
          NULL opdr_id,
          0 aantal,
          ROUND (
             DECODE (COALESCE (c.cnt_contract_termijnkosten, 0),
                     0, c.cnt_contract_kosten / 12,
                     c.cnt_contract_termijnkosten),
             2)
          + fac.safe_to_number (COALESCE (ce.cnt_kenmerkcontract_waarde, '0'))
          + fac.safe_to_number (COALESCE (bm.cnt_kenmerkcontract_waarde, '0'))
             kosten                                -- Wat als looptijd < jaar?
     FROM (SELECT b.prs_bedrijf_key,
                  b.prs_bedrijf_naam,
                  pcp.prs_afdeling_key cp_afdeling_key,
                  pcp.prs_perslid_key cp_perslid_key,
                  DECODE (pcp.prs_perslid_geslacht,
                          0, 'Mevr. ',
                          1, 'Dhr. ',
                          '')
                     cp_aanhef,
                  DECODE (
                     COALESCE (pcp.prs_perslid_voorletters,
                               SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
                     NULL, NULL,
                     COALESCE (
                        pcp.prs_perslid_voorletters,
                        SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
                     || ' ')
                  || DECODE (pcp.prs_perslid_tussenvoegsel,
                             NULL, NULL,
                             pcp.prs_perslid_tussenvoegsel || ' ')
                  || pcp.prs_perslid_naam
                     cp_naam,
                  pcp.prs_perslid_email cp_email,
                  c.cnt_contract_key,
                  c.cnt_contract_nummer_intern,
                  c.cnt_contract_omschrijving,
                  c.cnt_contract_nummer,
                  c.cnt_contract_kosten,
                  c.cnt_contract_termijnkosten,
                  DECODE (pcm.prs_perslid_geslacht,
                          0, 'Mevr. ',
                          1, 'Dhr. ',
                          '')
                     cm_aanhef,
                  DECODE (
                     COALESCE (pcm.prs_perslid_voorletters,
                               SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
                     NULL, NULL,
                     COALESCE (
                        pcm.prs_perslid_voorletters,
                        SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
                     || ' ')
                  || DECODE (pcm.prs_perslid_tussenvoegsel,
                             NULL, NULL,
                             pcm.prs_perslid_tussenvoegsel || ' ')
                  || pcm.prs_perslid_naam
                     cm_naam
             FROM cnt_v_aanwezigcontract c,
                  prs_bedrijf b,
                  cnt_contract mc,
                  prs_contactpersoon cp,
                  prs_perslid pcp,
                  prs_perslid pcm
            WHERE c.ins_discipline_key = 141               -- Vaste contracten
                  --AND c.cnt_contract_status = 0               -- NIET Gesloten
                  AND TRUNC (c.cnt_contract_looptijd_van) < TRUNC (SYSDATE, 'mm') - 1
                  AND c.cnt_contract_looptijd_tot >= TRUNC (SYSDATE, 'mm') - 1
                  --AND TO_CHAR (SYSDATE, 'dd') < '10'    -- Geen goede conditie
                  AND NOT EXISTS              -- Nog geen entry in eigen tabel
                        (SELECT 1
                           FROM fac_usrdata
                          WHERE fac_usrtab_key = 21          -- VasteKostenMnd
                                AND fac_usrdata_code =
                                      TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
                                      || '/'
                                      || c.cnt_contract_key)
                  AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                  AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
                  AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
                  AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
                  AND c.prs_perslid_key_beh = pcm.prs_perslid_key) c
          LEFT JOIN cnt_kenmerkcontract kc
             ON kc.cnt_kenmerk_key = 4                 -- Inkoopordernummer NS
                AND c.cnt_contract_key = kc.cnt_contract_key
          LEFT JOIN cnt_kenmerkcontract ce
             ON ce.cnt_kenmerk_key = 102                -- Credit/extra kosten
                AND c.cnt_contract_key = ce.cnt_contract_key
          LEFT JOIN cnt_kenmerkcontract bm
             ON bm.cnt_kenmerk_key = 122                        -- Bonus/malus
                AND c.cnt_contract_key = bm.cnt_contract_key
   UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten
   SELECT pcp.prs_afdeling_key,
          TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm'), -- Voor 1e ORDAFR, deze maand factureren (achteraf)
          b.prs_bedrijf_key,
          b.prs_bedrijf_naam,
          pcp.prs_perslid_key cp_perslid_key,
          DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cp_aanhef,
          DECODE (
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
             NULL, NULL,
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcp.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcp.prs_perslid_tussenvoegsel || ' ')
          || pcp.prs_perslid_naam
             cp_naam,
          pcp.prs_perslid_email cp_email,
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          c.cnt_contract_omschrijving,
          --kc.cnt_kenmerkcontract_waarde,
          c.cnt_contract_nummer,
          DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cm_aanhef,
          DECODE (
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
             NULL, NULL,
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcm.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcm.prs_perslid_tussenvoegsel || ' ')
          || pcm.prs_perslid_naam
             cm_naam,
          o.mld_opdr_key,
             TO_CHAR (o.mld_melding_key)
          || '/'
          || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
             opdr_id,
          1 aantal,
          o.mld_opdr_kosten kosten
     FROM mld_opdr o,
          fac_tracking t,
          cnt_contract c,
          prs_bedrijf b,
          cnt_contract mc,
          prs_contactpersoon cp,
          prs_perslid pcp,
          prs_perslid pcm
    WHERE     o.mld_statusopdr_key = 9
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = 70                          -- ORDAFR
          AND t.fac_tracking_datum < TRUNC (SYSDATE, 'mm')
          AND NOT EXISTS                       -- Niet gemarkeerd als dispuut!
                (SELECT 1
                   FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                  WHERE     ko.mld_opdr_key = o.mld_opdr_key
                        AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                        AND k.mld_srtkenmerk_key = 101              -- Dispuut
                        AND ko.mld_kenmerkopdr_waarde = '1')     -- Aangevinkt
          AND o.cnt_contract_key = c.cnt_contract_key
          AND c.ins_discipline_key = 143               -- Variabele contracten
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
          AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
          AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
          AND c.prs_perslid_key_beh = pcm.prs_perslid_key;

-- Te exporteren/bevriezen totalen over voorgaande maand (vast en variabel).
CREATE OR REPLACE VIEW kfns_v_rap_actual_fact_tot
(
   fclt_3d_afdeling_key,                   -- Kunnen beperken per leverancier!
   maand,
   --hide_f_bedrijf_key,
   fclt_f_leverancier,
   --hide_f_contract_key,
   contractnr,
   beschrijving,
   inkoopordernr,
   aantal,
   kosten
)
AS
     SELECT prs_afdeling_key,
            maand,
            --prs_bedrijf_key,
            prs_bedrijf_naam,
            --cnt_contract_key,
            contractnr,
            beschrijving,
            inkoopordernr,
            SUM (aantal),
            SUM (kosten)
       FROM kfns_v_actual_fact
   GROUP BY prs_afdeling_key,
            maand,
            --prs_bedrijf_key,
            prs_bedrijf_naam,
            --cnt_contract_key,
            contractnr,
            beschrijving,
            inkoopordernr;

-- Te exporteren/bevriezen variabele kosten over voorgaande maand (details).
CREATE OR REPLACE VIEW kfns_v_rap_actual_fact_var
(
   fclt_3d_afdeling_key,                   -- Kunnen beperken per leverancier!
   maand,
   prio,
   prefix,
   mld_melding_key,
   volgnr,
   mld_opdr_key,
   opdrachttype,
   plaats,
   alg_ruimte_omschrijving,
   mld_stdmelding_oms,
   omschrijving,
   begindatum,
   --begintijd,
   meldingstatus,
   opdrachtstatus,
   einddatum,
   --eindtijd,
   fclt_f_leverancier,
   afhandeling,
   kosten,
   fclt_f_inkoopordernr,
   fclt_x_district
)
AS
   SELECT v.prs_afdeling_key,
          v.maand,
          TO_CHAR (m.mld_melding_spoed),
          sd.ins_srtdiscipline_prefix,
          TO_CHAR (m.mld_melding_key),
          TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr),
          TO_CHAR (o.mld_opdr_key),
          ot.mld_typeopdr_omschrijving,
          DECODE (
             og.alg_type,
             'R', og.alg_gebouw_code,
             'V', og.alg_gebouw_code,
             'G', og.alg_gebouw_code,
             'T', og.alg_terreinsector_code,
             l.alg_locatie_code)
             plaatsaanduiding,
          DECODE (og.alg_type, 'R', og.alg_ruimte_omschrijving, NULL)
             alg_ruimte_omschrijving,
          sm.mld_stdmelding_omschrijving,
          o.mld_opdr_omschrijving,
          TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy') datum,
          --TO_CHAR (o.mld_opdr_datumbegin, 'hh24:mi') tijd,
          ms.mld_statuses_omschrijving,
          os.mld_statusopdr_omschrijving,
          --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum,
          TO_CHAR (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), 'dd-mm-yyyy') einddatum,
          --TO_CHAR (o.mld_opdr_einddatum, 'hh24:mi') eindtijd,
          --COALESCE (b.prs_bedrijf_naam, puv.prs_perslid_naam_full)
          --   uitvoerende,
          v.prs_bedrijf_naam,
          o.mld_opdr_opmerking,
          o.mld_opdr_kosten,
          v.inkoopordernr,
          d.alg_district_omschrijving
     FROM kfns_v_actual_fact v,
          mld_opdr o,
          mld_statusopdr os,
          mld_typeopdr ot,
          --prs_bedrijf b,                                -- Externe leverancier
          --prs_v_perslid_fullnames_all puv,              -- Interne uitvoerende
          mld_melding m,
          mld_statuses ms,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_district d,
          alg_v_onroerendgoed_gegevens og
    WHERE     v.mld_opdr_key = o.mld_opdr_key
          AND o.mld_statusopdr_key = os.mld_statusopdr_key
          AND o.mld_typeopdr_key = ot.mld_typeopdr_key
          --AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
          --AND o.mld_uitvoerende_keys = puv.prs_perslid_key(+)
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND l.alg_district_key = d.alg_district_key(+)
          AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);

-- Frozen regels en basis voor oa. de notificatie op de 11e van de maand; voor
-- de output geldt:
-- Dat deze de frozen vaste contractkosten toont.
-- Dat deze de frozen variabele opdrachten toont.
-- Dat de laatst bevroren maand per bedrijf op de 11e wordt genotificeerd (via
-- extra_key-principe) met daarin de bedragen gegroepeerd per inkoopordernr.
/* Formatted on 6-8-2015 10:25:35 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_frozen_fact
(
   prs_afdeling_key,
   maand,
   --prs_bedrijf_key,
   extra_key,                                                -- Moet zo heten!
   prs_bedrijf_naam,
   cp_perslid_key,
   cp_aanhef,
   cp_naam,
   cp_email,
   cnt_contract_key,
   contractnr,
   beschrijving,
   inkoopordernr,
   cm_aanhef,
   cm_naam,
   mld_opdr_key,
   opdr_id,
   aantal,
   kosten
)
AS
   SELECT pcp.prs_afdeling_key, -- Vaste contractkosten over de FROZEN termijnen
          SUBSTR (ud.fac_usrdata_code, 1, 7) maand,                 -- yyyy-mm
          b.prs_bedrijf_key,
          b.prs_bedrijf_naam,
          pcp.prs_perslid_key,
          DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cp_aanhef,
          DECODE (
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
             NULL, NULL,
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcp.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcp.prs_perslid_tussenvoegsel || ' ')
          || pcp.prs_perslid_naam
             cp_naam,
          pcp.prs_perslid_email,
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          c.cnt_contract_omschrijving,
          c.cnt_contract_nummer,
          DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cm_aanhef,
          DECODE (
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
             NULL, NULL,
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcm.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcm.prs_perslid_tussenvoegsel || ' ')
          || pcm.prs_perslid_naam
             cm_naam,
          NULL mld_opdr_key,
          NULL opdr_id,
          0 aantal,
          ud.fac_usrdata_prijs kosten
     FROM fac_usrdata ud,
          cnt_contract c,
          prs_bedrijf b,
          cnt_contract mc,
          prs_contactpersoon cp,
          prs_perslid pcp,
          prs_perslid pcm
    WHERE ud.fac_usrtab_key = 21                             -- VasteKostenMnd
          AND SUBSTR (ud.fac_usrdata_code, INSTR (ud.fac_usrdata_code, '/') + 1) =
                TO_CHAR (c.cnt_contract_key)
          --AND SUBSTR (ud.fac_usrdata_omschr, 1, INSTR (ud.fac_usrdata_omschr, '/') - 1) =
          --      TO_CHAR (b.prs_bedrijf_key)
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
          AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
          AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
          AND c.prs_perslid_key_beh = pcm.prs_perslid_key
   UNION ALL -- Variabele kosten uit FROZEN opdrachten op variabele contracten
   SELECT pcp.prs_afdeling_key,
          o.mld_opdr_ordernr maand,
          b.prs_bedrijf_key,
          b.prs_bedrijf_naam,
          pcp.prs_perslid_key,
          DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cp_aanhef,
          DECODE (
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1)),
             NULL,
             NULL,
             COALESCE (pcp.prs_perslid_voorletters,
                       SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcp.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcp.prs_perslid_tussenvoegsel || ' ')
          || pcp.prs_perslid_naam
             cp_naam,
          pcp.prs_perslid_email,
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          c.cnt_contract_omschrijving,
          c.cnt_contract_nummer,
          DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '')
             cm_aanhef,
          DECODE (
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1)),
             NULL, NULL,
             COALESCE (pcm.prs_perslid_voorletters,
                       SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.')
             || ' ')
          || DECODE (pcm.prs_perslid_tussenvoegsel,
                     NULL, NULL,
                     pcm.prs_perslid_tussenvoegsel || ' ')
          || pcm.prs_perslid_naam
             cm_naam,
          o.mld_opdr_key,
             TO_CHAR (o.mld_melding_key)
          || '/'
          || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
             opdr_id,
          1 aantal,
          o.mld_opdr_kosten kosten
     FROM mld_opdr o,
          cnt_contract c,
          prs_bedrijf b,
          cnt_contract mc,
          prs_contactpersoon cp,
          prs_perslid pcp,
          prs_perslid pcm
    WHERE     o.mld_statusopdr_key = 7
          AND o.mld_opdr_ordernr IS NOT NULL
          AND o.cnt_contract_key = c.cnt_contract_key
          AND c.ins_discipline_key = 143 -- Variabele contracten (kan niet anders)
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
          AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+)
          AND cp.prs_perslid_key = pcp.prs_perslid_key(+)
          AND c.prs_perslid_key_beh = pcm.prs_perslid_key;

-- Was 'kfns_v_rap_cost_frozen', die dus droppen!
-- Geexporteerde/bevroren totalen over voorgaande maanden (vast en variabel).
CREATE OR REPLACE VIEW kfns_v_rap_frozen_fact_tot
(
   fclt_3d_afdeling_key,                   -- Kunnen beperken per leverancier!
   fclt_f_maand,
   --hide_f_bedrijf_key,
   fclt_f_leverancier,
   --hide_f_contract_key,
   contractnr,
   beschrijving,
   inkoopordernr,
   aantal,
   kosten
)
AS                            -- Vaste contractkosten over de FROZEN termijnen
     SELECT prs_afdeling_key,
            maand,
            --prs_bedrijf_key,
            prs_bedrijf_naam,
            --cnt_contract_key,
            contractnr,
            beschrijving,
            inkoopordernr,
            SUM (aantal),
            SUM (kosten)
       FROM kfns_v_frozen_fact
   GROUP BY prs_afdeling_key,
            maand,
            --prs_bedrijf_key,
            prs_bedrijf_naam,
            --cnt_contract_key,
            contractnr,
            beschrijving,
            inkoopordernr;

-- Geexporteerde/bevroren variabele kosten over voorgaande maanden (details).
CREATE OR REPLACE VIEW kfns_v_rap_frozen_fact_var
(
   fclt_3d_afdeling_key,                   -- Kunnen beperken per leverancier!
   fclt_f_maand,
   prio,
   prefix,
   mld_melding_key,
   volgnr,
   mld_opdr_key,
   opdrachttype,
   plaats,
   alg_ruimte_omschrijving,
   mld_stdmelding_oms,
   omschrijving,
   begindatum,
   --begintijd,
   meldingstatus,
   opdrachtstatus,
   einddatum,
   --eindtijd,
   fclt_f_leverancier,
   afhandeling,
   kosten,
   fclt_f_inkoopordernr,
   fclt_x_district
)
AS
   SELECT v.prs_afdeling_key,
          v.maand,
          TO_CHAR (m.mld_melding_spoed),
          sd.ins_srtdiscipline_prefix,
          TO_CHAR (m.mld_melding_key),
          TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr),
          TO_CHAR (o.mld_opdr_key),
          ot.mld_typeopdr_omschrijving,
          DECODE (
             og.alg_type,
             'R', og.alg_gebouw_code,
             'V', og.alg_gebouw_code,
             'G', og.alg_gebouw_code,
             'T', og.alg_terreinsector_code,
             l.alg_locatie_code)
             plaatsaanduiding,
          DECODE (og.alg_type, 'R', og.alg_ruimte_omschrijving, NULL)
             alg_ruimte_omschrijving,
          sm.mld_stdmelding_omschrijving,
          o.mld_opdr_omschrijving,
          TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy') datum,
          --TO_CHAR (o.mld_opdr_datumbegin, 'hh24:mi') tijd,
          ms.mld_statuses_omschrijving,
          os.mld_statusopdr_omschrijving,
          --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum,
          TO_CHAR (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), 'dd-mm-yyyy') einddatum,
          --TO_CHAR (o.mld_opdr_einddatum, 'hh24:mi') eindtijd,
          --COALESCE (b.prs_bedrijf_naam, puv.prs_perslid_naam_full)
          --   uitvoerende,
          v.prs_bedrijf_naam,
          o.mld_opdr_opmerking,
          o.mld_opdr_kosten,
          v.inkoopordernr,
          d.alg_district_omschrijving
     FROM kfns_v_frozen_fact v,
          mld_opdr o,
          mld_statusopdr os,
          mld_typeopdr ot,
          --prs_bedrijf b,                                -- Externe leverancier
          --prs_v_perslid_fullnames_all puv,              -- Interne uitvoerende
          mld_melding m,
          mld_statuses ms,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_district d,
          alg_v_onroerendgoed_gegevens og
    WHERE     v.mld_opdr_key = o.mld_opdr_key
          AND o.mld_statusopdr_key = os.mld_statusopdr_key
          AND o.mld_typeopdr_key = ot.mld_typeopdr_key
          --AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
          --AND o.mld_uitvoerende_keys = puv.prs_perslid_key(+)
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND l.alg_district_key = d.alg_district_key(+)
          AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);

-- Vaste kosten hebben een kostensoort gekoppeld aan de stdmelding
-- en hebben GEEN link naar een contract in de opdracht.
-- Variabele kosten hebben optioneel een kostensoort gekoppeld aan
-- de stdmelding maar hebben altijd een link naar een contract van het
-- type variabele kosten.
CREATE OR REPLACE VIEW kfns_v_rap_kosten_monitor_i
AS
   SELECT alg_gebouw_code,
          'VAST-' || prs_kostensoort_oms prs_kostensoort_oms,
          prs_kostensoortgrp_key,
          prs_kostensoort_altcode volgorde,
          (SELECT SUM (mld_opdr_kosten)
             FROM mld_opdr o, mld_melding m, mld_stdmelding std
            WHERE o.mld_melding_key = m.mld_melding_key
              AND o.cnt_contract_key IS NULL
              AND m.mld_stdmelding_key = std.mld_stdmelding_key
              AND std.prs_kostensoort_key = k.prs_kostensoort_key
              AND m.mld_alg_onroerendgoed_keys = g.alg_gebouw_key
              AND mld_opdr_datumbegin = add_months (TRUNC (SYSDATE, 'Q'), -3))
             bedrag
     FROM alg_gebouw g, prs_kostensoort k
    WHERE alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
          'VAR-' || prs_kostensoortgrp_oms,
          prs_kostensoortgrp_key,
          LPAD (prs_kostensoortgrp_altcode - 2, 3, '0') volgorde,
          (SELECT SUM (mld_opdr_kosten)
             FROM mld_opdr o,
                  mld_melding m,
                  mld_stdmelding std,
                  ins_tab_discipline d,
                  cnt_contract c,
                  prs_kostensoort ks,
                  mld_typeopdr ot,
                  alg_v_allonroerendgoed aog
            WHERE o.mld_melding_key = m.mld_melding_key
              AND o.mld_typeopdr_key = ot.mld_typeopdr_key
              AND ot.mld_typeopdr_kosten = 1
              AND o.cnt_contract_key = c.cnt_contract_key
              AND c.prs_kostensoort_key = ks.prs_kostensoort_key
              AND c.ins_discipline_key = 143                                             -- variabel
              AND ks.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
              AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
              AND aog.alg_gebouw_key = g.alg_gebouw_key
              AND m.mld_stdmelding_key = std.mld_stdmelding_key
              AND std.mld_ins_discipline_key = d.ins_discipline_key
              AND d.ins_srtdiscipline_key <> 1                                            -- project
              AND mld_opdr_datumbegin = add_months (TRUNC (SYSDATE, 'Q'), -3))
             bedrag
     FROM alg_gebouw g, prs_kostensoortgrp kg
    WHERE alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
          'PRJ-' || prs_kostensoortgrp_oms,
          prs_kostensoortgrp_key,
          LPAD (prs_kostensoortgrp_altcode - 1, 3, '0') volgorde,
          (SELECT SUM (mld_opdr_kosten)
             FROM mld_opdr o,
                  mld_melding m,
                  mld_stdmelding std,
                  ins_tab_discipline d,
                  cnt_contract c,
                  prs_kostensoort ks,
                  mld_typeopdr ot,
                  alg_v_allonroerendgoed aog
            WHERE o.mld_melding_key = m.mld_melding_key
              AND o.mld_typeopdr_key = ot.mld_typeopdr_key
              AND ot.mld_typeopdr_kosten = 1
              AND o.cnt_contract_key = c.cnt_contract_key
              AND c.prs_kostensoort_key = ks.prs_kostensoort_key
              AND c.ins_discipline_key = 143                                             -- variabel
              AND ks.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
              AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
              AND aog.alg_gebouw_key = g.alg_gebouw_key
              AND m.mld_stdmelding_key = std.mld_stdmelding_key
              AND std.mld_ins_discipline_key = d.ins_discipline_key
              AND d.ins_srtdiscipline_key = 1                                             -- project
              AND mld_opdr_datumbegin = add_months (TRUNC (SYSDATE, 'Q'), -3))
             bedrag
     FROM alg_gebouw g, prs_kostensoortgrp kg
    WHERE alg_gebouw_verwijder IS NULL;

CREATE OR REPLACE VIEW kfns_v_rap_kosten_monitor
(
   ALG_GEBOUW_CODE,
   ALG_GEBOUW_OMSCHRIJVING,
   PRS_KOSTENSOORT_OMS,
   PRS_KOSTENSOORTGRP_OMS,
   VOLGORDE,
   BEDRAG
)
AS
   SELECT alg_gebouw_code,
          TO_CHAR (NULL) alg_gebouw_omschrijving,
          prs_kostensoort_oms,
          prs_kostensoortgrp_oms,
          volgorde,
          bedrag
     FROM t_kfns_v_rap_kosten_monitor_i i, prs_kostensoortgrp kg
    WHERE i.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
   UNION ALL
     SELECT alg_gebouw_code,
            TO_CHAR (NULL) alg_gebouw_omschrijving,
            'SUB-' || kg.prs_kostensoortgrp_oms,
            kg.prs_kostensoortgrp_oms,
            kg.prs_kostensoortgrp_altcode volgorde,
            SUM (bedrag)
       FROM t_kfns_v_rap_kosten_monitor_i i, prs_kostensoortgrp kg
      WHERE i.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
            AND alg_gebouw_code <> 'A_HEADER'
   GROUP BY kg.prs_kostensoortgrp_oms,
            alg_gebouw_code,
            prs_kostensoortgrp_altcode
   UNION ALL
     SELECT alg_gebouw_code,
            TO_CHAR (NULL) alg_gebouw_omschrijving,
            'TOTAAL',
            ' Totaal',
            '999' volgorde,
            SUM (bedrag)
       FROM t_kfns_v_rap_kosten_monitor_i
      WHERE alg_gebouw_code <> 'A_HEADER'
   GROUP BY alg_gebouw_code
   UNION ALL
   SELECT g.alg_gebouw_code,
          TO_CHAR (NULL) alg_gebouw_omschrijving,
          'M2 in beheer',
          ' M2',
          '002',
          opp
     FROM (  SELECT alg_gebouw_key,
                    alg_gebouw_upper alg_gebouw_code,
                    SUM (alg_ruimte_bruto_vloeropp) opp
               FROM alg_v_ruimte_gegevens rg, alg_onrgoedkenmerk aogk
              WHERE     aogk.alg_kenmerk_key = 1040
                    AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) = 1
                    AND rg.alg_ruimte_key = aogk.alg_onrgoed_key
           GROUP BY alg_gebouw_upper, alg_gebouw_key) rg,
          alg_gebouw g
    WHERE g.alg_gebouw_key = rg.alg_gebouw_key(+)
          AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
     SELECT alg_gebouw_code,
            TO_CHAR (NULL) alg_gebouw_omschrijving,
            'M2 Totaal',
            ' M2',
            '001',
            SUM (alg_ruimte_bruto_vloeropp)
       FROM alg_v_ruimte_gegevens rg, alg_gebouw g
      WHERE g.alg_gebouw_key = rg.alg_gebouw_key(+)
            AND g.alg_gebouw_verwijder IS NULL
   GROUP BY alg_gebouw_code
   UNION ALL
SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'Huurkosten Tarief 1',
       ' Huur Tarief',
       '003',
       bedrag
  FROM (  SELECT SUM( (subq1.waarde1 * subq2.waarde2)
                     - DECODE (subq3.waarde3, NULL, '0', subq3.waarde3))
                    bedrag,
                 subq1.cnt_alg_plaats_key
            FROM (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde1,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 245
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde2,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 181
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq2,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde3,
                         ck.cnt_contract_key ky
                    FROM (SELECT subq5.ky
                            FROM (SELECT ck.cnt_kenmerkcontract_waarde,
                                         ck.cnt_contract_key ky
                                    FROM cnt_kenmerkcontract ck
                                   WHERE ck.cnt_kenmerk_key = 262
                                         AND TO_DATE (
                                               ck.cnt_kenmerkcontract_waarde,
                                               'DD-MM-YYYY') <= SYSDATE) subq4,
                                 (SELECT ck.cnt_kenmerkcontract_waarde,
                                         ck.cnt_contract_key ky
                                    FROM cnt_kenmerkcontract ck
                                   WHERE ck.cnt_kenmerk_key = 263
                                         AND TO_DATE (
                                               ck.cnt_kenmerkcontract_waarde,
                                               'DD-MM-YYYY') >= SYSDATE) subq5
                           WHERE subq4.ky = subq5.ky) datum,
                         cnt_kenmerkcontract ck
                   WHERE ck.cnt_kenmerk_key = 264
                         AND ck.cnt_contract_key = datum.ky) subq3
           WHERE     subq1.ky = subq2.ky(+)
                 AND subq1.ky = subq3.ky(+)
                 AND subq1.cnt_alg_plaats_key = subq2.cnt_alg_plaats_key
        GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
 WHERE g.alg_gebouw_key = scope.cnt_alg_plaats_key(+)
       AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
 SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'Huurkosten Tarief 2',
       ' Huur Tarief',
       '004',
       bedrag
  FROM (  SELECT SUM( (subq1.waarde1 * subq2.waarde2)
                     - DECODE (subq3.waarde3, NULL, '0', subq3.waarde3))
                    bedrag,
                 subq1.cnt_alg_plaats_key
            FROM (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde1,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 321
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde2,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 341
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq2,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde3,
                         ck.cnt_contract_key ky
                    FROM (SELECT subq5.ky
                            FROM (SELECT ck.cnt_kenmerkcontract_waarde,
                                         ck.cnt_contract_key ky
                                    FROM cnt_kenmerkcontract ck
                                   WHERE ck.cnt_kenmerk_key = 262
                                         AND TO_DATE (
                                               ck.cnt_kenmerkcontract_waarde,
                                               'DD-MM-YYYY') <= SYSDATE) subq4,
                                 (SELECT ck.cnt_kenmerkcontract_waarde,
                                         ck.cnt_contract_key ky
                                    FROM cnt_kenmerkcontract ck
                                   WHERE ck.cnt_kenmerk_key = 263
                                         AND TO_DATE (
                                               ck.cnt_kenmerkcontract_waarde,
                                               'DD-MM-YYYY') >= SYSDATE) subq5
                           WHERE subq4.ky = subq5.ky) datum,
                         cnt_kenmerkcontract ck
                   WHERE ck.cnt_kenmerk_key = 264
                         AND ck.cnt_contract_key = datum.ky) subq3
           WHERE     subq1.ky = subq2.ky(+)
                 AND subq1.ky = subq3.ky(+)
                 AND subq1.cnt_alg_plaats_key = subq2.cnt_alg_plaats_key
        GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
 WHERE g.alg_gebouw_key = scope.cnt_alg_plaats_key(+)
       AND g.alg_gebouw_verwijder IS NULL
    UNION ALL
    SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'Huur Terrein',
       ' Huur Terrein',
       '005',
       bedrag
       FROM
      (SELECT
      SUM ( subq1.waarde1 * subq2.waarde2) bedrag,
       subq1.cnt_alg_plaats_key
  FROM
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde1,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 242
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde2,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 185
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq2
 WHERE     subq1.ky = subq2.ky(+)
       AND subq1.cnt_alg_plaats_key =  subq2.cnt_alg_plaats_key
       GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
       WHERE
       g.alg_gebouw_key = scope.cnt_alg_plaats_key(+)
       AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'Huur Stalling',
       ' Huur Stalling',
       '006',
       bedrag
       FROM
      (SELECT
      SUM ( subq1.waarde1 * subq2.waarde2) bedrag,
       subq1.cnt_alg_plaats_key
  FROM
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde1,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 243
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde2,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 241
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq2
 WHERE     subq1.ky = subq2.ky(+)
       AND subq1.cnt_alg_plaats_key =  subq2.cnt_alg_plaats_key
       GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
       WHERE
       g.alg_gebouw_key = scope.cnt_alg_plaats_key(+)
       AND g.alg_gebouw_verwijder IS NULL
    UNION ALL
SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'Huur Parkeren',
       ' Huur Parkeren',
       '007',
       bedrag
       FROM
      (SELECT
      SUM ( subq1.waarde1 * subq2.waarde2) bedrag,
       subq1.cnt_alg_plaats_key
  FROM
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde1,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 244
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
       (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde) waarde2,
               ck.cnt_contract_key ky, cp.cnt_alg_plaats_key
          FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
         WHERE     ck.cnt_kenmerk_key = 186
               AND cp.cnt_alg_plaats_code = 'G'
               AND ck.cnt_contract_key = cp.cnt_contract_key
               AND ck.cnt_kenmerkcontract_verwijder IS NULL
               AND cp.cnt_contract_plaats_verwijder IS NULL) subq2
 WHERE     subq1.ky = subq2.ky(+)
       AND subq1.cnt_alg_plaats_key =  subq2.cnt_alg_plaats_key
       GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
       WHERE
       g.alg_gebouw_key = scope.cnt_alg_plaats_key(+)
       AND g.alg_gebouw_verwijder IS NULL
       UNION ALL
SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'VSK',
       ' VSK',
       '008',
       bedrag
  FROM (SELECT SUM ((subq1.waarde1
                       + DECODE (subq2.waarde2, NULL, '0', subq2.waarde2))
                     * subq3.waarde3)
                    bedrag,
                 subq1.cnt_alg_plaats_key plaatskey
            FROM (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde1,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 181
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde2,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 341
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq2,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde3,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 187
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq3
           WHERE     subq1.ky = subq2.ky(+)
                 AND subq3.ky = subq1.ky(+)
                 AND subq3.cnt_alg_plaats_key = subq1.cnt_alg_plaats_key
        GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
 WHERE g.alg_gebouw_key = scope.plaatskey(+)
       AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'GWE',
       ' GWE',
       '009',
       bedrag
  FROM (SELECT SUM ((subq1.waarde1
                       + DECODE (subq2.waarde2, NULL, '0', subq2.waarde2))
                     * subq3.waarde3)
                    bedrag,
                 subq1.cnt_alg_plaats_key plaatskey
            FROM (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde1,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 181
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde2,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 341
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq2,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde3,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 401
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq3
           WHERE     subq1.ky = subq2.ky(+)
                 AND subq3.ky = subq1.ky(+)
                 AND subq3.cnt_alg_plaats_key = subq1.cnt_alg_plaats_key
        GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
 WHERE g.alg_gebouw_key = scope.plaatskey(+)
       AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
       TO_CHAR (NULL) alg_gebouw_omschrijving,
       'ZL',
       ' ZL',
       '0091',
       bedrag
  FROM (SELECT SUM ((subq1.waarde1
                       + DECODE (subq2.waarde2, NULL, '0', subq2.waarde2))
                     * subq3.waarde3)
                    bedrag,
                 subq1.cnt_alg_plaats_key plaatskey
            FROM (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde1,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 181
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq1,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde2,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 341
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq2,
                 (SELECT fac.safe_to_number (ck.cnt_kenmerkcontract_waarde)
                            waarde3,
                         ck.cnt_contract_key ky,
                         cp.cnt_alg_plaats_key
                    FROM cnt_kenmerkcontract ck, cnt_contract_plaats cp
                   WHERE     ck.cnt_kenmerk_key = 402
                         AND cp.cnt_alg_plaats_code = 'G'
                         AND ck.cnt_contract_key = cp.cnt_contract_key
                         AND ck.cnt_kenmerkcontract_verwijder IS NULL
                         AND cp.cnt_contract_plaats_verwijder IS NULL) subq3
           WHERE     subq1.ky = subq2.ky(+)
                 AND subq3.ky = subq1.ky(+)
                 AND subq3.cnt_alg_plaats_key = subq1.cnt_alg_plaats_key
        GROUP BY subq1.cnt_alg_plaats_key) scope,
       alg_gebouw g
 WHERE g.alg_gebouw_key = scope.plaatskey(+)
       AND g.alg_gebouw_verwijder IS NULL
   UNION ALL
   SELECT alg_gebouw_code,
          alg_gebouw_omschrijving,
          'Omschrijving',
          ' Omschrijving',
          '000',
          0
     FROM alg_gebouw g
    WHERE g.alg_gebouw_verwijder IS NULL;

-- import tbv kostenmonitor
CREATE OR REPLACE PROCEDURE kfns_import_vaste_kosten (p_import_key IN NUMBER)
AS
   c_fielddelimitor                VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);                                    -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2(1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_count                         NUMBER;
   v_ongeldig                      NUMBER (1);
   v_mode                          NUMBER (1);
   v_aanduiding                    VARCHAR2 (200);
   v_all_null                      BOOLEAN;
   v_count_error                   NUMBER (10);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   c_mld_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
         := mld_t_uitvoertijd (2, 'D');
   -- De importvelden:
   v_periode                       VARCHAR2 (255);
   v_gebouw_code                   VARCHAR2 (255);
   v_gebouw_omschrijving           VARCHAR(255);
   v_kostensoort_oms               VARCHAR2 (255);
   v_bedrijf_naam                  VARCHAR2 (255);
   v_opdr_kosten                   VARCHAR2 (255);
   v_contract_nr                   VARCHAR2 (255);

   v_gebouw_key                    alg_gebouw.alg_gebouw_key%TYPE;
   v_locatie_key                   alg_locatie.alg_locatie_key%TYPE;
   v_stdmelding_key                mld_stdmelding.mld_stdmelding_key%TYPE;
   v_bedrijf_key                   prs_bedrijf.prs_bedrijf_key%TYPE;
   v_mld_opdr_bedrijfopdr_volgnr   mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE;
   v_melding_key                   mld_melding.mld_melding_key%TYPE;
   v_opdr_key                      mld_opdr.mld_opdr_key%TYPE;
   v_contract_key                  cnt_contract.cnt_contract_key%TYPE;
   v_startdate              DATE;
   v_periodestart       DATE;

   CURSOR c
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   -- Bepaal het begin van het vorige Kwartaal
   v_startdate := add_months (TRUNC (SYSDATE, 'Q'), -3);

   v_count_error := 0;
   header_is_valid := 0;
   v_count_tot := 0;
   v_count_import := 0;

   FOR rec IN c
   LOOP
      BEGIN
         v_errormsg := 'Fout FETCH te importeren rij';

         v_newline := rec.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_fielddelimitor, v_periode);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_omschrijving);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_oms);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_contract_nr);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_opdr_kosten);

         v_aanduiding := v_gebouw_code || '|' || v_kostensoort_oms;
         v_opdr_kosten := REPLACE(v_opdr_kosten, ',', '.');
dbms_output.put_line('aanduiding: ' || v_aanduiding);
         IF v_periode IS NOT NULL AND (fac.safe_to_number(v_opdr_kosten) <> 0 OR header_is_valid = 0)
         THEN
            IF (header_is_valid = 0)
            THEN
               IF UPPER (v_periode) = 'PERIODE'
              AND UPPER (v_kostensoort_oms) = 'KOSTENSOORT'
              AND UPPER (v_opdr_kosten) = 'BEDRAG'
               THEN
                  header_is_valid := 1;
               END IF;
            ELSE
            dbms_output.put_line('header is valid: ' || v_aanduiding);
               v_count_tot := v_count_tot + 1;
               v_periodestart :=
                  fac.safe_to_date (
                     SUBSTR (v_periode, 1, 4) || LPAD ( ( (SUBSTR(v_periode,6,1) - 1) * 3) + 1, 2, '0') || '01',
                     'yyyymmdd');

               IF v_periodestart = v_startdate
               THEN
                  v_errorhint := 'Vind stdmelding';

                  SELECT mld_stdmelding_key
                    INTO v_stdmelding_key
                    FROM mld_stdmelding std, prs_kostensoort ks
                   WHERE std.prs_kostensoort_key = ks.prs_kostensoort_key
                     AND ks.prs_kostensoort_oms = v_kostensoort_oms;

                  v_errorhint := 'Vind gebouw';

                  SELECT alg_gebouw_key, alg_locatie_key
                    INTO v_gebouw_key, v_locatie_key
                    FROM alg_gebouw
                   WHERE alg_gebouw_verwijder IS NULL AND alg_gebouw_code = v_gebouw_code;

                  v_errorhint := 'Vind uitvoerende';

                  SELECT prs_bedrijf_key
                    INTO v_bedrijf_key
                    FROM prs_bedrijf
                   WHERE prs_bedrijf_verwijder IS NULL
                     AND prs_bedrijf_uitvoerende = 1
                     AND prs_bedrijf_naam = v_bedrijf_naam;

                  v_errorhint := 'Kijk of melding bestaat';

                  BEGIN
                     SELECT mld_melding_key
                       INTO v_melding_key
                       FROM mld_melding
                      WHERE mld_stdmelding_key = v_stdmelding_key
                        AND mld_alg_onroerendgoed_keys = v_gebouw_key
                        AND v_startdate BETWEEN mld_melding_datum AND mld_melding_einddatum;
                        dbms_output.put_line('melding bestaat: ' || v_aanduiding);
                  EXCEPTION
                     WHEN NO_DATA_FOUND
                     THEN
                        INSERT INTO mld_melding (mld_melding_omschrijving,
                                                 mld_melding_onderwerp,
                                                 mld_kosten_klant,
                                                 prs_perslid_key,
                                                 prs_kostenplaats_key,
                                                 mld_stdmelding_key,
                                                 mld_alg_locatie_key,
                                                 mld_alg_onroerendgoed_keys,
                                                 mld_melding_einddatum,
                                                 mld_melding_datum,
                                                 mld_melding_t_uitvoertijd,
                                                 mld_meldbron_key,
                                                 mld_melding_module,
                                                 mld_melding_spoed)
                            VALUES ('Vaste kosten:' || v_periode,
                            'Vaste kosten:' || v_periode,
                                    1,
                                    4,                          -- FACILITOR
                                    52,                                                      -- KIEN
                                    v_stdmelding_key,
                                    v_locatie_key,
                                    v_gebouw_key,
                                    ADD_MONTHS (TRUNC (v_startdate, 'Y'), 12) - 1,
                                    TRUNC (v_startdate, 'Y'),
                                    c_mld_uitvoertijd,
                                    5,
                                    'MLD',
                                    3)
                         RETURNING mld_melding_key
                              INTO v_melding_key;
                              dbms_output.put_line('melding is toegevoegd: ' || v_aanduiding);

         mld.setmeldingstatus (v_melding_key, 2, NULL);
         mld.setmeldingstatus (v_melding_key, 4, NULL);
                  END;

                  IF v_contract_nr IS NOT NULL
                  THEN
                     v_errorhint := 'Zoek het contract';

                     SELECT cnt_contract_key
                       INTO v_contract_key
                       FROM cnt_contract c
                      WHERE cnt_contract_verwijder IS NULL
                        AND c.cnt_prs_bedrijf_key = v_bedrijf_key
                        AND c.ins_discipline_key = 143                                             -- variabel
                        AND 'C' || cnt_contract_nummer_intern || '.' || cnt_contract_versie = v_contract_nr;
                  END IF;

                  v_errorhint := 'Kijk of opdracht bestaat';

                  BEGIN
                  dbms_output.put_line('bestaat de opdracht: ' || v_aanduiding);
                     SELECT mld_opdr_key
                       INTO v_opdr_key
                       FROM mld_opdr o
                      WHERE o.mld_melding_key = v_melding_key
                        AND v_startdate BETWEEN mld_opdr_datumbegin AND mld_opdr_einddatum
                         AND (   ( v_contract_key IS NULL AND o.cnt_contract_key IS NULL)
                              OR o.cnt_contract_key = v_contract_key)
                        AND o.mld_uitvoerende_keys = v_bedrijf_key;

dbms_output.put_line('opdracht bestaat: ' || v_aanduiding);
                     UPDATE mld_opdr
                        SET mld_opdr_kosten = ROUND (v_opdr_kosten, 2),
                            mld_opdr_materiaal = ROUND (v_opdr_kosten, 2)
                      WHERE mld_opdr_key = v_opdr_key;
                  EXCEPTION
                     WHEN NO_DATA_FOUND
                     THEN
                     dbms_output.put_line('bepaal opdr volgnr: ' || v_aanduiding);
                        v_mld_opdr_bedrijfopdr_volgnr :=
                           mld.bepaalopdrmeldingvolgnr (v_melding_key);

dbms_output.put_line('toevoegen opdracht: ' || v_aanduiding);
                        INSERT INTO mld_opdr (mld_melding_key,
                                              prs_kostenplaats_key,
                                              mld_statusopdr_key,
                                              mld_typeopdr_key,
                                              prs_perslid_key,
                                              mld_uitvoerende_keys,
                                              mld_opdr_datumbegin,
                                              mld_opdr_einddatum,
                                              mld_opdr_module,
                                              mld_opdr_omschrijving,
                                              mld_opdr_materiaal,
                                              mld_opdr_kosten,
                                              mld_opdr_bedrijfopdr_volgnr,
                                              cnt_contract_key)
                           VALUES( v_melding_key,
                                   52,                                                       -- KIEN
                                   5,                                                  -- uitgegeven
                                   481,                                  -- administratieve opdracht
                                   4,                                                   -- facilitor
                                   v_bedrijf_key,
                                   v_periodestart,
                                   ADD_MONTHS (v_periodestart, 3) - 1,
                                   'MLD',
                                   'Vaste kosten:' || v_periode,
                                   ROUND (v_opdr_kosten, 2),
                                   ROUND (v_opdr_kosten, 2),
                                   v_mld_opdr_bedrijfopdr_volgnr,
                                   v_contract_key);
                  END;
               ELSE
         fac.imp_writelog (p_import_key,
                           'E',
                           'Ongeldige periode opgegeven ' || v_periode || '-' || v_periodestart || ' - STRING:' ||SUBSTR (v_periode, 1, 4) || LPAD ( ( (SUBSTR(v_periode,6,1) - 1) * 3) + 1, 2, '0') || '01',
                           '');
               END IF;
            END IF;
         END IF;
         EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_aanduiding || ' | ' || v_errorhint);
         END;
      END loop;

      IF (header_is_valid = 0)
      THEN
         fac.imp_writelog (p_import_key,
                           'E',
                           v_aanduiding || 'Ongeldig importbestand',
                           'Geen geldige headerregel aanwezig');
      ELSE
         fac.imp_writelog (
            p_import_key,
            'S',
            'Import vast kosten: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
            '');
      END IF;

      COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_aanduiding || ' | ' || v_errorhint);
END kfns_import_vaste_kosten;
/


CREATE OR REPLACE PROCEDURE kfns_update_vaste_kosten (p_import_key IN NUMBER)
AS
BEGIN
   NULL;
END kfns_update_vaste_kosten;
/


CREATE OR REPLACE PROCEDURE kfns_select_fact (p_applname   IN VARCHAR2,
                                              p_applrun    IN VARCHAR2)
AS
   -- Bevries vaste contractkosten in eigen tabel (TODO/incl. malus?).
   CURSOR c1
   IS
      SELECT maand, prs_bedrijf_key, cnt_contract_key, inkoopordernr, kosten
        FROM kfns_v_actual_fact
       WHERE mld_opdr_key IS NULL;

   -- Zet "variabele" opdrachten die voor de 1e zijn afgerond op AV.
   -- Alleen op variabele contracten.
   CURSOR c2
   IS
      SELECT mld_opdr_key
        FROM kfns_v_actual_fact
       WHERE mld_opdr_key IS NOT NULL;

   -- Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV.
   -- Afgerond/kosten meerekenen op vaste contracten en geen dispuut
   -- Afgemeld/kosten niet meerekenen, geen offerteaanvraag en geen dispuut
   -- Afgerond/kosten niet meerekenen en geen dispuut (= geaccepteerde offerteaanvragen)
   CURSOR c3
   IS
      SELECT mld_opdr_key
        FROM mld_opdr o, cnt_contract c, mld_typeopdr ot
       WHERE     o.mld_statusopdr_key = 9                                -- KV
             AND o.cnt_contract_key = c.cnt_contract_key
             AND c.ins_discipline_key = 141                -- Vaste contracten
             AND o.mld_typeopdr_key = ot.mld_typeopdr_key
             AND ot.mld_typeopdr_kosten = 1            -- Kosten meerekenen=Ja
             AND NOT EXISTS                    -- Niet gemarkeerd als dispuut!
                   (SELECT 1
                      FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                     WHERE     ko.mld_opdr_key = o.mld_opdr_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 101           -- Dispuut
                           AND ko.mld_kenmerkopdr_waarde = '1')  -- Aangevinkt
             AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm')
      UNION ALL
      SELECT mld_opdr_key
        FROM mld_opdr o, mld_typeopdr ot
       WHERE     o.mld_statusopdr_key = 6                                -- TV
             AND o.mld_typeopdr_key = ot.mld_typeopdr_key
             AND ot.mld_typeopdr_kosten = 0           -- Kosten meerekenen=Nee
             AND ot.mld_typeopdr_key != 283                 -- Offerteaanvraag
             AND NOT EXISTS                    -- Niet gemarkeerd als dispuut!
                   (SELECT 1
                      FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                     WHERE     ko.mld_opdr_key = o.mld_opdr_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 101           -- Dispuut
                           AND ko.mld_kenmerkopdr_waarde = '1')  -- Aangevinkt
             AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm')
      UNION ALL
      SELECT mld_opdr_key
        FROM mld_opdr o, mld_typeopdr ot
       WHERE     o.mld_statusopdr_key = 9 -- KV (ooit met kosten en Offerteaanvragen)
             AND o.mld_typeopdr_key = ot.mld_typeopdr_key
             AND ot.mld_typeopdr_kosten = 0           -- Kosten meerekenen=Nee
             AND NOT EXISTS                    -- Niet gemarkeerd als dispuut!
                   (SELECT 1
                      FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                     WHERE     ko.mld_opdr_key = o.mld_opdr_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 101           -- Dispuut
                           AND ko.mld_kenmerkopdr_waarde = '1')  -- Aangevinkt
             AND (fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm')
                  OR fac.gettrackingdate ('ORDOOK', o.mld_opdr_key) < TRUNC (SYSDATE, 'mm'));

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER (10);
BEGIN
   -- Op 10e dag van de maand (via scheduled task):
   -- 1. Bevries vaste contractkosten in eigen tabel (incl. malus?).
   -- 2. Zet "variabele" opdrachten die voor de 1e zijn afgerond op AV.
   -- 3. Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV.
   -- x. Doe niets met afgewezen/geannuleerde opdrachten?

   v_count := 0;

   FOR rec IN c1
   LOOP
      v_errormsg := 'Fout toevoegen vaste contractkosten';

      INSERT INTO fac_usrdata (fac_usrtab_key,
                               fac_usrdata_code,
                               fac_usrdata_omschr,
                               fac_usrdata_aanmaak,
                               fac_usrdata_vervaldatum,
                               fac_usrdata_prijs)
          VALUES (21,                                        -- VasteKostenMnd
                  rec.maand || '/' || TO_CHAR (rec.cnt_contract_key),
                  TO_CHAR (rec.prs_bedrijf_key) || '/' || rec.inkoopordernr, -- TODO: Of weg?
                  SYSDATE,
                  NULL,
                  rec.kosten);

      v_count := v_count + 1;

      COMMIT;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 '#Vaste contractkosten bevroren: ' || TO_CHAR (v_count), '');
   COMMIT;

   v_count := 0;

   FOR rec IN c2
   LOOP
      v_errormsg := 'Fout bijwerken ordernummer (variabele opdrachten).';

      UPDATE mld_opdr
         SET mld_opdr_ordernr = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
       WHERE mld_opdr_key = rec.mld_opdr_key;

      v_errormsg := 'Fout bijwerken status (variabele opdrachten).';

      MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 4);

      v_count := v_count + 1;

      COMMIT;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 '#Variabele opdrachten bevroren: ' || TO_CHAR (v_count), '');
   COMMIT;

   v_count := 0;

   FOR rec IN c3
   LOOP
      v_errormsg := 'Fout bijwerken status (inclusief opdrachten).';

      MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 4);

      v_count := v_count + 1;

      COMMIT;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 '#Inclusief opdrachten bevroren: ' || TO_CHAR (v_count), '');
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.writelog (p_applname, 'E', v_errormsg,
                    'Proces FACT_EXPORT afgebroken!');
      COMMIT;
END;
/


-- Dummy export AUTOCLOSE (elk kwartier zoals voor OPDRSTAT_STRUKTON-import en
-- RES_RUIMTE_XML-export)!
-- KFNS#34395: En toekennen/afpakken fac_groep_key=122 (aan @nedtrain-ers).
-- KFNS#34522: En toekennen/afpakken fac_groep_key=681 (aan niet-@nsstation-ers).
-- KFNS#34268: En verwijderen inactieve accounts (180 dagen niet ingelogd).
/* Formatted on 30-11-2015 22:22:22 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE kfns_select_autoclose (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2)
AS
   -- Cursor loopt over alle bestelopdracht-items met status 'In bestelling';
   -- deze worden verondersteld te zijn geleverd!
   CURSOR cboi
   IS
      SELECT DISTINCT boi.bes_bestelopdr_key, bo.bes_bestelopdr_status
        FROM bes_bestelopdr bo,
             bes_bestelopdr_item boi,
             bes_bestelling_item bi,
             bes_srtdeel sd,
             bes_srtgroep sg
       WHERE     bo.bes_bestelopdr_status IN (3, 4) -- In behandeling/bestelling
             AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
             AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
             AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
             AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key IN (401, 402);   -- Ontvangst/Uitgifte

   -- Cursor loopt over alle bestelling-items met status 'Besteld' waarvan
   -- de bijbehorende bestelopdracht-items zijn geleverd; deze worden dan ook
   -- gesloten!
   CURSOR cbi
   IS
      SELECT DISTINCT bi.bes_bestelling_key
        FROM bes_bestelling b,
             bes_bestelling_item bi,
             bes_srtdeel sd,
             bes_srtgroep sg,
             bes_bestelopdr_item boi
       WHERE     b.bes_bestelling_status = 5                        -- Besteld
             AND b.bes_bestelling_key = bi.bes_bestelling_key
             --AND bi.bes_bestelling_item_aantal != COALESCE (bi.bes_bestelling_item_aantalontv, 0)
             AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
             AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key IN (401, 402)     -- Ontvangst/Uitgifte
             AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND boi.bes_bestelopdr_item_aantal = boi.bes_bestelopdr_item_aantalontv;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER;
BEGIN
   v_errormsg := 'Fout leveren bestelopdracht';

   FOR rec IN cboi
   LOOP
      IF rec.bes_bestelopdr_status = 3                       -- In behandeling
      THEN
         UPDATE bes_bestelopdr
            SET bes_bestelopdr_status = 4                     -- In bestelling
          WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key;
      END IF;

      -- Zeg dat alles geleverd is wat besteld is.
      UPDATE bes_bestelopdr_item
         SET bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal
       WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key;

      bes.updatebestelopdrstatus (rec.bes_bestelopdr_key, NULL);
   END LOOP;

   v_errormsg := 'Fout sluiten bestelaanvraag';

   FOR rec IN cbi
   LOOP
      -- Sluit alle aanvraagregels die nu compleet geleverd zijn.
      UPDATE bes_bestelling_item
         SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal
       WHERE bes_bestelling_key = rec.bes_bestelling_key;

      bes.updatebestellingstatus (rec.bes_bestelling_key, NULL);
   END LOOP;

   COMMIT;

   v_errormsg := 'Fout toekennen @nedtrain.nl-rol';

   SELECT COUNT ( * )
     INTO v_count
     FROM prs_perslid p
    WHERE UPPER (p.prs_perslid_email) LIKE '%@NEDTRAIN.NL%'
          AND NOT EXISTS
                (SELECT 1
                   FROM fac_gebruikersgroep gg
                  WHERE gg.fac_groep_key = 122
                        AND gg.prs_perslid_key = p.prs_perslid_key);

   INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
      SELECT 122, prs_perslid_key
        FROM prs_perslid p
       WHERE UPPER (p.prs_perslid_email) LIKE '%@NEDTRAIN.NL%'
             AND NOT EXISTS               -- Nog niet in autorisatiegroep 122!
                   (SELECT 1
                      FROM fac_gebruikersgroep gg
                     WHERE gg.fac_groep_key = 122
                           AND gg.prs_perslid_key = p.prs_perslid_key);

   COMMIT;
/*
   v_errormsg := 'Fout afpakken @nedtrain.nl-rol';

   SELECT COUNT ( * )
     INTO v_count
     FROM fac_gebruikersgroep gg
    WHERE gg.fac_groep_key = 122
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_perslid p
                  WHERE UPPER (p.prs_perslid_email) LIKE '%@NEDTRAIN.NL%'
                        AND p.prs_perslid_key = gg.prs_perslid_key);

   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 122
               AND NOT EXISTS
                     (SELECT 1
                        FROM prs_perslid p
                       WHERE UPPER (p.prs_perslid_email) LIKE '%@NEDTRAIN.NL%'
                             AND p.prs_perslid_key = gg.prs_perslid_key);

   COMMIT;
*/
   v_errormsg := 'Fout toekennen niet-@nsstations.nl-rol';

   SELECT COUNT ( * )
     INTO v_count
     FROM prs_perslid p
    WHERE UPPER (p.prs_perslid_email) NOT LIKE '%@NSSTATIONS.NL%'
          AND NOT EXISTS
                (SELECT 1
                   FROM fac_gebruikersgroep gg
                  WHERE gg.fac_groep_key = 681
                        AND gg.prs_perslid_key = p.prs_perslid_key);

   INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
      SELECT 681, prs_perslid_key
        FROM prs_perslid p
       WHERE UPPER (p.prs_perslid_email) NOT LIKE '%@NSSTATIONS.NL%'
             AND NOT EXISTS               -- Nog niet in autorisatiegroep 681!
                   (SELECT 1
                      FROM fac_gebruikersgroep gg
                     WHERE gg.fac_groep_key = 681
                           AND gg.prs_perslid_key = p.prs_perslid_key);

   COMMIT;
/*
   v_errormsg := 'Fout afpakken niet-@nsstations.nl-rol';

   SELECT COUNT ( * )
     INTO v_count
     FROM fac_gebruikersgroep gg
    WHERE gg.fac_groep_key = 681
          AND EXISTS
                (SELECT 1
                   FROM prs_perslid p
                  WHERE UPPER (p.prs_perslid_email) LIKE '%@NSSTATIONS.NL%'
                        AND p.prs_perslid_key = gg.prs_perslid_key);

   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 681
               AND EXISTS
                     (SELECT 1
                        FROM prs_perslid p
                       WHERE UPPER (p.prs_perslid_email) LIKE '%@NSSTATIONS.NL%'
                             AND p.prs_perslid_key = gg.prs_perslid_key);

   COMMIT;
*/
   v_errormsg := 'Fout inactiveren persoon';
   v_count := 0;

   FOR rec
      IN (  SELECT p.prs_perslid_key, p.prs_perslid_oslogin, COUNT (vp.prs_perslid_key) aant
              FROM prs_v_aanwezigperslid p, prs_v_verplichting_keys vp
             WHERE TO_CHAR (SYSDATE, 'dd') = '01' -- Op 1e van de maand >180d niet ingelogd
                   AND p.prs_perslid_login < TRUNC (ADD_MONTHS (SYSDATE, -12), 'mm')
                   AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
                   AND EXISTS
                         (SELECT 1
                            FROM prs_v_afdeling_boom ab
                           WHERE ab.prs_bedrijf_key = 22                              -- NS
                                 AND ab.prs_afdeling_key = p.prs_afdeling_key)
          GROUP BY p.prs_perslid_key, p.prs_perslid_oslogin)
   LOOP
      BEGIN
         IF rec.aant = 0
         THEN
            UPDATE prs_perslid
               SET prs_perslid_verwijder = SYSDATE
             WHERE prs_perslid_key = rec.prs_perslid_key;

            v_count := v_count + 1;
         ELSE
            fac.writelog (
               p_applname, 'I',
               '[' || rec.prs_perslid_oslogin || ']/#Verplichtingen: ' || TO_CHAR (rec.aant),
               'Persoon niet geinactiveerd');
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN     -- Kennelijk heeft persoon toch nog ernstige verplichtingen!
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.writelog (
               p_applname, 'E',
               '[' || rec.prs_perslid_oslogin || ']/' || v_errormsg,
               'Fout inactiveren persoon');
      END;
   END LOOP;

   fac.writelog (p_applname, 'S', '#Personen geinactiveerd:' || TO_CHAR (v_count), '');

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.writelog (p_applname, 'E', v_errormsg,
                    'Proces AUTOCLOSE afgebroken!');
END kfns_select_autoclose;
/


/* Formatted on 12-9-2014 17:42:24 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_imp_bes_artikel_sync
(
   fclt_f_catalogusnaam,
   leverancier,
   catdatum,
   artikelnr,
   groep,
   omschrijving,
   prijs,
   eenheid,
   picture,
   orderaantal,
   tax,
   duedate,
   inkoopprijs,
   minimum,
   staffeltabel,
   wijzigdagen,
   annuleerdagen,
   opmerking
)
AS
   SELECT td.ins_discipline_omschrijving,
          b.prs_bedrijf_naam,
          TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'),
          sd.bes_srtdeel_nr,
          sg.bes_srtgroep_omschrijving,
          sd.bes_srtdeel_omschrijving,
          TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)),
          sd.bes_srtdeel_eenheid,
          sd.bes_srtdeel_image,
          TO_CHAR (sd.bes_srtdeel_veelvoud),
          TO_CHAR (sd.bes_srtdeel_btw),
          TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd'),
          TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)),
          NULL,
          bs.bes_staffeltabel_naam,
          TO_CHAR (sd.bes_srtdeel_wijzigdagen),
          TO_CHAR (sd.bes_srtdeel_annuleerdagen),
          sd.bes_srtdeel_opmerking
     FROM ins_tab_discipline td, bes_srtgroep sg,
          bes_srtdeel sd,
          prs_bedrijf b,
          bes_staffeltabel bs
    WHERE     td.ins_discipline_module = 'BES'
          AND td.ins_discipline_verwijder IS NULL
          AND td.ins_discipline_key = sg.ins_discipline_key
          AND sg.bes_srtgroep_verwijder IS NULL
          AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
          AND sd.bes_srtdeel_verwijder IS NULL
          AND sd.prs_bedrijf_key = b.prs_bedrijf_key
          AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key;

/* Formatted on 30-1-2014 9:56:26 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_rap_mldinsres_qrc
(
   fclt_f_soortmelding,
   fclt_f_locatie,
   fclt_f_gebouw,
   fclt_f_verdieping,
   plaats,
   ruimte_key,
   ruimtefunctie,
   fclt_f_objectdiscipline,
   fclt_f_objectgroep,
   objectsoort_key,
   fclt_f_objectsoort,
   objectsoort_code,
   deel_key,
   deel_omschrijving,
   deel_upper,
   hide_f_bookmark_id,
   variabele
)
AS
   SELECT 'Melding op object',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          o.alg_plaatsaanduiding plaats,
          NULL ruimte_key,
          sr.alg_srtruimte_omschrijving,
          disc.ins_discipline_omschrijving,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_key,
          sd.ins_srtdeel_omschrijving,
          sd.ins_srtdeel_code,
          d.ins_deel_key,
          d.ins_deel_omschrijving,
          d.ins_deel_upper,
          b.fac_bookmark_id,
          'INS_KEY'
     FROM fac_bookmark b,
          ins_v_aanwezigdeel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          ins_discipline disc,
          ins_v_alg_overzicht o,
          alg_locatie l,
          alg_ruimte r,
          alg_srtruimte sr
    WHERE UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/INS_DEEL.ASP'
          --AND TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('xx062015', 'ddmmyyyy')
          AND d.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND d.ins_deel_parent_key IS NULL
          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = disc.ins_discipline_key
          AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys
          AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type
          AND d.ins_alg_locatie_key = o.alg_locatie_key          -- redundant?
          AND o.alg_locatie_key = l.alg_locatie_key
          AND d.ins_alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
   UNION ALL
   SELECT 'Melding op ruimte',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          o.alg_plaatsaanduiding plaats,
          r.alg_ruimte_key ruimte_key,
          sr.alg_srtruimte_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'RUIMTE_KEY'
     FROM fac_bookmark b,
          alg_v_aanwezigruimte r,
          alg_srtruimte sr,
          ins_v_alg_overzicht o,
          alg_locatie l
    WHERE UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
          AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
          AND r.alg_ruimte_key = o.alg_onroerendgoed_keys
          AND o.alg_onroerendgoed_type = 'R'
          AND o.alg_locatie_key = l.alg_locatie_key
   UNION ALL
   SELECT 'Melding op gebouw',
          l.alg_locatie_omschrijving,
          g.alg_gebouw_omschrijving,
          NULL alg_verdieping_omschrijving,
          l.alg_locatie_code || '-' || g.alg_gebouw_code plaats,
          g.alg_gebouw_key ruimte_key,
          sg.alg_srtgebouw_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'GEBOUW_KEY'
     FROM fac_bookmark b,
          alg_v_aanweziggebouw g,
          alg_v_aanwezigsrtgebouw sg,
          alg_locatie l
    WHERE UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
          AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0
          AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+)
          AND g.alg_locatie_key = l.alg_locatie_key
   UNION ALL
   SELECT 'Reserveer ruimte',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          rr.res_ruimte_nr plaats,
          rar.res_ruimte_key ruimte_key,
          sr.alg_srtruimte_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'RES_RUIMTE_KEY'
     FROM fac_bookmark b,
          res_ruimte rr,
          (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
               FROM res_alg_ruimte
              WHERE res_alg_ruimte_verwijder IS NULL
           GROUP BY res_ruimte_key) rar,
          alg_ruimte r,
          alg_srtruimte sr,
          ins_v_alg_overzicht o,
          alg_locatie l
    WHERE UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/RESERVERINGEN.ASP'
          --AND rr.res_discipline_key = -1
          AND rr.res_ruimte_key = rar.res_ruimte_key
          AND rar.alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
          AND r.alg_ruimte_key = o.alg_onroerendgoed_keys
          AND o.alg_onroerendgoed_type = 'R'
          AND o.alg_locatie_key = l.alg_locatie_key;

-- Vastgoed views themas en labels
/*
CREATE OR REPLACE VIEW kfns_v_thema_basispakket
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT r.alg_ruimte_key,
             dn.mld_dienstniveau_omschr
          || ' ('
          || mld_dienstniveau_opmerking
          || ')',
          r.mld_dienstniveau_key
     FROM alg_v_aanwezigruimte r, mld_dienstniveau dn
    WHERE r.mld_dienstniveau_key = dn.mld_dienstniveau_key;
*/

CREATE OR REPLACE VIEW kfns_v_thema_vloerafwerking
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr
     FROM alg_kenmerk k,
          fac_kenmerkdomein rk,
          fac_usrdata ud,
          alg_onrgoedkenmerk ok,
          alg_v_aanwezigruimte rr
    WHERE     k.alg_kenmerk_key = 1011
          AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key
          AND rk.fac_usrtab_key = ud.fac_usrtab_key
          AND TO_CHAR (ud.fac_usrdata_key) = ok.alg_onrgoedkenmerk_waarde
          AND rr.alg_ruimte_key = ok.alg_onrgoed_key;

CREATE OR REPLACE VIEW kfns_v_thema_leegstand
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT ogk.alg_onrgoed_key, ud.fac_usrdata_omschr, ud.fac_usrdata_key
     FROM alg_onrgoedkenmerk ogk, fac_usrdata ud
    WHERE ogk.alg_kenmerk_key = 1010                              -- Leegstand
          AND ogk.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key);

CREATE OR REPLACE VIEW kfns_v_thema_wpopp
(
   alg_ruimte_key,
   waarde
)
AS
     SELECT r.alg_ruimte_key,
            ROUND (
               (r.alg_ruimte_bruto_vloeropp
                + r.alg_ruimte_bruto_vloeropp
                  * COALESCE (
                       fac.safe_to_number (ogkg.alg_onrgoedkenmerk_waarde),
                       0)
                + r.alg_ruimte_bruto_vloeropp
                  * COALESCE (
                       fac.safe_to_number (ogkv.alg_onrgoedkenmerk_waarde),
                       0))
               / SUM (fac.safe_to_number (ogkr.alg_onrgoedkenmerk_waarde)),
               2)
       FROM alg_v_aanwezigruimte r,
            alg_onrgoedkenmerk ogkr,
            alg_verdieping v,
            (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
               FROM alg_onrgoedkenmerk ogk
              WHERE alg_kenmerk_key = 1020) ogkv, -- Factor niet verhuurbaar op verdieping
            (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
               FROM alg_onrgoedkenmerk ogk
              WHERE alg_kenmerk_key = 1006) ogkg -- Factor niet verhuurbaar op gebouw
      WHERE     r.alg_ruimte_key = ogkr.alg_onrgoed_key
            AND ogkr.alg_kenmerk_key IN (1012, 1013, 1014, 1015) -- WPs van verschillende types
            AND r.alg_verdieping_key = v.alg_verdieping_key
            AND v.alg_verdieping_key = ogkv.alg_onrgoed_key(+)
            AND v.alg_gebouw_key = ogkg.alg_onrgoed_key(+)
   GROUP BY r.alg_ruimte_key,
            r.alg_ruimte_bruto_vloeropp,
            ogkg.alg_onrgoedkenmerk_waarde,
            ogkv.alg_onrgoedkenmerk_waarde;

-- UNUSED???
CREATE OR REPLACE VIEW kfns_v_thema_wptype
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT r.alg_ruimte_key,
          DECODE (ogk.aantal, 1, ogk.omschrijving, 'meerdere...'),
          DECODE (ogk.aantal, 1, ogk.alg_kenmerk_key, '1')
     FROM alg_v_aanwezigruimte r,
          (  SELECT MIN (k.alg_kenmerk_key) alg_kenmerk_key,
                    COUNT (k.alg_kenmerk_key) aantal,
                    REPLACE (MIN (k.alg_kenmerk_omschrijving), 'Aantal ', '') omschrijving,
                    alg_onrgoed_key
               FROM alg_onrgoedkenmerk ogk, alg_kenmerk k
              WHERE ogk.alg_kenmerk_key = k.alg_kenmerk_key
                    AND k.alg_kenmerk_key IN (1012, 1013, 1014, 1015) -- WPs van verschillende types
           GROUP BY alg_onrgoed_key) ogk
    WHERE r.alg_ruimte_key = ogk.alg_onrgoed_key;

/* Formatted on 25-2-2016 9:48:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_thema_serviceniveau
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr
     FROM alg_kenmerk k,
          fac_kenmerkdomein rk,
          fac_usrdata ud,
          alg_onrgoedkenmerk ok,
          alg_v_aanwezigruimte rr
    WHERE     k.alg_kenmerk_key = 1041             -- Serviceniveau schoonmaak
          AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key
          AND rk.fac_usrtab_key = ud.fac_usrtab_key
          AND TO_CHAR (ud.fac_usrdata_key) = ok.alg_onrgoedkenmerk_waarde
          AND ok.alg_onrgoed_key = rr.alg_ruimte_key;

/* Formatted on 4-8-2015 13:25:05 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_noti_te_factureren
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   WITH cp
           AS (SELECT cp1.prs_bedrijf_key, p1.prs_perslid_key
                 FROM prs_v_aanwezigkenmerklink kl1,
                      prs_contactpersoon cp1,
                      prs_v_aanwezigperslid p1
                WHERE     kl1.prs_kenmerk_key = 1040
                      AND kl1.prs_link_key = cp1.prs_contactpersoon_key
                      AND cp1.prs_contactpersoon_verwijder IS NULL
                      AND cp1.prs_perslid_key = p1.prs_perslid_key)
   SELECT DISTINCT sn.fac_srtnotificatie_code,
          NULL,
          cp.prs_perslid_key, -- Leverancier-contactpersonen (met noti-vinkje)
          REPLACE (REPLACE (sn.fac_srtnotificatie_oms, '##LEV##', v.prs_bedrijf_naam), '##MND##', v.maand),
          r.fac_usrrap_key,
          v.extra_key
     FROM kfns_v_frozen_fact v,
          cp cp,
          fac_usrrap r,
          fac_srtnotificatie sn
    WHERE     TO_CHAR (SYSDATE, 'dd') = '11'     -- Alleen de 11e van de maand
          AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
          AND v.extra_key = cp.prs_bedrijf_key
          AND UPPER (r.fac_usrrap_view_name) = 'KFNS_V_FROZEN_FACT'
          AND sn.fac_srtnotificatie_code = 'CUST01'
   UNION ALL
   SELECT DISTINCT sn.fac_srtnotificatie_code,
          NULL,
          gg.prs_perslid_key,                            -- NS-contactpersonen
          REPLACE (sn.fac_srtnotificatie_oms, '##MND##', v.maand),
          r.fac_usrrap_key,
          NULL                      -- Geen extra_key, dus de hele rapportage!
     FROM kfns_v_frozen_fact v,
          fac_gebruikersgroep gg,
          fac_usrrap r,
          fac_srtnotificatie sn
    WHERE     TO_CHAR (SYSDATE, 'dd') = '11'     -- Alleen de 11e van de maand
          AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')
          AND gg.fac_groep_key = 381                     -- NS Finance/Control
          AND UPPER (r.fac_usrrap_view_name) = 'KFNS_V_FROZEN_FACT'
          AND sn.fac_srtnotificatie_code = 'CUST02';


-- Basis voor notificaties naar artikeleigenaren elke maandag (voorraad) en 1e
-- dag van elk kwartaal (verbruik); voor de output geldt:
-- Dat deze resp. actuele voorraad in magazijn en verbruik/uitgifte in periode
-- toont.
-- Dat de data per artikelgroep(/eigenaar) wordt genotificeerd (via extra_key-
-- principe).
/* Formatted on 15-1-2016 13:58:02 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_mag_voorraad
(
   extra_key,     -- fac_usrdata_key in ET-Artikeleigenaren (per Artikelgroep)
   artikelgroep,
   artikeleigenaar,
   --afleveradres,
   artikelnummer,
   artikelomschrijving,
   voorraad,
   eenheid,
   min_voorraad,
   artikelprijs,
   voorraadexcl,
   voorraadincl
)
AS
   SELECT ud.fac_usrdata_key,
          --TRIM (ud.fac_usrdata_code),
          sg.bes_srtgroep_omschrijving,
          --TRIM (ud.fac_usrdata_omschr),
          sd.bes_srtdeel_opmerking,
          --'DD-Daalsedijk 14',
          sd.bes_srtdeel_nr,
          sd.bes_srtdeel_omschrijving,
          --x.extern_geleverd
          --- COALESCE (
          --     CEIL (x.intern_besteld / sd.bes_srtdeel_voorraadfactor),
          --     0),
          x.extern_geleverd
          - CEIL(x.intern_besteld
                 / DECODE (sd.bes_srtdeel_voorraadfactor,
                           NULL, 1,
                           0, 1,
                           sd.bes_srtdeel_voorraadfactor)),
          sd.bes_srtdeel_eenheid,
          sd.bes_srtdeel_voorraadmin,
          bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL),
          (x.extern_geleverd
           - CEIL(x.intern_besteld
                  / DECODE (sd.bes_srtdeel_voorraadfactor,
                            NULL, 1,
                            0, 1,
                            sd.bes_srtdeel_voorraadfactor)))
          * bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL),
          (x.extern_geleverd
           - CEIL(x.intern_besteld
                  / DECODE (sd.bes_srtdeel_voorraadfactor,
                            NULL, 1,
                            0, 1,
                            sd.bes_srtdeel_voorraadfactor)))
          * bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
          * ( (100 + sd.bes_srtdeel_btw) / 100)                  -- Afronding?
     FROM bes_srtgroep sg,
          bes_srtdeel sd,
          (  SELECT inkoop_disc_key,
                    bes_srtdeel_nr,
                    SUM (intern_besteld) intern_besteld,
                    SUM (extern_besteld) extern_besteld,
                    SUM (extern_geleverd) extern_geleverd
               FROM (                                        -- Intern besteld
                     SELECT   dp.bes_ins_discipline_key_inkoop inkoop_disc_key,
                              sd.bes_srtdeel_nr,
                              SUM (bi.bes_bestelling_item_aantal) intern_besteld,
                              0 extern_besteld,
                              0 extern_geleverd
                         FROM bes_bestelling b,
                              bes_bestelling_item bi,
                              bes_srtdeel sd,
                              bes_srtgroep sg,
                              bes_discipline bd,
                              bes_disc_params dp
                        WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                              AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                              AND sd.bes_srtdeel_verwijder IS NULL
                              AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                              AND sg.ins_discipline_key = bd.ins_discipline_key
                              AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                              AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
                     GROUP BY sd.bes_srtdeel_nr,
                              dp.bes_ins_discipline_key_inkoop
                     UNION ALL                               -- Extern besteld
                       SELECT bd.ins_discipline_key inkoop_disc_key,
                              sd.bes_srtdeel_nr,
                              0 intern_besteld,
                              SUM (bi.bes_bestelling_item_aantal) extern_besteld,
                              0 extern_geleverd
                         FROM bes_bestelling b,
                              bes_bestelling_item bi,
                              bes_srtdeel sd,
                              bes_srtgroep sg,
                              bes_discipline bd,
                              bes_disc_params dp
                        WHERE     b.bes_bestelling_status IN (2, 3, 4, 5)
                              AND b.bes_bestelling_key = bi.bes_bestelling_key
                              AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                              AND sd.bes_srtdeel_verwijder IS NULL
                              AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                              AND sg.ins_discipline_key = bd.ins_discipline_key
                              AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                              AND dp.bes_ins_discipline_key_inkoop IS NULL
                              AND dp.bes_ins_discipline_key IN
                                       (SELECT bes_ins_discipline_key_inkoop
                                          FROM bes_disc_params
                                         WHERE bes_ins_discipline_key_inkoop IS NOT NULL)
                     GROUP BY bes_srtdeel_nr, bd.ins_discipline_key
                     UNION ALL                              -- Extern geleverd
                       SELECT bd.ins_discipline_key inkoop_disc_key,
                              sd.bes_srtdeel_nr,
                              0 intern_besteld,
                              0 extern_besteld,
                              SUM (bi.bes_bestelling_item_aantal) extern_geleverd
                         FROM bes_bestelling b,
                              bes_bestelling_item bi,
                              bes_srtdeel sd,
                              bes_srtgroep sg,
                              bes_discipline bd,
                              bes_disc_params dp
                        WHERE     b.bes_bestelling_status IN (6, 7)
                              AND b.bes_bestelling_key = bi.bes_bestelling_key
                              AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                              AND sd.bes_srtdeel_verwijder IS NULL
                              AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                              AND sg.ins_discipline_key = bd.ins_discipline_key
                              AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                              AND dp.bes_ins_discipline_key_inkoop IS NULL
                              AND dp.bes_ins_discipline_key IN
                                       (SELECT bes_ins_discipline_key_inkoop
                                          FROM bes_disc_params
                                         WHERE bes_ins_discipline_key_inkoop IS NOT NULL)
                     GROUP BY bes_srtdeel_nr, bd.ins_discipline_key)
           GROUP BY inkoop_disc_key, bes_srtdeel_nr) x,
          (  SELECT TRIM (fac_usrdata_upper) fac_usrdata_upper,
                    MIN (fac_usrdata_key) fac_usrdata_key
               FROM fac_v_aanwezigusrdata
              WHERE fac_usrtab_key = 42
           GROUP BY TRIM (fac_usrdata_upper)) ud           -- Artikeleigenaren
    WHERE     sg.ins_discipline_key = 402  -- Beperken tot Magazijn-Ontvangst?
          AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
          AND COALESCE (sd.bes_srtdeel_vervaldatum, SYSDATE) > TRUNC(SYSDATE)
          AND sd.bes_srtdeel_nr = x.bes_srtdeel_nr(+)
          AND UPPER (TRIM (sg.bes_srtgroep_omschrijving)) = ud.fac_usrdata_upper(+);

CREATE OR REPLACE VIEW kfns_v_rap_mag_voorraad
(
   fclt_f_artikelgroep,
   fclt_f_eigenaar,
   --afleveradres,
   artikelnummer,
   artikelomschrijving,
   voorraad,
   eenheid,
   min_voorraad,
   artikelprijs,
   voorraadexcl,
   voorraadincl
)
AS
   SELECT artikelgroep,
          artikeleigenaar,
          --afleveradres,
          artikelnummer,
          artikelomschrijving,
          voorraad,
          eenheid,
          min_voorraad,
          artikelprijs,
          voorraadexcl,
          voorraadincl
     FROM kfns_v_mag_voorraad;

-- Alle verbruik door opdrachtgevers behalve 173=Distributiecentrum NS (alleen tbv. voorraadmutatie!)
/* Formatted on 8-10-2015 16:30:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_mag_verbruik                   -- Intern besteld
(
   kwartaal,
   extra_key,     -- fac_usrdata_key in ET-Artikeleigenaren (per Artikelgroep)
   artikelgroep,
   artikeleigenaar,
   bestelnr,
   besteldatum,
   besteller,
   artikelnummer,
   artikelomschrijving,
   eenheid,
   aantal
)
AS
   SELECT TO_CHAR (x.bes_bestelling_datum, 'yyyy') || '-Q' || TO_CHAR (x.bes_bestelling_datum, 'q'),
          x.fac_usrdata_key,
          --TRIM (ud.fac_usrdata_code),
          x.bes_srtgroep_omschrijving,
          --TRIM (ud.fac_usrdata_omschr),
          x.bes_srtdeel_opmerking,
          TO_CHAR (x.bes_bestelling_key),
          x.bes_bestelling_datum,
          og.opdrachtgever,
          x.bes_srtdeel_nr,
          x.bes_srtdeel_omschrijving,
          x.bes_srtdeel_eenheid,
          x.bes_bestelling_item_aantal
     FROM    (SELECT b.bes_bestelling_key,
                     b.bes_bestelling_datum,
                     ud.fac_usrdata_key,
                     sg.bes_srtgroep_omschrijving,
                     sd.bes_srtdeel_opmerking,
                     sd.bes_srtdeel_nr,
                     sd.bes_srtdeel_omschrijving,
                     sd.bes_srtdeel_eenheid,
                     bi.bes_bestelling_item_aantal
                FROM bes_bestelling b,
                     bes_bestelling_item bi,
                     bes_srtdeel sd,
                     bes_srtgroep sg,
                     bes_discipline bd,
                     bes_disc_params dp,
                     (  SELECT TRIM (fac_usrdata_upper) fac_usrdata_upper,
                               MIN (fac_usrdata_key) fac_usrdata_key
                          FROM fac_v_aanwezigusrdata
                         WHERE fac_usrtab_key = 42
                      GROUP BY TRIM (fac_usrdata_upper)) ud -- Artikeleigenaren
               WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                     AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                     AND sd.bes_srtdeel_verwijder IS NULL
                     AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                     AND sg.ins_discipline_key = bd.ins_discipline_key
                     AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                     --AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
                     AND dp.bes_ins_discipline_key_inkoop = 402 -- Magazijn-Ontvangst?
                     AND UPPER (TRIM (sg.bes_srtgroep_omschrijving)) = ud.fac_usrdata_upper(+)) x
          LEFT JOIN
             (SELECT kb.bes_bestelling_key,
                     ud.fac_usrdata_key opdrachtgever_key,
                     ud.fac_usrdata_omschr opdrachtgever
                FROM bes_kenmerkbestell kb, fac_usrdata ud
               WHERE kb.bes_kenmerk_key = 2                   -- Opdrachtgever
                     AND fac.safe_to_number (kb.bes_kenmerkbestell_waarde) = ud.fac_usrdata_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM bes_kenmerkbestell
                             WHERE bes_kenmerk_key = 2
                                   AND bes_kenmerkbestell_verwijder IS NULL
                                   AND bes_bestelling_key = kb.bes_bestelling_key
                                   AND bes_kenmerkbestell_key != kb.bes_kenmerkbestell_key)) og
          ON x.bes_bestelling_key = og.bes_bestelling_key
    WHERE COALESCE (og.opdrachtgever_key, -1) != 173;

CREATE OR REPLACE VIEW kfns_v_rap_mag_verbruik               -- Intern besteld
(
   fclt_f_kwartaal,
   fclt_f_artikelgroep,
   fclt_f_bestelnr,
   besteldatum,
   fclt_f_besteller,
   artikelnummer,
   artikelomschrijving,
   eenheid,
   aantal
)
AS
   SELECT kwartaal,
          artikelgroep,
          bestelnr,
          besteldatum,
          besteller,
          artikelnummer,
          artikelomschrijving,
          eenheid,
          aantal
     FROM kfns_v_mag_verbruik;

CREATE OR REPLACE VIEW kfns_v_rap_mag_doorbelasting
(
   hide_f_sortering,
   fclt_x_kwartaal,
   fclt_f_artikelgroep,
   fclt_f_eigenaar,
   fclt_f_bestelnr,
   besteldatum,
   aantalregels,
   artikelnummer,
   artikelomschrijving,
   --eenheid,
   aantal,
   fclt_f_besteller,
   verdeling,
   orderbedrag,
   orderregel,
   sbe,
   verpakking,
   totaal
)
AS
   SELECT x.bes_srtgroep_omschrijving || TO_CHAR (x.bes_bestelling_datum, 'yymmddhh24miss') || x.bes_srtdeel_nr,
          TO_CHAR (x.bes_bestelling_datum, 'yyyy') || '-Q' || TO_CHAR (x.bes_bestelling_datum, 'q'),
          x.bes_srtgroep_omschrijving,
          x.bes_srtdeel_opmerking,
          TO_CHAR (x.bes_bestelling_key),
          x.bes_bestelling_datum,
          '1',
          x.bes_srtdeel_nr,
          x.bes_srtdeel_omschrijving,
          --x.bes_srtdeel_eenheid,
          TO_CHAR (x.bes_bestelling_item_aantal),
          og.opdrachtgever,
          --REPLACE (TO_CHAR (ROUND (1 / br.verdeling, 5)), '.', ',') verdeling,
          REPLACE (TO_CHAR (1 / br.verdeling, '0D99999'), '.', ',') verdeling,
          --ROUND (9.69 / br.verdeling, 2) orderbedrag,
          ROUND (x.orderbedrag / br.verdeling, 2) orderbedrag,
          --1.61 orderregel,
          x.orderregel,
          --x.bes_bestelling_item_aantal * 0.69 sbe,
          x.bes_bestelling_item_aantal * x.sbe,
          --ROUND (0.97 / br.verdeling, 2) verpakking,
          ROUND (x.verpakking / br.verdeling, 2) verpakking,
            ROUND (x.orderbedrag / br.verdeling, 2)
          + x.orderregel
          + (x.bes_bestelling_item_aantal * x.sbe)
          + ROUND (x.verpakking / br.verdeling, 2)
             totaal
     FROM (SELECT sg.bes_srtgroep_omschrijving,
                  sd.bes_srtdeel_opmerking,
                  b.bes_bestelling_key,
                  b.bes_bestelling_datum,
                  sd.bes_srtdeel_nr,
                  sd.bes_srtdeel_omschrijving,
                  --sd.bes_srtdeel_eenheid,
                  bi.bes_bestelling_item_aantal,
                  (SELECT MAX (ud1.fac_usrdata_prijs)
                     FROM fac_usrdata ud1
                    WHERE COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                          AND ud1.fac_usrdata_upper = 'ORDERBEDRAG'
                          AND NOT EXISTS
                                (SELECT 1
                                   FROM fac_usrdata ud2
                                  WHERE COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                                        AND ud2.fac_usrdata_upper = 'ORDERBEDRAG'
                                        AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) <
                                              COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999)))
                     orderbedrag,
                  (SELECT MAX (ud1.fac_usrdata_prijs)
                     FROM fac_usrdata ud1
                    WHERE COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                          AND ud1.fac_usrdata_upper = 'ORDERREGEL'
                          AND NOT EXISTS
                                (SELECT 1
                                   FROM fac_usrdata ud2
                                  WHERE COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                                        AND ud2.fac_usrdata_upper = 'ORDERREGEL'
                                        AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) <
                                              COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999)))
                     orderregel,
                  (SELECT MAX (ud1.fac_usrdata_prijs)
                     FROM fac_usrdata ud1
                    WHERE COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                          AND ud1.fac_usrdata_upper = 'SBE'
                          AND NOT EXISTS
                                (SELECT 1
                                   FROM fac_usrdata ud2
                                  WHERE COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                                        AND ud2.fac_usrdata_upper = 'SBE'
                                        AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) <
                                              COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999)))
                     sbe,
                  (SELECT MAX (ud1.fac_usrdata_prijs)
                     FROM fac_usrdata ud1
                    WHERE COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                          AND ud1.fac_usrdata_upper = 'VERPAKKING'
                          AND NOT EXISTS
                                (SELECT 1
                                   FROM fac_usrdata ud2
                                  WHERE COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) > b.bes_bestelling_datum
                                        AND ud2.fac_usrdata_upper = 'VERPAKKING'
                                        AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE + 999) <
                                              COALESCE (ud1.fac_usrdata_vervaldatum, SYSDATE + 999)))
                     verpakking
             FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg
            WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                  AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                  --AND sd.bes_srtdeel_verwijder IS NULL
                  AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                  AND sg.ins_discipline_key = 401) x      -- Magazijn-Uitgifte
          LEFT JOIN (  SELECT bi.bes_bestelling_key, COUNT ( * ) verdeling
                         FROM bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg
                        WHERE     bi.bes_srtdeel_key = sd.bes_srtdeel_key
                              --AND sd.bes_srtdeel_verwijder IS NULL
                              AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                              AND sg.ins_discipline_key = 401 -- Magazijn-Uitgifte
                     GROUP BY bi.bes_bestelling_key) br
             ON x.bes_bestelling_key = br.bes_bestelling_key
          LEFT JOIN (SELECT kb.bes_bestelling_key, ud.fac_usrdata_omschr opdrachtgever
                       FROM bes_kenmerkbestell kb, fac_usrdata ud
                      WHERE kb.bes_kenmerk_key = 2            -- Opdrachtgever
                            AND fac.safe_to_number (kb.bes_kenmerkbestell_waarde) = ud.fac_usrdata_key
                            AND NOT EXISTS
                                  (SELECT 1
                                     FROM bes_kenmerkbestell
                                    WHERE bes_kenmerk_key = 2
                                          AND bes_kenmerkbestell_verwijder IS NULL
                                          AND bes_bestelling_key = kb.bes_bestelling_key
                                          AND bes_kenmerkbestell_key != kb.bes_kenmerkbestell_key)) og
             ON x.bes_bestelling_key = og.bes_bestelling_key;
/*
   UNION ALL
     SELECT x.bes_srtgroep_omschrijving || '1',
               TO_CHAR (x.bes_bestelling_datum, 'yyyy')
            || '-Q'
            || TO_CHAR (x.bes_bestelling_datum, 'q'),
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            --NULL,
            NULL,
            NULL,
            NULL verdeling,
            NULL orderbedrag,
            NULL orderregel,
            NULL sbe,
            NULL verpakking,
            --SUM(  ROUND (9.69 / br.verdeling, 2)
            --    + 1.61
            --    + (x.bes_bestelling_item_aantal * 0.69)
            --    + ROUND (0.97 / br.verdeling, 2))
            --   totaal
            SUM(  ROUND (x.orderbedrag / br.verdeling, 2)
                + x.orderregel
                + (x.bes_bestelling_item_aantal * x.sbe)
                + ROUND (x.verpakking / br.verdeling, 2))
               totaal
       FROM    (SELECT sg.bes_srtgroep_omschrijving,
                       bi.bes_bestelling_key,
                       b.bes_bestelling_datum,
                       bi.bes_bestelling_item_aantal,
                       (SELECT MAX (ud1.fac_usrdata_prijs)
                          FROM fac_usrdata ud1
                         WHERE COALESCE (ud1.fac_usrdata_vervaldatum,
                                         SYSDATE + 999) >
                                  b.bes_bestelling_datum
                               AND ud1.fac_usrdata_upper = 'ORDERBEDRAG'
                               AND NOT EXISTS
                                     (SELECT 1
                                        FROM fac_usrdata ud2
                                       WHERE COALESCE (
                                                ud2.fac_usrdata_vervaldatum,
                                                SYSDATE + 999) >
                                                b.bes_bestelling_datum
                                             AND ud2.fac_usrdata_upper =
                                                   'ORDERBEDRAG'
                                             AND COALESCE (
                                                   ud2.fac_usrdata_vervaldatum,
                                                   SYSDATE + 999) <
                                                   COALESCE (
                                                      ud1.fac_usrdata_vervaldatum,
                                                      SYSDATE + 999)))
                          orderbedrag,
                       (SELECT MAX (ud1.fac_usrdata_prijs)
                          FROM fac_usrdata ud1
                         WHERE COALESCE (ud1.fac_usrdata_vervaldatum,
                                         SYSDATE + 999) >
                                  b.bes_bestelling_datum
                               AND ud1.fac_usrdata_upper = 'ORDERREGEL'
                               AND NOT EXISTS
                                     (SELECT 1
                                        FROM fac_usrdata ud2
                                       WHERE COALESCE (
                                                ud2.fac_usrdata_vervaldatum,
                                                SYSDATE + 999) >
                                                b.bes_bestelling_datum
                                             AND ud2.fac_usrdata_upper =
                                                   'ORDERREGEL'
                                             AND COALESCE (
                                                   ud2.fac_usrdata_vervaldatum,
                                                   SYSDATE + 999) <
                                                   COALESCE (
                                                      ud1.fac_usrdata_vervaldatum,
                                                      SYSDATE + 999)))
                          orderregel,
                       (SELECT MAX (ud1.fac_usrdata_prijs)
                          FROM fac_usrdata ud1
                         WHERE COALESCE (ud1.fac_usrdata_vervaldatum,
                                         SYSDATE + 999) >
                                  b.bes_bestelling_datum
                               AND ud1.fac_usrdata_upper = 'SBE'
                               AND NOT EXISTS
                                     (SELECT 1
                                        FROM fac_usrdata ud2
                                       WHERE COALESCE (
                                                ud2.fac_usrdata_vervaldatum,
                                                SYSDATE + 999) >
                                                b.bes_bestelling_datum
                                             AND ud2.fac_usrdata_upper = 'SBE'
                                             AND COALESCE (
                                                   ud2.fac_usrdata_vervaldatum,
                                                   SYSDATE + 999) <
                                                   COALESCE (
                                                      ud1.fac_usrdata_vervaldatum,
                                                      SYSDATE + 999)))
                          sbe,
                       (SELECT MAX (ud1.fac_usrdata_prijs)
                          FROM fac_usrdata ud1
                         WHERE COALESCE (ud1.fac_usrdata_vervaldatum,
                                         SYSDATE + 999) >
                                  b.bes_bestelling_datum
                               AND ud1.fac_usrdata_upper = 'VERPAKKING'
                               AND NOT EXISTS
                                     (SELECT 1
                                        FROM fac_usrdata ud2
                                       WHERE COALESCE (
                                                ud2.fac_usrdata_vervaldatum,
                                                SYSDATE + 999) >
                                                b.bes_bestelling_datum
                                             AND ud2.fac_usrdata_upper =
                                                   'VERPAKKING'
                                             AND COALESCE (
                                                   ud2.fac_usrdata_vervaldatum,
                                                   SYSDATE + 999) <
                                                   COALESCE (
                                                      ud1.fac_usrdata_vervaldatum,
                                                      SYSDATE + 999)))
                          verpakking
                  FROM bes_bestelling b,
                       bes_bestelling_item bi,
                       bes_srtdeel sd,
                       bes_srtgroep sg
                 WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                       AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                       AND sd.bes_srtdeel_verwijder IS NULL
                       AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                       AND sg.ins_discipline_key = 401) x -- Magazijn-Uitgifte
            LEFT JOIN
               (  SELECT bi.bes_bestelling_key, COUNT ( * ) verdeling
                    FROM bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg
                   WHERE     bi.bes_srtdeel_key = sd.bes_srtdeel_key
                         AND sd.bes_srtdeel_verwijder IS NULL
                         AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                         AND sg.ins_discipline_key = 401  -- Magazijn-Uitgifte
                GROUP BY bi.bes_bestelling_key) br
            ON x.bes_bestelling_key = br.bes_bestelling_key
   GROUP BY x.bes_srtgroep_omschrijving || '1',
               TO_CHAR (x.bes_bestelling_datum, 'yyyy')
            || '-Q'
            || TO_CHAR (x.bes_bestelling_datum, 'q');
*/

/* Formatted on 7-10-2015 17:05:25 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_noti_voorraadbeheer
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT DISTINCT
          sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (sn.fac_srtnotificatie_oms, '##WK##', TO_CHAR (SYSDATE, 'iyyy-iw')),
          r.fac_usrrap_key,
          v.extra_key,
          ud.fac_usrdata_omschr,
          NULL
     FROM kfns_v_mag_voorraad v, fac_v_aanwezigusrdata ud, fac_usrrap r, fac_srtnotificatie sn
    WHERE     TO_CHAR (SYSDATE, 'd') = '2'                    -- Elke maandag!
          AND v.extra_key = ud.fac_usrdata_key
          AND UPPER (r.fac_usrrap_view_name) = 'KFNS_V_MAG_VOORRAAD'
          AND sn.fac_srtnotificatie_code = 'CUST03'
   UNION ALL
   SELECT DISTINCT
          sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (sn.fac_srtnotificatie_oms, '##KW##', TO_CHAR (SYSDATE - 1, 'yyyy') || '-Q' || TO_CHAR (TRUNC (SYSDATE - 1, 'mm'), 'q')),
          r.fac_usrrap_key,
          v.extra_key,
          ud.fac_usrdata_omschr,
          NULL
     FROM kfns_v_mag_verbruik v, fac_v_aanwezigusrdata ud, fac_usrrap r, fac_srtnotificatie sn
    WHERE     TO_CHAR (SYSDATE, 'dd') = '01'          -- Elke 1e dag van het..
          AND TO_CHAR (SYSDATE, 'mm') IN ('01','04','07','10')  -- ..kwartaal!
          AND v.extra_key = ud.fac_usrdata_key
          AND UPPER (r.fac_usrrap_view_name) = 'KFNS_V_MAG_VERBRUIK'
          AND sn.fac_srtnotificatie_code = 'CUST04';

-- view tbv zoekresultaten rapport
CREATE OR REPLACE VIEW kfns_v_rap_searchresult
(
   fclt_f_datum,
   fclt_f_persoon,
   fclt_f_zoekterm,
   resultaat,
   fclt_f_keuze_type,
   keuze_url,
   keuze_omschrijving
)
AS
   SELECT fac_gui_counter_date datum,
          prs_perslid_naam_full persoon,
          fgc.fac_gui_counter_info zoekterm,
          COALESCE (result.result, 'Geen') resultaat,
          COALESCE (choice.TYPE, 'Geen') keuze_type,
          choice.url keuze_url,
          choice.oms keuze_omschrijving
     FROM fac_gui_counter fgc,
          prs_v_perslid_fullnames pf,
          (SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info url,
                  'Reserveerbaar artikel' TYPE,
                  res_artikel_omschrijving oms
             FROM fac_gui_counter fgc, res_artikel ra
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_artikel%'
              AND ra.res_artikel_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'key=')
                                            + 4)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Reserveerbaar object',
                  res_deel_omschrijving
             FROM fac_gui_counter fgc, res_deel rd
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_deel%'
              AND rd.res_deel_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'key=')
                                            + 4)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Melding',
                  std.mld_stdmelding_omschrijving oms
             FROM fac_gui_counter fgc, mld_stdmelding std
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%stdm%'
              AND std.mld_stdmelding_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Kennisbank',
                  fac_faq_question oms
             FROM fac_gui_counter fgc, fac_faq faq
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%faq%'
              AND fac_faq_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Reserveerbare ruimte',
                  res_ruimte_nr oms
             FROM fac_gui_counter fgc, res_ruimte
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_ruimte%'
              AND res_ruimte_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Bestelling',
                  ins_discipline_omschrijving
             FROM fac_gui_counter fgc, bes_discipline
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%bes%'
              AND ins_discipline_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'dis_key=')
                                            + 8)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Telefoonboek',
                  prs_perslid_naam_full
             FROM fac_gui_counter fgc, prs_v_perslid_fullnames pf
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%phone%'
              AND pf.prs_perslid_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))) choice,
          (SELECT fac_gui_counter_refkey,
                  REPLACE (REPLACE (fac_gui_counter_info, '{', ''), '}', '')
                     result
             FROM fac_gui_counter fgc
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchresult') result
    WHERE fac_gui_counter_group = 'search'
      AND fgc.fac_gui_counter_info IS NOT NULL
      AND fgc.prs_perslid_key = pf.prs_perslid_key
      AND choice.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key
      AND result.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key;

-- KPI-module!
-- Views voor berekening van (genormeerde) KPI-scores obv. handmatig/automatisch
-- ingevulde KPI-meldingen (een view per melding).
/* Formatted on 21-6-2016 16:30:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PACKAGE kfns
AS
   PROCEDURE refreshscore (pUserKey IN NUMBER);
END;
/

/* Formatted on 23-8-2016 10:55:05 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PACKAGE BODY kfns
AS
   PROCEDURE refreshscore (pUserKey IN NUMBER)
   AS
   BEGIN
      -- Alle scores verwijderen, behalve van enkele cumulatieve KPIs.
      --DELETE kpi_score
      -- WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN
      --             (SELECT x.kpi_definitie_key, x.kpi_score_datum, x.alg_locatie_key
      --                FROM kfns_v_kpi_all x, kpi_definitie d
      --               WHERE 1=1 --x.kpi_score_datum > TRUNC (SYSDATE, 'yyyy')
      --                     AND x.kpi_definitie_key = d.kpi_definitie_key
      --                     AND d.kpi_definitie_code NOT IN
      --                              ('EW23',
      --                               'GISPEN22',
      --                               'MAAS22',
      --                               'SWS23',
      --                               'UTS22',
      --                               'TRIGIONB22',
      --                               'TRIGIONBT22'));
      DELETE kpi_score s
       WHERE NOT EXISTS
                (SELECT 1
                   FROM kpi_definitie
                  WHERE kpi_definitie_key = s.kpi_definitie_key
                        AND kpi_definitie_code IN
                                 ('EW23',
                                  'GISPEN22',
                                  'MAAS22',
                                  'SWS23',
                                  'UTS22',
                                  'TRIGIONB22',
                                  'TRIGIONBT22'));

      -- Opnieuw toevoegen scores (geen enkele score zou reeds mogen bestaan).
      INSERT INTO kpi_score (kpi_definitie_key,
                             kpi_score_datum,
                             alg_locatie_key,
                             kpi_score_xmlnode,
                             kpi_score_refkey,
                             kpi_score_score,
                             kpi_score_norm_score,
                             kpi_score_drempels)
         SELECT kpi_definitie_key,
                kpi_score_datum,
                alg_locatie_key,
                kpi_score_xmlnode,
                kpi_score_refkey,
                kpi_score_score,
                kpi_score_norm_score,
                kpi_score_drempels
           FROM kfns_v_kpi_all x
          WHERE NOT EXISTS
                   (SELECT 1
                      FROM kpi_score
                     WHERE     kpi_definitie_key = x.kpi_definitie_key
                           AND kpi_score_datum = x.kpi_score_datum
                           AND alg_locatie_key = x.alg_locatie_key);
   END;
END;
/

-- *** EW/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_ew11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2503        -- EW
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_ew12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 669         -- Finance-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 669
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 543     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 544    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew13
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW13'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 541       -- Aantal variaties
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 542      -- Variaties correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** EW/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_ew21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW21'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 652   -- Aantal VSR controles
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 654 -- VSR controles goedgekeurd
                            AND m.mld_melding_key = k2.mld_melding_key
              WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW22'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2503 -- EW
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_ew23
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW23'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2503                -- EW
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        --AND m.mld_melding_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        --AND TO_CHAR (m.mld_melding_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_ew24
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW24'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (m.mld_stdmelding_key, 139, 1, 0)) sanmid -- Sanitaire accessoires
                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, mld_discipline md, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2503                -- EW
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                        AND sm.mld_ins_discipline_key = md.ins_discipline_key
                        AND md.ins_srtdiscipline_key IN (2, 3) -- Storing/Klacht
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        --AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 3), 'q') < SYSDATE -- Lopende aanmaak-kwartaal niet meetellen!
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               --GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 3), 'q') - 1, l.alg_locatie_key)
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.sanmid score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (1 - (s.sanmid / s.tot), n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (1 - (s.sanmid / s.tot)), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_ew25
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW25'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 655          -- Aantal audits
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 656     -- Audits goedgekeurd
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** EW/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_ew31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2503                -- EW
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        --AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 3), 'q') < SYSDATE -- Lopende aanmaak-kwartaal niet meetellen!
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               --GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 3), 'q') - 1, l.alg_locatie_key)
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_ew32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 657              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew34
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW34'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 658 -- Voorstel gastvrijheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** EW/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_ew41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 659 -- Opleidingen medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew42
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW42'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 660                 -- Verloop
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew43
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW43'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 661           -- Ziekteverzuim
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew44
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW44'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 662 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** EW/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_ew51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 663 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_ew52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'EW52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 661 -- Contractmanagement-EW
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 661
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 664         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 665        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 666        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 667         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 668        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 669        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 664 AND 669 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Gispen/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_gispen11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2501    -- Gispen
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_gispen12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 742     -- Finance-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 742
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 623     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 624    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Gispen/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_gispen21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN21'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2501 -- Gispen
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_gispen22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN22'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2501            -- Gispen
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

-- *** Gispen/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_gispen31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2501            -- Gispen
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_gispen32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_gispen33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 545              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_gispen34
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN34'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 801 -- Voorstel gastvrijheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Gispen/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_gispen41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 802 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Gispen/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_gispen51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 803 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_gispen52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 804         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 805        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 806        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 807         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 808        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 809        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 804 AND 809 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Gispen/Duurzaamheid ***
CREATE OR REPLACE VIEW kfns_v_kpi_gispen61
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'GISPEN61'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Gispen
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 810 -- Voorstel duurzaamheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Maas/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_maas11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2623      -- Maas
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_maas12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 744       -- Finance-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 742
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 641     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 642    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Maas/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_maas21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS21'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2623 -- Maas
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_maas22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS22'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2623              -- Maas
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_maas23
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS23'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 662 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 662
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 561 -- Beschikbaarheid koffieautomaten
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Maas/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_maas31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2623              -- Maas
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_maas32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 662 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 662
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_maas33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 662 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 662
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 721              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Maas/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_maas41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 664 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 664
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 722 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Maas/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_maas51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 662 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 662
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 723 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_maas52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'MAAS52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 662 -- Contractmanagement-Maas
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 662
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 726         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 727        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 728        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 729         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 730        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 732        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 726 AND 732 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Receptel/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_receptel11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2502  -- Receptel
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 745   -- Finance-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 745
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 643     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 644    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Receptel/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_receptel21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL21'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 581        -- Kwaliteitsaudit
                            AND m.mld_melding_key = k.mld_melding_key
              WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL22'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 748       -- Visuele inspectie
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel23
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL23'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 749               -- Bezetting
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Receptel/Tevredenheid ***
CREATE OR REPLACE VIEW kfns_v_kpi_receptel31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 12), 'yyyy') - 1
                           periode,              -- Per jaar! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2502          -- Receptel
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 12), 'yyyy') < SYSDATE -- Lopende afmeld-jaar niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 12), 'yyyy') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 750              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Receptel/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_receptel41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 753           -- Ziekteverzuim
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel42
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL42'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 751                 -- Verloop
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel43
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL43'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 752 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** EW/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_receptel51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 665
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 754 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_receptel52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'RECEPTEL52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (km.fac_usrdata_code) score
                 FROM    (SELECT m.mld_melding_key, m.mld_melding_datum
                            FROM mld_melding m
                           WHERE m.mld_stdmelding_key = 665 -- Contractmanagement-Receptel
                                 AND m.mld_melding_status IN (5, 6)
                                 AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                       (SELECT 1
                                          FROM mld_melding
                                         WHERE mld_stdmelding_key = 665
                                               AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                               AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT km.mld_melding_key, ud.fac_usrdata_code
                            FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                           WHERE km.mld_kenmerk_key = 758 -- Ketenoverleg Utrecht
                                 AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) km
                      ON m.mld_melding_key = km.mld_melding_key
                WHERE km.fac_usrdata_code IN ('1', '2', '3'))
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** SWS/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_sws11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2504       -- SWS
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_sws12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 741        -- Finance-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 741
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 621     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 622    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws13
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS13'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 582       -- Aantal variaties
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 583      -- Variaties correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws14
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS14'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 670        -- Aantal offertes
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 671       -- Offertes correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** SWS/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_sws21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS21'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 672     -- Uptime installaties
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS22'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2504 -- SWS
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_sws23
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS23'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2504               -- SWS
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_sws24
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS24'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 781            -- Verstoringen
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws25
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS25'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 674          -- Aantal audits
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 675     -- Audits goedgekeurd
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** SWS/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_sws31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2504               -- SWS
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_sws32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 676              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws34
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS34'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 677 -- Voorstel gastvrijheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** SWS/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_sws41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 678 -- Opleidingen medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws42
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS42'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 701                 -- Verloop
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws43
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS43'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 702 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** SWS/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_sws51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 703 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_sws52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'SWS52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 663 -- Contractmanagement-SWS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 663
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 704         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 705        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 707        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 708         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 709        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 710        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 704 AND 710 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** UTS/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_uts11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2505       -- UTS
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_uts12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 743        -- Finance-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 743
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 625     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 626    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_uts13
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS13'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 601        -- Aantal offertes
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 602       -- Offertes correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** UTS/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_uts21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS21'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2505 -- UTS
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_uts22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS22'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2505               -- UTS
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

-- *** UTS/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_uts31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2505               -- UTS
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_uts32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_uts33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 761              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_uts34
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS34'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 762 -- Voorstel gastvrijheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** UTS/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_uts41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 763 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** UTS/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_uts51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      DECODE (k.mld_kenmerkmelding_waarde, '1601', 100, '1602', 80, '1603', 80, 0) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN
                         (SELECT k.mld_melding_key, k.mld_kenmerkmelding_waarde, ud.fac_usrdata_prijs -- CHECK???
                            FROM mld_v_aanwezigkenmerkmelding k, fac_usrdata ud
                           WHERE k.mld_kenmerk_key = 764 -- Managementrapportage
                                 AND k.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)) k
                      ON m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_uts52
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS52'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 666
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 765         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 766        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 767        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 768         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 769        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 770        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 765 AND 770 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** UTS/Duurzaamheid ***
CREATE OR REPLACE VIEW kfns_v_kpi_uts61
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'UTS61'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      SUM (DECODE (k.mld_kenmerkmelding_waarde, '1', 1, 0)) ja
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 666 -- Contractmanagement-UTS
                              AND m.mld_melding_status IN (5, 6)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 821 -- Voorstel duurzaamheidsmaatregelen ingediend
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL
                GROUP BY TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          NULL kpi_score_refkey,
          NULL totaal,
          DECODE (s.ja, 0, 0, 1) score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (DECODE (s.ja, 0, 0, 1), n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (DECODE (s.ja, 0, 0, 1), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiliging/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 2506 -- Trigion Beveiliging
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionb12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 746 -- Finance-Trigion Beveiliging
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 746
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 645     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 646    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiliging/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB21'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 2506 -- Trigion Beveiliging
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB22'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2506 -- Trigion Beveiliging
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

-- *** Trigion Beveiliging/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 2506 -- Trigion Beveiliging
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionb32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 667 -- Contractmanagement-Trigion Beveiliging
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 667
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionb33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 667 -- Contractmanagement-Trigion Beveiliging
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 667
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 603              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiliging/Personeel ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb41
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB41'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 667 -- Contractmanagement-Trigion Beveiliging
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 667
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 741 -- Competenties medewerkers
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiliging/Proces ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionb51
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONB51'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k1.mld_kenmerkmelding_waarde) score1,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k2.mld_kenmerkmelding_waarde) score2,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k3.mld_kenmerkmelding_waarde) score3,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k4.mld_kenmerkmelding_waarde) score4,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k5.mld_kenmerkmelding_waarde) score5,
                      (SELECT fac.safe_to_number (fac_usrdata_code) FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = k6.mld_kenmerkmelding_waarde) score6,
                      km.totaal / km.aantal score
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 667 -- Contractmanagement-Trigion Beveiliging
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 667
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 742         -- Ketenoverleg M
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 743        -- Ketenoverleg NO
                            AND m.mld_melding_key = k2.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k3
                         ON k3.mld_kenmerk_key = 744        -- Ketenoverleg NW
                            AND m.mld_melding_key = k3.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k4
                         ON k4.mld_kenmerk_key = 745         -- Ketenoverleg U
                            AND m.mld_melding_key = k4.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k5
                         ON k5.mld_kenmerk_key = 746        -- Ketenoverleg ZO
                            AND m.mld_melding_key = k5.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k6
                         ON k6.mld_kenmerk_key = 747        -- Ketenoverleg ZW
                            AND m.mld_melding_key = k6.mld_melding_key
                      LEFT JOIN (  SELECT km.mld_melding_key,
                                          COUNT ( * ) aantal,
                                          SUM(fac.safe_to_number (ud.fac_usrdata_code)) totaal
                                     FROM mld_v_aanwezigkenmerkmelding km, fac_usrdata ud
                                    WHERE km.mld_kenmerk_key BETWEEN 742 AND 747 -- Ketenoverleg M/NO/NW/U/ZO/ZW
                                          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
                                          AND ud.fac_usrdata_code IN ('1', '2', '3')
                                 GROUP BY km.mld_melding_key) km
                         ON m.mld_melding_key = km.mld_melding_key
                WHERE km.aantal > 0)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.score1,
          s.score2,
          s.score3,
          s.score4,
          s.score5,
          s.score6,
          kpi.getNormScore (s.score, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.score), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiligingstechniek/Kosten ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt11
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT11'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --o.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (
                               SIGN(TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 2), 'mm') - ordafr.fac_tracking_datum),
                               -1, 0,
                               1))
                           optijd
                   FROM (SELECT o.mld_opdr_key, l.alg_locatie_key
                           FROM mld_opdr o, mld_melding m, alg_locatie l
                          WHERE     o.mld_uitvoerende_keys = 3961 -- Trigion Beveiligingstechniek
                                AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                AND o.mld_typeopdr_key IN (281, 284) -- Mandaatopdracht/Offerteopdracht
                                AND o.mld_melding_key = m.mld_melding_key
                                AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                        LEFT JOIN fac_tracking ordafm
                           ON ordafm.fac_srtnotificatie_key = 58     -- ORDAFM
                              AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                        LEFT JOIN fac_tracking ordafr
                           ON ordafr.fac_srtnotificatie_key = 70     -- ORDAFR
                              AND o.mld_opdr_key = ordafr.fac_tracking_refkey
                  WHERE TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afrond-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (ordafr.fac_tracking_datum, 3), 'q') - 1) --, o.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt12
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT12'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k1.mld_kenmerkmelding_waarde) tot,
                      fac.safe_to_number (k2.mld_kenmerkmelding_waarde) sub,
                      DECODE (
                         k1.mld_kenmerkmelding_waarde,
                         NULL, 1,
                         0, 1,
                         COALESCE (fac.safe_to_number (k2.mld_kenmerkmelding_waarde), 0)
                         / fac.safe_to_number (k1.mld_kenmerkmelding_waarde))
                         perc_match
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 747 -- Finance-Trigion Beveiligingstechniek
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 747
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k1
                         ON k1.mld_kenmerk_key = 647     -- Aantal factuurnoti
                            AND m.mld_melding_key = k1.mld_melding_key
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k2
                         ON k2.mld_kenmerk_key = 648    -- Factuurnoti correct
                            AND m.mld_melding_key = k2.mld_melding_key
                WHERE k1.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.tot score1,
          s.sub score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc_match, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc_match), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

-- *** Trigion Beveiligingstechniek/Kwaliteit ***
CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt21
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT21'),
        scores
           AS (  SELECT x.periode, --x.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM(DECODE (SIGN (x.normsla - x.uitvtijd.tijdsduur),
                                    -1, 0,
                                    1))
                           optijd
                   FROM (SELECT TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') - 1
                                   periode,  -- Per kwartaal! Via eigen tabel?
                                o.alg_locatie_key,
                                MLD.getactualuitvoer (
                                   ordsnt.fac_tracking_datum,
                                   ordafm.fac_tracking_datum,
                                   o.mld_stdmelding_key,
                                   o.mld_melding_spoed,
                                   NULL,
                                   NULL,
                                   o.eenheid)
                                   uitvtijd,
                                o.normsla
                           FROM (SELECT o.mld_opdr_key,
                                        o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr,
                                        m.mld_stdmelding_key, m.mld_melding_spoed,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                           3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                                           eenheid,
                                        DECODE (
                                           m.mld_melding_spoed,
                                           1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                           2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                           3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                           sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                                           normsla,
                                        l.alg_locatie_key
                                   FROM mld_opdr o, mld_melding m, mld_stdmelding sm, alg_locatie l
                                  WHERE     o.mld_uitvoerende_keys = 3961 -- Trigion Beveiligingstechniek
                                        AND o.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                                        AND o.mld_melding_key = m.mld_melding_key
                                        AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                                LEFT JOIN fac_tracking ordafm
                                   ON ordafm.fac_srtnotificatie_key = 58 -- ORDAFM
                                      AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                                LEFT JOIN fac_tracking ordsnt
                                   ON ordsnt.fac_srtnotificatie_key = 67 -- ORDSNT
                                      AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                          WHERE TRUNC (ADD_MONTHS (ordafm.fac_tracking_datum, 3), 'q') < SYSDATE) x -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY x.periode) --, x.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.optijd score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.optijd / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.optijd / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
--WHERE s.tot > 0;

-- TODO: Voor deze KPI oude scores nooit verwijderen!
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt22
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT22'),
        scores
           AS (  SELECT TRUNC (SYSDATE, 'q') - 1 periode, -- Cumulatief per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy'), 1,
                                    0))
                           tot_prevy,
                        SUM(DECODE (TRUNC (t.fac_tracking_datum, 'yyyy'), -- Of m.mld_melding_datum???
                                    TRUNC (ADD_MONTHS (SYSDATE,  -3), 'yyyy'), 1,
                                    0))
                           tot_thisy
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 3961 -- Trigion Beveiligingstechniek
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -15), 'yyyy') -- Alleen in Q1 vorig en jaar daarvoor; anders dit en vorig jaar!
                        AND TO_CHAR (t.fac_tracking_datum, 'q') <= TO_CHAR (ADD_MONTHS (SYSDATE, -3), 'q') -- Dezelfde kwartalen over beide jaren vergelijken!
               GROUP BY TRUNC (SYSDATE, 'q') - 1)       --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot_thisy totaal,
          s.tot_prevy score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.tot_thisy / s.tot_prevy, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.tot_thisy / s.tot_prevy), 1, 20) kpi_score_drempels
     FROM normen n, scores s
    WHERE s.tot_prevy > 0;

-- *** Trigion Beveiligingstechniek/Tevredenheid ***
-- TODO: Opdrachten of meldingen tellen???
CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt31
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT31'),
        scores
           AS (  SELECT TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1 -- Of m.mld_melding_datum???
                           periode,          -- Per kwartaal! Via eigen tabel?
                        --l.alg_locatie_key,
                        COUNT ( * ) tot,
                        SUM (DECODE (o.mld_typeopdr_key, 285, 1, 0)) klachten -- Klacht; CHECK???
                   FROM mld_opdr o, mld_melding m, alg_locatie l, fac_tracking t
                  WHERE     o.mld_uitvoerende_keys = 3961 -- Trigion Beveiligingstechniek
                        AND o.mld_statusopdr_key IN (6, 9, 7)   -- AFM/AFR/VER
                        AND o.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.; CHECK???
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                        AND o.mld_opdr_key = t.fac_tracking_refkey
                        AND t.fac_srtnotificatie_key = 58            -- ORDAFM
                        AND TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') < SYSDATE -- Lopende afmeld-kwartaal niet meetellen!
               GROUP BY TRUNC (ADD_MONTHS (t.fac_tracking_datum, 3), 'q') - 1) --, l.alg_locatie_key)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          --s.alg_locatie_key,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,              -- Alles moet op melding!?
          NULL kpi_score_refkey,
          s.tot totaal,
          s.klachten score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.klachten / s.tot, n000, n070, n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.klachten / s.tot), 1, 20) kpi_score_drempels
     FROM normen n, scores s;
-- WHERE s.tot > 0;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt32
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT32'),
        scores
           AS (SELECT TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') - 1
                         periode,                -- Per jaar! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 668 -- Contractmanagement-Trigion Beveiligingstechniek
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 668
                                            AND TRUNC (ADD_MONTHS (mld_melding_datum, 9), 'yyyy') = TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy')
                                            AND mld_melding_key > m.mld_melding_key)
                              AND TRUNC (ADD_MONTHS (m.mld_melding_datum, 9), 'yyyy') < SYSDATE) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = -1          -- CHECK???
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_trigionbt33
AS
   WITH normen
           AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_drempels normscores,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
                      fac.safe_to_number (REGEXP_SUBSTR (kpi_definitie_drempels, '[^|]+', 1, 4)) n100
                 FROM kpi_definitie
                WHERE kpi_definitie_code = 'TRIGIONBT33'),
        scores
           AS (SELECT TRUNC (m.mld_melding_datum, 'q') - 1 periode, -- Per kwartaal! Via eigen tabel?
                      m.mld_melding_key,
                      fac.safe_to_number (k.mld_kenmerkmelding_waarde) * 10 perc
                 FROM (SELECT m.mld_melding_key, m.mld_melding_datum
                         FROM mld_melding m
                        WHERE m.mld_stdmelding_key = 668 -- Contractmanagement-Trigion Beveiligingstechniek
                              AND m.mld_melding_status IN (5, 6)
                              AND NOT EXISTS -- Meest recente bij gelijke melding over dezelfde periode!
                                    (SELECT 1
                                       FROM mld_melding
                                      WHERE mld_stdmelding_key = 668
                                            AND TRUNC (mld_melding_datum, 'q') = TRUNC (m.mld_melding_datum, 'q')
                                            AND mld_melding_key > m.mld_melding_key)) m
                      LEFT JOIN mld_v_aanwezigkenmerkmelding k
                         ON k.mld_kenmerk_key = 604              -- Cijfer KTO
                            AND m.mld_melding_key = k.mld_melding_key
                WHERE k.mld_kenmerkmelding_waarde IS NOT NULL)
   SELECT n.kpi_definitie_key,
          s.periode kpi_score_datum,
          121 alg_locatie_key,                             -- Landelijk (LAND)
          'melding' kpi_score_xmlnode,
          s.mld_melding_key kpi_score_refkey,
          NULL totaal,
          s.perc / 100 score1,
          NULL score2,
          NULL score3,
          NULL score4,
          NULL score5,
          NULL score6,
          kpi.getNormScore (s.perc / 100, n000, n070,  n090, n100) kpi_score_score,
          n.normscores kpi_score_norm_score,
          SUBSTR (TO_CHAR (s.perc / 100), 1, 20) kpi_score_drempels
     FROM normen n, scores s;

CREATE OR REPLACE VIEW kfns_v_kpi_all
AS
   SELECT * FROM kfns_v_kpi_ew11
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew12
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew13
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew21
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew22
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew23
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew24
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew25
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew31
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew32
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew33
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew34
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew41
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew42
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew43
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew44
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew51
   UNION ALL
   SELECT * FROM kfns_v_kpi_ew52
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen11
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen12
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen21
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen22
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen31
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen32
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen33
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen34
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen41
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen51
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen52
   UNION ALL
   SELECT * FROM kfns_v_kpi_gispen61
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas11
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas12
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas21
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas22
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas23
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas31
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas32
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas33
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas41
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas51
   UNION ALL
   SELECT * FROM kfns_v_kpi_maas52
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel11
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel12
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel21
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel22
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel23
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel31
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel32
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel33
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel41
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel42
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel43
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel51
   UNION ALL
   SELECT * FROM kfns_v_kpi_receptel52
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws11
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws12
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws13
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws14
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws21
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws22
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws23
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws24
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws25
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws31
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws32
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws33
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws34
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws41
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws42
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws43
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws51
   UNION ALL
   SELECT * FROM kfns_v_kpi_sws52
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts11
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts12
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts13
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts21
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts22
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts31
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts32
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts33
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts34
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts41
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts51
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts52
   UNION ALL
   SELECT * FROM kfns_v_kpi_uts61
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb11
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb12
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb21
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb22
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb31
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb32
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb33
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb41
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionb51
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt11
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt12
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt21
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt22
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt31
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt32
   UNION ALL
   SELECT * FROM kfns_v_kpi_trigionbt33;

-- G‚‚n locatie-dimensie, dus 1 score per KPI!
/* Formatted on 25-8-2016 15:28:32 (QP5 v5.136.908.31019) */
/*
CREATE OR REPLACE VIEW kfns_v_rap_kpi_details
AS
     SELECT s.kpi_score_datum periode,
            d.kpi_definitie_code kpi_code,
            d.kpi_definitie_omschrijving kpi_oms,
            d.kpi_definitie_drempels definitie,
            s.kpi_score_refkey melding,
            --s.totaal,
            --s.score1,
            --s.score2,
            --s.score3,
            --s.score4,
            --s.score5,
            --s.score6,
            --s.locaties,      -- Aantal locaties in (on)genormeerde gemiddelde!
            s.ongenormeerd,
            s.genormeerd
       FROM    kpi_definitie d
            LEFT JOIN
               (  SELECT kpi_definitie_key,
                         kpi_score_datum,
                         kpi_score_refkey,
                         --SUM (totaal) totaal,
                         --SUM (score1) score1,
                         --SUM (score2) score2,
                         --SUM (score3) score3,
                         --SUM (score4) score4,
                         --SUM (score5) score5,
                         --SUM (score6) score6,
                         COUNT ( * ) locaties,
                         SUM (kpi_score_drempels) / COUNT ( * ) ongenormeerd,
                         SUM (kpi_score_score) / COUNT ( * ) genormeerd
                    FROM kfns_v_kpi_all
                GROUP BY kpi_definitie_key, kpi_score_datum, kpi_score_refkey) s
            ON d.kpi_definitie_key = s.kpi_definitie_key
   ORDER BY 2, 1;
*/
CREATE OR REPLACE VIEW kfns_v_rap_kpi_details
(
   mld_melding_key,
   fclt_f_periode,
   fclt_x_leverancier,
   kpi_code,
   kpi_oms,
   definitie,
   melding,
   totaal,
   score1,
   score2,
   score3,
   score4,
   score5,
   score6,
   ongenormaliseerd,
   genormaliseerd
)
AS
     SELECT s.kpi_score_refkey mld_melding_key,
            TO_CHAR (s.kpi_score_datum, 'yyyy') || '-K' || TO_CHAR (s.kpi_score_datum, 'q')
               periode,
            d.kpi_definitie_categorie1 leverancier,
            SUBSTR (d.kpi_definitie_code, 1, LENGTH (d.kpi_definitie_code) - 1) || '.' || SUBSTR (d.kpi_definitie_code, -1)
               kpi_code,
            d.kpi_definitie_omschrijving kpi_oms,
            d.kpi_definitie_drempels definitie,
            TO_CHAR (s.kpi_score_refkey) melding,
            TO_CHAR (s.totaal) totaal,
            TO_CHAR (s.score1) score1,
            TO_CHAR (s.score2) score2,
            TO_CHAR (s.score3) score3,
            TO_CHAR (s.score4) score4,
            TO_CHAR (s.score5) score5,
            TO_CHAR (s.score6) score6,
            TO_CHAR (s.kpi_score_drempels * 100, '990D9') || '%' ongenormaliseerd,
            TO_CHAR (s.kpi_score_score, '990D9') || '%' genormaliseerd
       FROM kpi_definitie d, kfns_v_kpi_all s
      WHERE d.kpi_definitie_key = s.kpi_definitie_key
   ORDER BY 2, 1;

-- KFNS#41223: Doorloop van gesloten opdrachten per kwartaal (zoals bij KPIs).
/* Formatted on 18-8-2017 12:08:16 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_rap_opdr_doorloop
(
   mld_opdr_key,
   fclt_f_periode,
   opdracht,
   fclt_3d_afdeling_key,
   opdrachttype,
   status,
   fclt_f_leverancier,
   locatie,
   vakgroeptype,
   vakgroep,
   soortmelding,
   omschrijving,
   verstrekt,
   afgemeld,
   afgerond,
   doorlooptijd,
   sla,
   optijd
)
AS
   SELECT o.mld_opdr_key,
          TO_CHAR (o.ordafm, 'yyyy') || '-K' || TO_CHAR (o.ordafm, 'q')
               periode,
          o.ins_srtdiscipline_prefix || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
          o.prs_afdeling_key,
          o.mld_typeopdr_omschrijving,
          o.mld_statusopdr_omschrijving,
          o.prs_bedrijf_naam,
          o.alg_locatie_code,
          o.ins_srtdiscipline_omschrijving,
          o.ins_discipline_omschrijving,
          o.mld_stdmelding_omschrijving,
          o.mld_opdr_omschrijving,
          o.ordsnt,
          o.ordafm,
          o.ordafr,
          TO_CHAR (o.uitvtijd.tijdsduur, 'FM999990.00') || o.uitvtijd.eenheid,
          TO_CHAR (o.normsla) || o.uitvtijd.eenheid,
          DECODE (SIGN (o.normsla - o.uitvtijd.tijdsduur), -1, 'Nee', 'Ja') optijd
     FROM (SELECT o.mld_opdr_key,
                  o.ins_srtdiscipline_prefix,
                  prs_afdeling_key,
                  o.mld_melding_key,
                  o.mld_opdr_bedrijfopdr_volgnr,
                  o.mld_typeopdr_omschrijving,
                  o.mld_statusopdr_omschrijving,
                  o.prs_bedrijf_naam,
                  o.alg_locatie_code,
                  o.ins_srtdiscipline_omschrijving,
                  o.ins_discipline_omschrijving,
                  o.mld_stdmelding_omschrijving,
                  o.mld_opdr_omschrijving,
                  ordsnt.fac_tracking_datum ordsnt,
                  ordafm.fac_tracking_datum ordafm,
                  ordafr.fac_tracking_datum ordafr,
                  MLD.getactualuitvoer (ordsnt.fac_tracking_datum,
                                        ordafm.fac_tracking_datum,
                                        o.mld_stdmelding_key,
                                        o.mld_melding_spoed,
                                        NULL,
                                        NULL,
                                        o.eenheid)
                     uitvtijd,
                  o.normsla
             FROM (SELECT o.mld_opdr_key,
                          sd.ins_srtdiscipline_prefix,
                          o.mld_melding_key,
                          o.mld_opdr_bedrijfopdr_volgnr,
                          ot.mld_typeopdr_omschrijving,
                          os.mld_statusopdr_omschrijving,
                          b.prs_bedrijf_naam,
                          l.alg_locatie_code,
                          sd.ins_srtdiscipline_omschrijving,
                          md.ins_discipline_omschrijving,
                          (SELECT MAX (a.prs_afdeling_key)
                             FROM prs_contactpersoon cp,
                                  prs_v_aanwezigperslid p,
                                  prs_afdeling a
                            WHERE     cp.prs_bedrijf_key = b.prs_bedrijf_key
                                  AND p.prs_perslid_key = cp.prs_perslid_key
                                  AND prs_contactpersoon_verwijder IS NULL
                                  AND a.prs_afdeling_key = p.prs_afdeling_key
                                  AND a.prs_bedrijf_key = 23)
                             prs_afdeling_key,
                          sm.mld_stdmelding_omschrijving,
                          o.mld_opdr_omschrijving,
                          m.mld_stdmelding_key,
                          m.mld_melding_spoed,
                          DECODE (m.mld_melding_spoed,
                                  1, sm.mld_stdmelding_t_uitvtijd_pr1.eenheid,
                                  2, sm.mld_stdmelding_t_uitvtijd_pr2.eenheid,
                                  3, sm.mld_stdmelding_t_uitvoertijd.eenheid,
                                  sm.mld_stdmelding_t_uitvtijd_pr4.eenheid)
                             eenheid,
                          DECODE (m.mld_melding_spoed,
                                  1, sm.mld_stdmelding_t_uitvtijd_pr1.tijdsduur,
                                  2, sm.mld_stdmelding_t_uitvtijd_pr2.tijdsduur,
                                  3, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                                  sm.mld_stdmelding_t_uitvtijd_pr4.tijdsduur)
                             normsla
                     FROM mld_opdr o,
                          mld_typeopdr ot,
                          mld_statusopdr os,
                          prs_bedrijf b,
                          mld_melding m,
                          mld_stdmelding sm,
                          mld_discipline md,
                          ins_srtdiscipline sd,
                          alg_locatie l
                    WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
                          AND ot.mld_typeopdr_key NOT IN (283, 301, 302, 481, 601) -- Offerteaanvr./Beheerdersopdr./Interne opdr./Admin. opdr./Variatie opdr.
                          AND o.mld_statusopdr_key = os.mld_statusopdr_key
                          AND os.mld_statusopdr_key IN (6, 9, 7) -- AFM/AFR/VER
                          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
                          AND o.mld_melding_key = m.mld_melding_key
                          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                          AND sm.mld_ins_discipline_key = md.ins_discipline_key
                          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)) o
                  LEFT JOIN fac_tracking ordsnt
                     ON ordsnt.fac_srtnotificatie_key = 67           -- ORDSNT
                        AND o.mld_opdr_key = ordsnt.fac_tracking_refkey
                  LEFT JOIN fac_tracking ordafm
                     ON ordafm.fac_srtnotificatie_key = 58           -- ORDAFM
                        AND o.mld_opdr_key = ordafm.fac_tracking_refkey
                  LEFT JOIN fac_tracking ordafr
                     ON ordafr.fac_srtnotificatie_key = 70 -- ORDAFR (geen herfiattering, dus max. ‚‚n keer afronding!)
                        AND o.mld_opdr_key = ordafr.fac_tracking_refkey) o;


-- KFNS#40008: Rapport om status van reserveringen op te laten halen door SmartSigns.
/* Formatted on 31-3-2017 16:24:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfns_v_api_reserveringen
(
   van,
   tot,
   key,
   resid,
   locatiecode,
   gebouwcode,
   fclt_3d_gebouw_key,
   verdiepingcode,
   ruimtecode,
   ruimtenaam,
   rvck_vnr,
   voorziening,
   aantal,
   prijs,
   btw,
   act_oms,
   srtact_oms,
   bezoekers,
   fo_status_key,
   fo_status,
   bo_status_key,
   bo_status,
   contact,
   host,
   kostenplaats,
   resruimtekey,
   algruimtekey,
   algruimtenr,
   omschrijving,
   opmerking,
   dagstaat
)
AS
   SELECT x.van van_datumtijd,
          x.tot tot_datumtijd,
          x.res_rsv_ruimte_key res_key,
          TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr) res_id,
          rvck.loc_code,
          rvck.geb_code,
          rvck.geb_key,
          rvck.ver_code,
          rvck.ruimtenr,
          rvck.ruimtenaam,
          rvck.vnr,
          rvck.voorziening,
          rvck.aantal,
          ROUND (COALESCE (rvck.res_rsv_prijs, rvck.aantal * rvck.ps), 2) prijs,
          rvck.btw,
          x.res_activiteit_omschrijving,
          x.res_srtactiviteit_omschrijving,
          x.res_rsv_ruimte_bezoekers bezoekers,
          x.fo_status_key,
          DECODE (x.fo_status_key, 1, 'RESOPT', 2, 'RESDEF', 3, 'RESBLK', 'RESDEL') fo_status,
          x.bo_status_key,
          x.bo_status_oms,
          x.contact_naam,
          x.host_naam,
          x.kp_nr,
          rvck.res_ruimte_key,
          rvck.alg_ruimte_key,
          rvck.alg_ruimte_nr,
          x.res_rsv_ruimte_omschrijving oms,
          x.res_rsv_ruimte_opmerking opm,
          DECODE (
             x.contact_key,
             58901, 'Ja',
             DECODE (
                COALESCE (
                   (SELECT res_kenmerkreservering_waarde
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE kw.res_kenmerk_key = k.res_kenmerk_key
                           AND k.res_srtkenmerk_key = 1
                           AND kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key),
                   '1'),
                '1', 'Nee',
                'Ja'))
             dagstaat
     FROM    (SELECT rr.res_rsv_ruimte_key,
                     rr.res_reservering_key,
                     rr.res_rsv_ruimte_volgnr,
                     a.res_activiteit_key,
                     a.res_activiteit_omschrijving,
                     sa.res_srtactiviteit_key,
                     sa.res_srtactiviteit_omschrijving,
                     rr.res_rsv_ruimte_van van,
                     rr.res_rsv_ruimte_tot tot,
                     rr.res_rsv_ruimte_bezoekers,
                     fs.res_status_fo_key fo_status_key,
                     fs.res_status_fo_omschrijving fo_status_oms,
                     bs.res_status_bo_key bo_status_key,
                     bs.res_status_bo_omschrijving bo_status_oms,
                     pfc.prs_perslid_key contact_key,
                     pfc.prs_perslid_naam_full contact_naam,
                     pfh.prs_perslid_key host_key,
                     pfh.prs_perslid_naam_full host_naam,
                     k.prs_kostenplaats_nr kp_nr,
                     k.prs_kostenplaats_omschrijving kp_oms,
                     rr.res_rsv_ruimte_omschrijving,
                     rr.res_rsv_ruimte_opmerking
                FROM res_v_aanwezigrsv_ruimte rr,           -- Alleen actieve!
                     res_activiteit a,
                     res_srtactiviteit sa,
                     res_status_fo fs,
                     res_status_bo bs,
                     prs_v_perslid_fullnames_all pfc,
                     prs_v_perslid_fullnames_all pfh,
                     prs_kostenplaats k
               WHERE rr.res_rsv_ruimte_tot > TRUNC (SYSDATE, 'IW') - 7
                     AND rr.res_ruimte_opstel_key IS NOT NULL -- Alleen ruimtereserveringen!
                     AND rr.res_activiteit_key = a.res_activiteit_key
                     AND a.res_activiteit_verwijder IS NULL
                     AND a.res_srtactiviteit_key = sa.res_srtactiviteit_key
                     AND sa.res_srtactiviteit_verwijder IS NULL
                     AND rr.res_status_fo_key = fs.res_status_fo_key
                     AND rr.res_status_bo_key = bs.res_status_bo_key
                     AND rr.res_rsv_ruimte_dirtlevel = 0
                     AND rr.res_rsv_ruimte_contact_key = pfc.prs_perslid_key
                     AND rr.res_rsv_ruimte_host_key = pfh.prs_perslid_key
                     AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
          LEFT JOIN
             (SELECT rrr.res_rsv_ruimte_key,
                     l.alg_locatie_code loc_code,
                     g.alg_gebouw_code geb_code,
                     g.alg_gebouw_key geb_key,
                     v.alg_verdieping_code ver_code,
                     r.alg_ruimte_nr ruimtenr,
                     r.alg_ruimte_key alg_ruimte_key,
                     rr.res_ruimte_key res_ruimte_key,
                     r.alg_ruimte_nr,
                     rr.res_ruimte_nr ruimtenaam,
                     TO_NUMBER (NULL) vnr,
                     ro.res_opstelling_omschrijving voorziening,
                     ROUND ((rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 2)
                        aantal,                                -- Duur in uren
                     rrr.res_rsv_ruimte_prijs res_rsv_prijs,
                     rr.res_ruimte_prijs ps,                     -- Uur-tarief
                     rr.res_ruimte_prijs_ochtend po,
                     rr.res_ruimte_prijs_middag pm,
                     rr.res_ruimte_prijs_avond pa,
                     NULL btw,
                     TO_NUMBER (NULL) k_key,
                     NULL k_naam,
                     NULL k_type,
                     NULL k_waarde
                FROM res_v_aanwezigrsv_ruimte rrr,
                     res_ruimte_opstelling rro,
                     res_ruimte rr,
                     res_opstelling ro,
                     (  SELECT res_ruimte_key,
                               MAX (alg_ruimte_key) alg_ruimte_key, COUNT ( * ) aantal
                          FROM res_alg_ruimte
                         WHERE res_alg_ruimte_verwijder IS NULL
                      GROUP BY res_ruimte_key) rar,
                     alg_ruimte r,
                     alg_verdieping v,
                     alg_gebouw g,
                     alg_locatie l
               WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                     AND rro.res_ruimte_key = rr.res_ruimte_key
                     AND rro.res_opstelling_key = ro.res_opstelling_key
                     AND rr.res_ruimte_key = rar.res_ruimte_key(+)
                     AND rar.alg_ruimte_key = r.alg_ruimte_key(+)
                     AND r.alg_verdieping_key = v.alg_verdieping_key(+)
                     AND v.alg_gebouw_key = g.alg_gebouw_key(+)
                     AND g.alg_locatie_key = l.alg_locatie_key(+)) rvck
          ON x.res_rsv_ruimte_key = rvck.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW KFNS_V_NOTI_BEZOEKERS
(
   SENDER,
   RECEIVER,
   TEXT,
   CODE,
   FAC_SRTNOTIFICATIE_KEY,
   KEY,
   XKEY,
   XEMAIL,
   XMOBILE
)
AS
   SELECT DISTINCT
          NULL,
          9941,
             'Bezoek '
          || b.bez_afspraak_naam
          || ' op '
          || TRUNC (a.bez_afspraak_datum)
          || ' in een NS kantoor'
             text,
          'CUST05' code,
          (SELECT fac_srtnotificatie_key
             FROM fac_srtnotificatie
            WHERE fac_srtnotificatie_code = 'CUST05')
             fac_srtnotificatie_key,
          b.bez_bezoekers_key key,
          NULL xkey,
          NULL xemail,
          NULL xmobile
     FROM bez_afspraak a,
          bez_bezoekers b,
          fac_tracking ft,
          bez_kenmerkwaarde bkw
    WHERE     a.bez_afspraak_key = b.bez_afspraak_key
          AND ft.fac_tracking_refkey = a.bez_afspraak_key
          AND b.bez_bezoekers_key = bkw.bez_bezoekers_key
          AND TRUNC (a.bez_afspraak_datum) >= TRUNC (SYSDATE)
          AND a.bez_afspraak_eind > SYSDATE
          AND bkw.bez_kenmerk_key = 1001
          AND bkw.bez_kenmerkwaarde_verwijder IS NULL
          AND bkw.bez_kenmerkwaarde_waarde LIKE '%@%'
          AND ( (fac_tracking_oms LIKE '%Bezoeker toegevoegd:%'
                 AND fac_srtnotificatie_key = 27)
               OR fac_srtnotificatie_key = 26)
          AND ft.fac_tracking_datum >
                (SELECT fac_notificatie_job_nextrun
                        - fac_notificatie_job_interval / 24
                   FROM fac_notificatie_job
                  WHERE fac_notificatie_job_view = 'KFNS_V_NOTI_BEZOEKERS')
          AND ft.fac_tracking_datum <
                (SELECT fac_notificatie_job_nextrun
                   FROM fac_notificatie_job
                  WHERE fac_notificatie_job_view = 'KFNS_V_NOTI_BEZOEKERS');

CREATE OR REPLACE VIEW KFNS_V_NOTI_CNTREMINDERESC (CODE, SENDER, RECEIVER, TEXT, KEY,  PAR1, PAR2, XKEY)
AS
SELECT '', '',  fac.safe_to_number(kc.cnt_kenmerkcontract_waarde),
             (SELECT REPLACE (REPLACE (fac_srtnotificatie_oms, '##contractnr##',c.cnt_contract_key), '##hrdr##', b.prs_bedrijf_naam)
          FROM fac_srtnotificatie
         WHERE fac_srtnotificatie_code = 'CUST06')
          text,
          c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract kc
    WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND cnt_contract_verwijder IS NULL
      AND c.ins_discipline_key = 901
      AND cnt_contract_status = 0
      --AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
      AND (cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (sysdate)
      OR cnt.cnt_getrappeldatum (c.cnt_contract_key) +7 = TRUNC (sysdate))
      AND c.cnt_contract_key = kc.cnt_contract_key
      AND cnt_kenmerkcontract_verwijder IS NULL
      AND kc.cnt_kenmerk_key =  381
      union all
      SELECT '', '',  fac.safe_to_number(kc.cnt_kenmerkcontract_waarde),
             (SELECT REPLACE (REPLACE (fac_srtnotificatie_oms, '##contractnr##',c.cnt_contract_key), '##hrdr##', b.prs_bedrijf_naam)
          FROM fac_srtnotificatie
         WHERE fac_srtnotificatie_code = 'CUST07')
          text,
          c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract kc
    WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND cnt_contract_verwijder IS NULL
      AND c.ins_discipline_key = 901
      AND cnt_contract_status = 0
      --AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
      --AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = sysdate
      AND cnt.cnt_getrappeldatum (c.cnt_contract_key) +30 = TRUNC (sysdate)
      AND c.cnt_contract_key = kc.cnt_contract_key
      AND cnt_kenmerkcontract_verwijder IS NULL
      AND kc.cnt_kenmerk_key =  382;


CREATE OR REPLACE VIEW kfns_v_noti_resreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT 'RESINF',
          NULL,
          rsvr.res_rsv_ruimte_host_key,
             'Reservering '
          || res.res_reservering_key
          || ': U heeft op '
          || TO_CHAR (rsvr.res_rsv_ruimte_van, 'DD-MM')
          || ' van '
          || TO_CHAR (rsvr.res_rsv_ruimte_van, 'HH24:MI')
          || ' tot '
          || TO_CHAR (rsvr.res_rsv_ruimte_tot, 'HH24:MI')
          || ' ruimte '
          || r.res_ruimte_nr
          || ' gereserveerd.',
          res.res_reservering_key,
          rsvr.res_rsv_ruimte_key
     FROM res_v_aanwezigreservering res,
          res_v_aanwezigrsv_ruimte rsvr,
          res_ruimte_opstelling opst,
          res_disc_params rdp,
          res_ruimte r
    WHERE     r.res_discipline_key = rdp.res_ins_discipline_key
          AND rdp.res_disc_params_noti_dagen IS NOT NULL
          AND res.res_reservering_key = rsvr.res_reservering_key
          AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key
          AND opst.res_ruimte_key = r.res_ruimte_key
          AND rsvr.res_status_fo_key <= 5
          AND rsvr.res_rsv_ruimte_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                 SYSDATE,
                                                 res_disc_params_noti_dagen,
                                                 'DAGEN')
                                          AND  fac.datumtijdplusuitvoertijd (
                                                  SYSDATE,
                                                  res_disc_params_noti_dagen
                                                  + 1,
                                                  'DAGEN')
          AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
          AND rsvr.res_rsv_ruimte_van >= SYSDATE
   UNION ALL
     SELECT 'RESINF',
            NULL,
            res_rsv_ruimte_host_key,
               'Reservering '
            || res_reservering_key
            || ': U heeft op '
            || TO_CHAR (MIN (van), 'dd-mm')
            || DECODE (
                  MIN (van),
                  MAX (tot),
                  ' om ' || TO_CHAR (MIN (van), 'hh24:mi'),
                     ' van '
                  || TO_CHAR (MIN (van), 'hh24:mi')
                  || ' tot '
                  || TO_CHAR (MAX (tot), 'hh24:mi'))
            || ' in ruimte ('
            || (SELECT    alg_gebouw_code
                       || '-'
                       || alg_verdieping_code
                       || '-'
                       || alg_ruimte_nr
                  FROM alg_v_onroerendgoed_gegevens arg
                 WHERE arg.alg_ruimte_key = ruimte_key)
            || ') '
            || COUNT (res_reservering_key)
            || ' voorziening(en) gereserveerd.',
            res_reservering_key,
            res_rsv_ruimte_key
       FROM (SELECT rsvr.res_rsv_ruimte_host_key,
                    res.res_reservering_key,
                    rsvd.res_rsv_deel_van van,
                    rsvd.res_rsv_deel_tot tot,
                    rsvr.res_rsv_ruimte_key,
                    rsvr.alg_ruimte_key ruimte_key
               FROM res_v_aanwezigreservering res,
                    res_v_aanwezigrsv_ruimte rsvr,
                    res_disc_params rdp,
                    res_rsv_deel rsvd,
                    res_deel rd
              WHERE     rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                    AND rd.res_deel_key = rsvd.res_deel_key
                    AND rd.res_discipline_key = rdp.res_ins_discipline_key
                    AND rdp.res_disc_params_noti_dagen IS NOT NULL
                    AND res.res_reservering_key = rsvr.res_reservering_key
                    AND rsvr.res_ruimte_opstel_key IS NULL
                    AND rsvr.res_status_fo_key <= 5
                    AND rsvd.res_rsv_deel_verwijder IS NULL
                    AND rsvd.res_rsv_deel_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                         SYSDATE,
                                                         res_disc_params_noti_dagen,
                                                         'DAGEN')
                                                  AND  fac.datumtijdplusuitvoertijd (
                                                          SYSDATE,
                                                          res_disc_params_noti_dagen
                                                          + 1,
                                                          'DAGEN')
                    AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
                    AND rsvd.res_rsv_deel_van >= SYSDATE
             UNION ALL
             SELECT rsvr.res_rsv_ruimte_host_key,
                    res.res_reservering_key,
                    rsva.res_rsv_artikel_levering van,
                    rsva.res_rsv_artikel_levering tot,
                    rsvr.res_rsv_ruimte_key,
                    rsvr.alg_ruimte_key ruimte_key
               FROM res_v_aanwezigreservering res,
                    res_v_aanwezigrsv_ruimte rsvr,
                    res_disc_params rdp,
                    res_rsv_artikel rsva,
                    res_artikel ra
              WHERE     rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                    AND ra.res_discipline_key = rdp.res_ins_discipline_key
                    AND rsva.res_artikel_key = ra.res_artikel_key
                    AND rdp.res_disc_params_noti_dagen IS NOT NULL
                    AND res.res_reservering_key = rsvr.res_reservering_key
                    AND rsvr.res_ruimte_opstel_key IS NULL
                    AND rsvr.res_status_fo_key <= 5
                    AND rsva.res_rsv_artikel_verwijder IS NULL
                    AND rsva.res_rsv_artikel_levering BETWEEN fac.datumtijdplusuitvoertijd (
                                                                 SYSDATE,
                                                                 res_disc_params_noti_dagen,
                                                                 'DAGEN')
                                                          AND  fac.datumtijdplusuitvoertijd (
                                                                  SYSDATE,
                                                                  res_disc_params_noti_dagen
                                                                  + 1,
                                                                  'DAGEN')
                    AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
                    AND rsva.res_rsv_artikel_levering >= SYSDATE)
   GROUP BY res_rsv_ruimte_host_key,
            res_reservering_key,
            res_rsv_ruimte_key,
            ruimte_key;


-- KFNS#51944: Rapportage in FIP:2-formaat om nieuwe ruimtekenmerken te kunnen
--             importeren (reeds bestaande kenmerken niet in deze rapportage).
CREATE OR REPLACE VIEW kfns_v_rap_ruimten_csv
(
   locatiecode,
   gebouwcode,
   bouwlaagvolgnummer,
   ruimtefunctie,
   ruimtenummer,
   ruimteomschrijving,
   vloeroppervlak,
   afdelingscode,
   bezetting,
   reserveerbareruimte,
   categorie,
   expiredagen,
   prijs,
   opstelling,
   aantalbezoekers,
   naam,
   omschrijving
)
AS
   SELECT x.alg_locatie_code,
          x.alg_gebouw_code,
          --x.alg_verdieping_code,
          x.alg_verdieping_volgnr,
          x.alg_srtruimte_omschrijving,
          x.alg_ruimte_nr,
          x.alg_ruimte_omschrijving,
          x.alg_ruimte_bruto_vloeropp,
          NULL afdelingscode,
          NULL bezetting,
          rr.reserveerbaar,
          rr.catalogus,
          rr.expire_dagen,
          rr.prijs,
          ro.opstelling,
          ro.aantalbezoekers,
          rr.res_ruimte_nr,
          rr.res_ruimte_omschrijving
     FROM (SELECT r.alg_ruimte_key,
                  l.alg_locatie_code,
                  g.alg_gebouw_code,
                  v.alg_verdieping_code,
                  v.alg_verdieping_volgnr,
                  sr.alg_srtruimte_omschrijving,
                  r.alg_ruimte_nr,
                  r.alg_ruimte_omschrijving,
                  r.alg_ruimte_bruto_vloeropp
             FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l, alg_srtruimte sr
            WHERE r.alg_verdieping_key = v.alg_verdieping_key
                  AND v.alg_gebouw_key = g.alg_gebouw_key
                  AND g.alg_locatie_key = l.alg_locatie_key
                  AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)) x
          LEFT JOIN (  SELECT COUNT ( * ) aantal,
                              MIN (alg_ruimte_key) alg_ruimte_key,
                              res_ruimte_key
                         FROM res_v_aanwezigalg_ruimte
                     GROUP BY res_ruimte_key) rar
             ON x.alg_ruimte_key = rar.alg_ruimte_key AND rar.aantal = 1 -- Toon niet de koppelzalen
          LEFT JOIN (SELECT rr.res_ruimte_key,
                            'J' reserveerbaar,
                            d.ins_discipline_omschrijving catalogus,
                            dp.res_disc_params_expire_dagen expire_dagen,
                            rr.res_ruimte_prijs prijs,
                            rr.res_ruimte_nr,
                            rr.res_ruimte_omschrijving
                       FROM res_v_aanwezigruimte rr, res_discipline d, res_disc_params dp
                      WHERE rr.res_discipline_key = d.ins_discipline_key
                            AND d.ins_discipline_key = dp.res_ins_discipline_key) rr
             ON rar.res_ruimte_key = rr.res_ruimte_key
          LEFT JOIN (SELECT ro.res_ruimte_key,
                            o.res_opstelling_omschrijving opstelling,
                            ro.res_ruimte_opstel_bezoekers aantalbezoekers
                       FROM res_ruimte_opstelling ro, res_opstelling o
                      WHERE ro.res_ruimte_opstel_verwijder IS NULL
                            AND ro.res_opstelling_key = o.res_opstelling_key
                            AND NOT EXISTS -- Toon alleen de "oudste" opstelling (= met laagste key)
                                  (SELECT 1
                                     FROM res_ruimte_opstelling
                                    WHERE res_ruimte_opstel_verwijder IS NULL
                                          AND res_ruimte_key = ro.res_ruimte_key
                                          AND res_ruimte_opstel_key < ro.res_ruimte_opstel_key)) ro
             ON rar.res_ruimte_key = ro.res_ruimte_key;


-- KFNS#52311: Rapportage gebouwinspecties (20-03-2018).
CREATE OR REPLACE FORCE VIEW KFNS_V_INS_INSPECTIE
(
   NR,
   PLANDATUM,
   UITVOERDATUM,
   INSPECTIE,
   JAAR,
   KWARTAAL,
   MAAND,
   JAAR_MAAND,
   OMSCHRIJVINGINSPECTIE,
   DISTRICT_OMSCHRIJVING,
   LOCATIE_CODE,
   LOCATIE_OMSCHRIJVING,
   GEBOUW_NAAM,
   GEBOUW_CODE,
   GEBOUW_OMSCHRIJVING,
   VERDIEPING_OMSCHRIJVING,
   RUIMTE_NR,
   RUIMTE_OMSCHRIJVING,
   VOLGNR,
   SOORT_ONDERDEEL,
   ONDERDEEL,
   SCORE
)
AS
     SELECT c.ins_deelsrtcontrole_key AS nr,
            c.ins_deelsrtcontrole_datum_org AS plandatum,
            c.ins_deelsrtcontrole_datum AS uitvoerdatum,
               TO_CHAR (c.ins_deelsrtcontrole_datum, 'YY')
            || '-'
            || TO_CHAR (c.ins_deelsrtcontrole_datum, 'MM')
            || '-'
            || gi.ins_srtcontrole_opmerking
               AS inspectie,
            TO_CHAR (c.ins_deelsrtcontrole_datum, 'YY') AS jaar,
            TO_CHAR (c.ins_deelsrtcontrole_datum, 'Q') AS kwartaal,
            TO_CHAR (c.ins_deelsrtcontrole_datum, 'Month') AS maand,
            TO_CHAR (c.ins_deelsrtcontrole_datum, 'YY-MM') AS jaar_maand,
            gi.ins_srtcontrole_info AS omschrijvinginspectie,
            dis.alg_district_omschrijving AS district_omschrijving,
            l.alg_locatie_code AS locatie_code,
            l.alg_locatie_omschrijving AS locatie_omschrijving,
            g.alg_gebouw_naam AS gebouw_naam,
            g.alg_gebouw_code AS gebouw_code,
            g.alg_gebouw_omschrijving AS gebouw_omschrijving,
            v.alg_verdieping_omschrijving AS verdieping_omschrijving,
            r.alg_ruimte_nr AS ruimte_nr,
            r.alg_ruimte_omschrijving AS ruimte_omschrijving,
            km.ins_kenmerk_volgnummer AS volgnr,
            km.ins_kenmerk_hint AS soort_onderdeel,
            skm.ins_srtkenmerk_omschrijving AS onderdeel,
            TO_NUMBER (fud.fac_usrdata_code) AS score
       FROM ins_deelsrtcontrole c,
            ins_srtcontrole gi,
            ins_srtdeel os,
            ins_srtgroep og,
            ins_kmdeelsrtcontr ckm,
            ins_kenmerk km,
            ins_srtkenmerk skm,
            fac_kenmerkdomein fkm,
            fac_usrtab fut,
            fac_usrdata fud,
            ins_deel d,
            alg_ruimte r,
            alg_verdieping v,
            alg_gebouw g,
            alg_locatie l,
            alg_district dis
      WHERE     c.ins_srtcontrole_key = gi.ins_srtcontrole_key
            AND gi.ins_srtinstallatie_key = os.ins_srtdeel_key
            AND os.ins_srtgroep_key = og.ins_srtgroep_key
            AND og.ins_srtgroep_key = 181 -- Dit is de key voor de objectgroep "Inspectieronde"
            AND d.ins_deel_key = c.ins_deel_key
            AND d.ins_alg_ruimte_key = r.alg_ruimte_key
            AND r.alg_verdieping_key = v.alg_verdieping_key
            AND v.alg_gebouw_key = g.alg_gebouw_key
            AND g.alg_locatie_key = l.alg_locatie_key
            AND l.alg_district_key = dis.alg_district_key
            AND skm.ins_srtkenmerk_key = km.ins_srtkenmerk_key
            AND ckm.ins_kenmerk_key = km.ins_kenmerk_key
            AND ckm.ins_deelsrtcontrole_key = c.ins_deelsrtcontrole_key
            AND fkm.fac_kenmerkdomein_key = skm.fac_kenmerkdomein_key
            AND fkm.fac_usrtab_key = fut.fac_usrtab_key
            AND fut.fac_usrtab_key = fud.fac_usrtab_key
            AND fud.fac_usrdata_key = FAC.SAFE_TO_NUMBER(ckm.ins_kmdeelsrtcontr_waarde)
   ORDER BY nr ASC, km.ins_kenmerk_volgnummer ASC;


-- KFNS#56620: Basis voor dagelijkse notificaties naar WMT contactpersonen;
--             voor de output geldt:
--             Dat deze de lopende NT-opdrachten toont.
--             Dat de data per WMT contactpersoon/gebouw wordt genotificeerd
--             (via extra_key-principe).
CREATE OR REPLACE VIEW kfns_v_rap_lopende_opdr_nt
(
   mld_opdr_key,
   opdrachtid,
   melddatum,
   melder,
   melding_onderwerp,
   vakgroep,
   soortmelding,
   extra_key,                                                -- Moet zo heten!
   gebouw,
   wmt_contact,
   opdr_omschrijving,
   status,
   behandelaar,
   uitvoerende,
   plan_of_einddatum
)
AS
   SELECT o.mld_opdr_key,
          COALESCE (sd.ins_srtdiscipline_prefix, '') || TO_CHAR (m.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
             opdrid,
          m.mld_melding_datum,                       -- o.mld_opdr_datumbegin?
          pm.prs_perslid_naam_full,
          m.mld_melding_onderwerp,
          md.ins_discipline_omschrijving,
          sm.mld_stdmelding_omschrijving,
          g.alg_gebouw_key extra_key,
          g.alg_gebouw_naam,
          cp.alg_onrgoedkenmerk_waarde wmt_cp,
          o.mld_opdr_omschrijving,
          os.mld_statusopdr_omschrijving status, -- ms.mld_statuses_omschrijving?
          pb.prs_perslid_naam_full behandelaar,
          COALESCE (b.prs_bedrijf_naam, 'Intern') uitvoerende,
          COALESCE (o.mld_opdr_plandatum, o.mld_opdr_einddatum) plan_of_einddatum
     FROM mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          prs_v_perslid_fullnames_all pm,
          --mld_statuses ms,
          alg_v_allonroerendgoed aog,
          alg_gebouw g,
          (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
             FROM alg_v_aanwezigonrgoedkenmerk
            WHERE alg_kenmerk_key = 1580                 -- WMT contactpersoon
                  AND INSTR (alg_onrgoedkenmerk_waarde, '@') > 0) cp,
          mld_opdr o,
          mld_typeopdr ot,
          mld_statusopdr os,
          prs_v_perslid_fullnames_all pb,
          prs_bedrijf b
    WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_discipline_key IN (45, 53) -- Gebouw- & installatieonderhoud (S+A)
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.prs_perslid_key_voor = pm.prs_perslid_key
          --AND m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
          AND aog.alg_gebouw_key = g.alg_gebouw_key
          AND EXISTS                           -- Als Vezacode, dan NT-gebouw!
                (SELECT 1
                   FROM alg_v_aanwezigonrgoedkenmerk
                  WHERE alg_kenmerk_key = 1560                     -- Vezacode
                        AND alg_onrgoed_key = g.alg_gebouw_key)
          AND g.alg_gebouw_key = cp.alg_onrgoed_key(+)
          AND m.mld_melding_key = o.mld_melding_key
          AND o.mld_typeopdr_key = ot.mld_typeopdr_key
          AND ot.mld_typeopdr_key IN (281, 282, 284, 302) -- Mandaatopdracht/Contractopdracht/Offerteopdracht/Interne opdracht
          AND o.mld_statusopdr_key = os.mld_statusopdr_key
          AND os.mld_statusopdr_key IN (3, 4, 5, 8, 10)
          AND o.prs_perslid_key = pb.prs_perslid_key
          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+);

CREATE OR REPLACE VIEW kfns_v_noti_opdr_nt
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT DISTINCT
          sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (sn.fac_srtnotificatie_oms, '##GEB##', v.gebouw),
          r.fac_usrrap_key,
          v.extra_key,     -- Extra_key, dus in dit geval filteren per gebouw!
          v.wmt_contact,
          NULL
     FROM kfns_v_rap_lopende_opdr_nt v,
          fac_usrrap r,
          fac_srtnotificatie sn
    WHERE v.wmt_contact IS NOT NULL
          AND UPPER (r.fac_usrrap_view_name) = 'KFNS_V_RAP_LOPENDE_OPDR_NT'
          AND sn.fac_srtnotificatie_code = 'CUST08';

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile
