--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database

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

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 FORCE VIEW bons_v_rap_salaris_unit4
(
    fclt_f_periode,
    werkgever,
    werknemer,
    loonsoort,
    dienstverband,
    boekjaar,
    periode,
    datum,
    volgnr,
    dagensoort,
    looncomponent,
    aantaldagen,
    aantaluren,
    waarde
)
AS
    SELECT fclt_f_periode,
           2,
           nr_verzorger,
           3,
           NULL,
           TO_CHAR (boekdatum, 'yyyy'),
           SUBSTR (fclt_f_periode, 6, 2),
           TO_CHAR (boekdatum, 'dd-mm-yyyy'),
           NULL,
           DECODE (uur_soort,
                   'GEWERKT', 'GEW',
                   'ZIEK', 'ZK',
                   'VERLOF', 'VRL',
                   NULL),
           DECODE (kosten_soort,
                   'FIETS', '799102',
                   'BROMF', '799101',
                   'KM_WW', '709111',
                   'KM_PLUS', '107002',
                   'REISTIJD', '4800',
                   NULL),
           svdagen,
           uren,
           kosten
      FROM care_v_rap_salaris_b
     WHERE nr_verzorger NOT IN ('11',
                                '6',
                                '8',
                                '9',
                                'Fake1')
    UNION ALL
    SELECT fclt_f_periode,
           2,
           nr_verzorger,
           3,
           NULL,
           TO_CHAR (boekdatum, 'yyyy'),
           SUBSTR (fclt_f_periode, 6, 2),
           TO_CHAR (boekdatum, 'dd-mm-yyyy'),
           NULL,
           NULL,
           '107003',
           svdagen,
           uren,
           kosten
      FROM care_v_rap_salaris_b
     WHERE     kosten_soort = 'KM_PLUS'
           AND nr_verzorger NOT IN ('11',
                                    '6',
                                    '8',
                                    '9',
                                    'Fake1');

CREATE OR REPLACE FORCE VIEW CARE_V_RAP2_FACTUUR_UREN_M_V2
(
    FCLT_X_PERIODE,
    FCLT_X_GEMEENTE,
    TARIEF,
    MELDING,
    BESCHIKKING,
    BESCHIKKING_OMSCHR,
    CLIENTNUMMER,
    BSN,
    ACHTERNAAM,
    VOORVOEGSELS,
    VOORLETTERS,
    GEBOORTEDATUM,
    GESLACHT,
    POSTCODE,
    HUISNUMMER,
    HUISNUMMERTOEVOEGING,
    JAAR,
    WEEK,
    PRODUCT,
    MINUTEN,
    MINUTEN_X_TARIEF,
    MEDEWERKER,
    PERSONEELSNUMMER_MDW
)
AS
      SELECT periode,
             gemeente,
             tarief,
             melding,
             MIN (beschikkingsnr),
             beschikking_omschr,
             MIN (client_nr),
             bsn_client,
             MIN (client_naam),
             MIN (client_tussenvoegsel),
             MIN (client_voorletters),
             MIN (client_geboortedatum),
             MIN (client_mv),
             MIN (client_postcode),
             SUBSTR (
                 MIN (client_huisnr),
                 1,
                 DECODE (
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                     0, LENGTH (MIN (client_huisnr)),
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]') - 1)),
             SUBSTR (
                 MIN (client_huisnr),
                 DECODE (REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                         0, LENGTH (MIN (client_huisnr)) + 1,
                         REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'))),
             jaar,
             weeknr,
             DECODE (
                 product,
                 'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                 'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                 'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                 ''),
             ROUND (60 * SUM (week_uren_besteed)),
             ROUND (60 * SUM (week_uren_besteed)) * tarief,
             verzorger,
             nr_verzorger
        FROM care_v_gemeente_fact2_uren f
    GROUP BY periode,
             gemeente,
             tarief,
             melding,
             beschikkingsnr,
             beschikking_omschr,
             f.bsn_client,
             product,
             jaar,
             weeknr,
             verzorger,
             nr_verzorger;

CREATE OR REPLACE VIEW BONS_V_RAP_SALARIS_EASYLON
(
    FCLT_F_PERIODE,
    WERKGEVER,
    WERKNEMER,
    LOONCOMPONENT,
    WAARDE
)
AS
      SELECT "FCLT_F_PERIODE",
             "WERKGEVER",
             "WERKNEMER",
             "LOONCOMPONENT",
             "WAARDE"
        FROM (SELECT sal.fclt_f_periode,
                     '2'                                              werkgever,
                     sal.nr_verzorger                                 werknemer,
                     DECODE (COALESCE (sal.kosten_soort, sal.uur_soort),
                             'GEWERKT', 'GEW',
                             'ZIEK', 'ZK',
                             'VERLOF', 'VRL',
                             'FIETS', '799102',
                             'BROMF', '799101',
                             'KM_WW', '709111',
                             'KM_PLUS', '107002',
                             'REISTIJD', '4800',
                             NULL)                                    looncomponent,
                     DECODE (
                         COALESCE (sal.kosten_soort, sal.uur_soort),
                         'REISTIJD',   ROUND (
                                           (  COALESCE (sal.kosten,
                                                        sal.svdagen)
                                            / 60),
                                           2)
                                     * 100, --- reistijd eerst van minuten naar uren
                         COALESCE (sal.kosten, sal.svdagen) * 100)    waarde
                FROM care_v_rap_salaris_b sal
               WHERE nr_verzorger NOT IN ('11',
                                          '6',
                                          '8',
                                          '9',
                                          'Fake1')
              UNION ALL
              SELECT sal.fclt_f_periode,
                     '2'                  werkgever,
                     sal.nr_verzorger     werknemer,
                     '107003'             looncomponent,
                     sal.kosten * 100     waarde
                FROM care_v_rap_salaris_b sal
               WHERE     nr_verzorger NOT IN ('11',
                                              '6',
                                              '8',
                                              '9',
                                              'Fake1')
                     AND sal.kosten_soort = 'KM_PLUS'
              UNION ALL
              SELECT sal.fclt_f_periode,
                     '2'                 werkgever,
                     sal.nr_verzorger    werknemer,
                     DECODE (sal.uur_soort,
                             'GEWERKT', 'GEWU',
                             'ZIEK', 'ZKU',
                             'VERLOF', 'VRLU',
                             NULL)       looncomponent,
                     sal.uren * 100      waarde
                FROM care_v_rap_salaris_b sal
               WHERE     nr_verzorger NOT IN ('11',
                                              '6',
                                              '8',
                                              '9',
                                              'Fake1')
                     AND sal.uur_soort IS NOT NULL)
    ORDER BY fclt_f_periode DESC, werknemer;

--controle op km per verzorgende per dag
CREATE OR REPLACE FORCE VIEW CARE_V_RAP_REISTIJD_DAG
(
    HIDE_F_PRS_PERSLID_KEY,
    UROLE,
    HIDE_F_DATUM,
    DATUM,
    FCLT_F_JAAR,
    FCLT_F_PERIODE,
    FCLT_F_WEEK,
    FCLT_F_VERZORGER,
    ADRES,
    HUISNR,
    POSTCODE,
    WOONPLAATS,
    TELEFOONNR,
    MOBIEL,
    FCLT_F_AUTO,
    KM
)
AS
      SELECT v.prs_perslid_key,
             'bo',
             dk.mld_opdruren_dagkosten_datum,
             TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'yyyy-mm-dd')
                 datum,
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY'))
                 jaar,
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13)
                 periodenr,
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW'))
                 weeknr,
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?'),
             ROUND (SUM (dk.interkm)/1000)
        FROM care_v_opdruren_dagkosten  dk,
             care_v_verzorger           v,
             prs_v_perslid_fullnames_all vn
       WHERE     v.prs_perslid_key = dk.prs_perslid_key
             AND vn.prs_perslid_key = v.prs_perslid_key
    GROUP BY v.prs_perslid_key,
             'bo',
             dk.mld_opdruren_dagkosten_datum,
             TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'yyyy-mm-dd'),
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY')),
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13),
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW')),
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?');

--controle op km per verzorgende per week
CREATE OR REPLACE FORCE VIEW CARE_V_RAP_REISTIJD_WEEKNR
(
    HIDE_F_PRS_PERSLID_KEY,
    UROLE,
    FCLT_F_JAAR,
    FCLT_F_PERIODE,
    FCLT_F_WEEK,
    FCLT_F_VERZORGER,
    ADRES,
    HUISNR,
    POSTCODE,
    WOONPLAATS,
    TELEFOONNR,
    MOBIEL,
    FCLT_F_AUTO,
    KM
)
AS
      SELECT v.prs_perslid_key,
             'bo',
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY'))
                 jaar,
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13)
                 periodenr,
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW'))
                 weeknr,
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?'),
             ROUND (SUM (dk.interkm)/1000)
        FROM care_v_opdruren_dagkosten  dk,
             care_v_verzorger           v,
             prs_v_perslid_fullnames_all vn
       WHERE     v.prs_perslid_key = dk.prs_perslid_key
             AND vn.prs_perslid_key = v.prs_perslid_key
    GROUP BY v.prs_perslid_key,
             'bo',
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY')),
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13),
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW')),
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?');


--controle op km per verzorgende per periode
CREATE OR REPLACE FORCE VIEW CARE_V_RAP_REISTIJD_PERIODE
(
    HIDE_F_PRS_PERSLID_KEY,
    UROLE,
    FCLT_F_JAAR,
    FCLT_F_PERIODE,
    FCLT_F_VERZORGER,
    ADRES,
    HUISNR,
    POSTCODE,
    WOONPLAATS,
    TELEFOONNR,
    MOBIEL,
    FCLT_F_AUTO,
    KM
)
AS
      SELECT v.prs_perslid_key,
             'bo',
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY'))
                 jaar,
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13)
                 periodenr,
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?'),
             ROUND (SUM (dk.interkm)/1000)
        FROM care_v_opdruren_dagkosten  dk,
             care_v_verzorger           v,
             prs_v_perslid_fullnames_all vn
       WHERE     v.prs_perslid_key = dk.prs_perslid_key
             AND vn.prs_perslid_key = v.prs_perslid_key
    GROUP BY v.prs_perslid_key,
             'bo',
             TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY')),
             LEAST (
                   FLOOR (
                         (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                       / 4)
                 + 1,
                 13),
             vn.prs_perslid_naam_full,
             v.verzorger_adres,
             v.verzorger_huisnr,
             v.verzorger_postcode,
             v.verzorger_woonplaats,
             v.verzorger_telefoon_werk,
             v.prs_verzorger_mobiel,
             COALESCE (v.auto_rijbewijs, '?');

--------------------------------------------------------------------
----- Hieronder staan de views ed die uit care.vie afkomstig zijn
--------------------------------------------------------------------

CREATE OR REPLACE FORCE VIEW care_v_gemeente
AS
    SELECT gemeente.alg_locatie_key,
           gemeente.alg_locatie_code,
           gemeente.alg_locatie_omschrijving,
           gemeente.alg_locatie_adres,
           gemeente.alg_locatie_postcode,
           gemeente.alg_locatie_plaats,
           gemeente.alg_locatie_post_adres,
           gemeente.alg_locatie_post_postcode,
           gemeente.alg_locatie_post_plaats,
           gemeente.alg_locatie_verantw,
           gemeente.alg_locatie_x,
           gemeente.alg_locatie_y,
           COALESCE (fac.safe_to_number (K.ALG_ONRGOEDKENMERK_WAARDE), 0)
               AS alg_locatie_veiling,
           COALESCE (fac.safe_to_number (K2.ALG_ONRGOEDKENMERK_WAARDE), 0)
               AS gemeente_budget,
           COALESCE (fac.safe_to_number (K3.ALG_ONRGOEDKENMERK_WAARDE), 0)
               AS gemeente_ob
      FROM alg_locatie         gemeente,
           alg_onrgoedkenmerk  k,
           alg_onrgoedkenmerk  k2,
           alg_onrgoedkenmerk  k3
     WHERE     gemeente.alg_locatie_verwijder IS NULL
           AND k.alg_onrgoed_niveau(+) = 'L'
           AND k.alg_kenmerk_key(+) = 1006
           AND k.alg_onrgoed_key(+) = alg_locatie_key
           AND k2.alg_onrgoed_niveau(+) = 'L'
           AND k2.alg_kenmerk_key(+) = 1007
           AND k2.alg_onrgoed_key(+) = alg_locatie_key
           AND k3.alg_onrgoed_niveau(+) = 'L'
           AND k3.alg_kenmerk_key(+) = 1008
           AND k3.alg_onrgoed_key(+) = alg_locatie_key;

-- Let op de decode: dit is een mapping van locatie-kenmerk op melding-kenmerk, die elders aan elkaar worden gelinked.
-- Decode-Mapping: van alg-kenmerk_key 1000 -> fac_usrdata_key 1 (HV1)
-- Decode-Mapping: van alg-kenmerk_key 1001 -> fac_usrdata_key 2 (HV2)
-- Decode-Mapping: van alg-kenmerk_key 1002 -> fac_usrdata_key 3 (HV3)
-- duedatum is datum tot en met (!) het tarief geldig is, de dag erop volgende dus niet meer, dan is het volgende tarief geldig.

CREATE OR REPLACE FORCE VIEW care_v_gemeente_tarieven
(
    alg_locatie_key,
    product_code,
    tarief,
    duedatum
)
AS
    SELECT alg_onrgoed_key,
           DECODE (alg_kenmerk_key,  1000, 1,  1001, 2,  1002, 3,  NULL),
           COALESCE (fac.safe_to_number (alg_onrgoedkenmerk_waarde), 0),
           alg_onrgoedkenmerk_verwijder
      FROM alg_onrgoedkenmerk, alg_locatie l
     WHERE     alg_onrgoed_niveau = 'L'
           AND alg_kenmerk_key IN (1000, 1001, 1002)
           AND alg_onrgoed_key = alg_locatie_key
           AND alg_locatie_verwijder IS NULL;

-- View met alle geregistreerde clienten (ongeacht of ze een lopende beschikking hebben).
-- Let op de afdelings-key 22 (= afdeling waar alle clienten in zitten) in onderstaande view:
-- Let op de ud.fac_usrdata_key = 48 (= setting mbt expliciet clientnr of impliet (=prs_perslid_key)

CREATE OR REPLACE FORCE VIEW care_v_client
AS
    SELECT client.prs_perslid_key                 prs_client_key,
           client.prs_perslid_naam                prs_client_naam,
           client.prs_perslid_tussenvoegsel       prs_client_tussenvoegsel,
           client.prs_perslid_voorletters         prs_client_voorletters,
           client.prs_perslid_voornaam            prs_client_voornaam,
           client.fac_profiel_key                 prs_client_cak_actie,
           DECODE (ud.fac_usrdata_omschr,
                   1, client.prs_perslid_nr,
                   client.prs_perslid_key)        prs_client_nr,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)    client_bsn,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)    client_meisjesnaam,
           (SELECT DECODE (kl.prs_kenmerklink_waarde,
                           21, 'M',
                           22, 'V',
                           NULL)
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1061)    client_mv,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)    client_geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)    client_adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1040)    client_huisnr,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)    client_postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1005)    client_woonplaats,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)    client_telefoon_thuis,
           client.prs_perslid_telefoonnr          client_telefoon_werk,
           client.prs_perslid_mobiel              prs_client_mobiel,
           client.prs_perslid_email               prs_client_email,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1041)    client_bijzonderheden,
           client.prs_perslid_verwijder
      FROM prs_perslid client, fac_usrdata ud
     WHERE client.prs_afdeling_key = 22 AND ud.fac_usrdata_key = 48;

-- view tbv van het controle rapport  FSN#20131 op aanwezige clienten

CREATE OR REPLACE FORCE VIEW CARE_V_AANWEZIG_CLIENT
AS
    SELECT prs_client_key,
           prs_client_naam,
           prs_client_tussenvoegsel,
           prs_client_voorletters,
           prs_client_voornaam,
           prs_client_nr,
           prs_client_cak_actie,
           client_bsn,
           client_meisjesnaam,
           client_mv,
           client_geboortedatum,
           client_adres,
           client_huisnr,
           client_postcode,
           client_woonplaats,
           client_telefoon_thuis,
           client_telefoon_werk,
           prs_client_mobiel,
           prs_client_email,
           client_bijzonderheden
      FROM care_v_client
     WHERE prs_perslid_verwijder IS NULL;

-- rapport controle cak rapport FSN#20131

CREATE OR REPLACE FORCE VIEW care_v_cak_clientcontrole
(
    fclt_f_client_naam,
    client_voornaam,
    client_voorletters,
    bsn,
    clientnummer,
    postcode,
    huisnummer,
    fclt_f_foutmelding,
    fout_code
)
AS
    WITH XX AS (SELECT * FROM CARE_V_AANWEZIG_CLIENT)
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Waarschuwing: Deze client staat gemarkeerd: vorige keer zorguren naar CAK vergeten'
               foutmelding,
           'W'
      FROM XX
     WHERE prs_client_cak_actie = 1
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Waarschuwing: Deze client staat gemarkeerd m.b.t. correctie zorguren'
               foutmelding,
           'W'
      FROM XX
     WHERE prs_client_cak_actie = 2
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Geen clientnummer ingevuld'     foutmelding,
           'E'
      FROM XX
     WHERE prs_client_nr IS NULL
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Voorletters niet ingevuld'     foutmelding,
           'E'
      FROM XX
     WHERE prs_client_voorletters IS NULL
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Client nummer bevat foutieve tekens'     foutmelding,
           'E'
      FROM XX
     WHERE LENGTH (TRIM (TRANSLATE (prs_client_nr, ' 0123456789', ' ')))
               IS NOT NULL
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'BSN bevat foutieve tekens'     foutmelding,
           'E'
      FROM XX
     WHERE LENGTH (TRIM (TRANSLATE (client_bsn, ' 0123456789', ' ')))
               IS NOT NULL
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Client nummer is niet uniek'     foutmelding,
           'E'
      FROM XX
     WHERE prs_client_nr IN (  SELECT prs_client_nr
                                 FROM XX
                             GROUP BY prs_client_nr
                               HAVING (COUNT (prs_client_nr) > 1))
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'BSN nummer is niet uniek'     foutmelding,
           'E'
      FROM XX
     WHERE client_bsn IN (  SELECT client_bsn
                              FROM XX
                          GROUP BY client_bsn
                            HAVING (COUNT (client_bsn) > 1))
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'BSN nummer is niet 8 of 9 cijfers'     foutmelding,
           'E'
      FROM XX
     WHERE LENGTH (client_bsn) NOT IN (8, 9)
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'BSN nummer voldoet niet aan de 11-proef'     foutmelding,
           'E'
      FROM XX
     WHERE MOD (
                 fac.safe_to_number (SUBSTR (client_bsn, 1, 1)) * 9
               + fac.safe_to_number (SUBSTR (client_bsn, 2, 1)) * 8
               + fac.safe_to_number (SUBSTR (client_bsn, 3, 1)) * 7
               + fac.safe_to_number (SUBSTR (client_bsn, 4, 1)) * 6
               + fac.safe_to_number (SUBSTR (client_bsn, 5, 1)) * 5
               + fac.safe_to_number (SUBSTR (client_bsn, 6, 1)) * 4
               + fac.safe_to_number (SUBSTR (client_bsn, 7, 1)) * 3
               + fac.safe_to_number (SUBSTR (client_bsn, 8, 1)) * 2
               + fac.safe_to_number (SUBSTR (client_bsn, 9, 1)) * -1,
               11) <>
           0
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Huisnummer begint niet met een cijfer, bevat een spatie of is leeg'
               foutmelding,
           'E'
      FROM XX
     WHERE    LENGTH (
                  TRIM (
                      TRANSLATE (SUBSTR (client_huisnr, 1, 1),
                                 ' 0123456789',
                                 ' ')))
                  IS NOT NULL
           OR client_huisnr IS NULL
           OR client_huisnr LIKE ('% %')
    UNION ALL
    SELECT prs_client_naam,
           prs_client_voornaam,
           prs_client_voorletters,
           client_bsn,
           prs_client_nr,
           client_postcode,
           client_huisnr,
           'Onjuist formaat van postcode (1234 AA)'     foutmelding,
           'E'
      FROM XX
     WHERE NOT REGEXP_LIKE (
                   client_postcode,
                   '^[1234567890][1234567890][1234567890][1234567890] [ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZ]$')
    ORDER BY 1, 8;

-- 'De teamleiders obv WEB_ORDBOF'

CREATE OR REPLACE FORCE VIEW care_v_teamleider
AS
    SELECT p.prs_perslid_key,
           p.prs_perslid_naam,
           p.prs_perslid_voornaam,
           p.prs_perslid_voorletters,
           d.ins_discipline_key,
           d.ins_discipline_omschrijving
      FROM prs_perslid          p,
           mld_discipline       d,
           fac_groeprechten     gr,
           fac_gebruikersgroep  gg,
           fac_functie          f
     WHERE     p.prs_perslid_key = gg.prs_perslid_key
           AND gr.fac_groep_key = gg.fac_groep_key
           AND gr.ins_discipline_key = d.ins_discipline_key
           AND gr.fac_functie_key = f.fac_functie_key
           AND f.fac_functie_code = 'WEB_ORDBOF'
           AND (   gr.fac_gebruiker_prs_level_write < 9
                OR gr.fac_gebruiker_alg_level_write < 9);

-- 'De teams incl. teamleden obv WEB_MLDORD'

CREATE OR REPLACE FORCE VIEW care_v_teamlid
AS
    SELECT p.prs_perslid_key,
           p.prs_perslid_naam,
           p.prs_perslid_voornaam,
           p.prs_perslid_voorletters,
           d.ins_discipline_key,
           d.ins_discipline_omschrijving
      FROM prs_perslid          p,
           mld_discipline       d,
           fac_groeprechten     gr,
           fac_gebruikersgroep  gg,
           fac_functie          f
     WHERE     p.prs_perslid_key = gg.prs_perslid_key
           AND gr.fac_groep_key = gg.fac_groep_key
           AND gr.ins_discipline_key = d.ins_discipline_key
           AND gr.fac_functie_key = f.fac_functie_key
           AND f.fac_functie_code = 'WEB_MLDORD';

-- Teamlid welke nu (!), op dit moment (!) een (of meer) lopende opdracht(en) heeft.

CREATE OR REPLACE FORCE VIEW care_v_actief_teamlid
AS
    SELECT p.prs_perslid_key,
           p.prs_perslid_naam,
           p.prs_perslid_voornaam,
           p.prs_perslid_voorletters,
           o.mld_melding_key,
           o.mld_opdr_key
      FROM prs_perslid p, mld_opdr o
     WHERE     p.prs_perslid_key = o.mld_uitvoerende_keys
           AND o.mld_opdr_datumbegin <= TRUNC (SYSDATE)
           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE);

-- View met alle geregistreerde verzorgers (ongeacht of ze een lopende opdracht hebben) op basis van afdelingskey
-- Elke perslid die rechten heeft om een zorg-opdracht in een team kan uitvoeren (WEB_MLDORD), is (potentieel) verzorger

CREATE OR REPLACE FORCE VIEW care_v_verzorger
AS
    SELECT verzorger.prs_perslid_key
               prs_perslid_key,
           verzorger.prs_perslid_nr
               prs_verzorger_personeelsnr,
           verzorger.prs_perslid_naam
               prs_verzorger_naam,
           verzorger.prs_perslid_tussenvoegsel
               prs_verzorger_tussenvoegsel,
           verzorger.prs_perslid_voorletters
               prs_verzorger_voorletters,
           verzorger.prs_perslid_voornaam
               prs_verzorger_voornaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)
               verzorger_bsn,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)
               verzorger_meisjesnaam,
           (SELECT DECODE (kl.prs_kenmerklink_waarde,
                           21, 'M',
                           22, 'V',
                           NULL)
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1061)
               verzorger_mv,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)
               verzorger_geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)
               verzorger_adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1040)
               verzorger_huisnr,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)
               verzorger_postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1005)
               verzorger_woonplaats,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)
               verzorger_telefoon_thuis,
           verzorger.prs_perslid_telefoonnr
               verzorger_telefoon_werk,
           verzorger.prs_perslid_mobiel
               prs_verzorger_mobiel,
           verzorger.prs_perslid_email
               prs_verzorger_email,
           sp.prs_srtperslid_omschrijving
               prs_verzorger_functie,
           verzorger.prs_perslid_dienstverband
               prs_verzorger_dienstverband,
           verzorger.prs_perslid_ingangsdatum
               prs_verzorger_ingangsdatum,
           verzorger.prs_perslid_einddatum
               prs_verzorger_einddatum,
           verzorger.prs_perslid_verwijder
               prs_verzorger_verwijder,
           (SELECT DECODE (kl.prs_kenmerklink_waarde,
                           81, 'J',
                           82, 'N',
                           NULL)
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1065)
               auto_rijbewijs,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1041)
               verzorger_bijzonderheden
      FROM prs_perslid verzorger, prs_srtperslid sp
     WHERE verzorger.prs_srtperslid_key = sp.prs_srtperslid_key;

CREATE OR REPLACE FORCE VIEW care_v_verzorger_in_teams
AS
    SELECT v.prs_perslid_key,
           v.prs_verzorger_naam,
           v.prs_verzorger_tussenvoegsel,
           v.prs_verzorger_voorletters,
           v.prs_verzorger_voornaam,
           v.verzorger_bsn,
           v.verzorger_meisjesnaam,
           v.verzorger_mv,
           v.verzorger_geboortedatum,
           v.verzorger_adres,
           v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_thuis,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email,
           v.prs_verzorger_functie,
           v.prs_verzorger_dienstverband,
           v.prs_verzorger_ingangsdatum,
           v.prs_verzorger_einddatum,
           v.prs_verzorger_verwijder,
           v.verzorger_bijzonderheden,
           tlid.ins_discipline_key              team_key,
           tlid.ins_discipline_omschrijving     team_naam
      FROM care_v_teamlid tlid, care_v_verzorger v
     WHERE v.prs_perslid_key = tlid.prs_perslid_key;

-- 'De administratie: Gerda/Anja/Susanne'
-- De personen voor de intake beschikkingen en de controle-functie hebben dat overeenkomstig de beschikkingen opdrachten
-- worden uitgegeven.
-- Deze view wordt gebruikt in de view care_v_noti_urenconflict voor het actief signaleren van conflicten in uren
-- tussen beschikkigen en uitgegeven opdrachten.

CREATE OR REPLACE FORCE VIEW care_v_controller
AS
    SELECT p.prs_perslid_key,
           p.prs_perslid_naam,
           p.prs_perslid_voornaam,
           p.prs_perslid_voorletters
      FROM prs_perslid p
     WHERE EXISTS
               (SELECT d.ins_discipline_key
                  FROM mld_discipline       d,
                       fac_groeprechten     gr,
                       fac_gebruikersgroep  gg,
                       fac_functie          f
                 WHERE     gg.prs_perslid_key = p.prs_perslid_key
                       AND gr.fac_groep_key = gg.fac_groep_key
                       AND gr.ins_discipline_key = d.ins_discipline_key
                       AND gr.fac_functie_key = f.fac_functie_key
                       AND f.fac_functie_code = 'WEB_MLDFOF');

-- Deze view is de totale view van alle beschikkingen met bijbehorende gegevens
-- Uitleg: d.ins_srtdiscipline_key = 1 (dit zijn de beschikking-meldingen, van vakgroeptype_key=1)

CREATE OR REPLACE FORCE VIEW care_v_beschikking_all
(
    mld_melding_key,
    mld_melding_status,
    gemeente_key,
    gemeente_code,
    gemeente_omschrijving,
    gemeente_adres,
    gemeente_postcode,
    gemeente_plaats,
    gemeente_post_adres,
    gemeente_post_postcode,
    gemeente_post_plaats,
    gemeente_contactpersoon,
    gemeente_factnr_infix,
    gemeente_factnr_suffix,
    gemeente_hv1_code,
    gemeente_hv2_code,
    gemeente_veiling,
    gemeente_budget,
    gemeente_ob,
    prs_client_key,
    prs_client_naam,
    prs_client_tussenvoegsel,
    prs_client_voorletters,
    prs_client_voornaam,
    prs_client_nr,
    prs_client_cak_actie,
    client_bsn,
    client_meisjesnaam,
    client_mv,
    client_geboortedatum,
    client_adres,
    client_huisnr,
    client_postcode,
    client_woonplaats,
    client_telefoon_thuis,
    client_telefoon_werk,
    prs_client_mobiel,
    prs_client_email,
    client_bijzonderheden,
    client_contactpersonen,
    beschikking_datum_van,
    beschikking_week_van,
    beschikking_jaar_van,
    beschikking_maandag_van_std,
    beschikking_maandag_van,
    beschikking_datum_tot,
    beschikking_week_tot,
    beschikking_jaar_tot,
    beschikking_maandag_tot_std,
    beschikking_maandag_tot,
    beschikking_afmeld_datum,
    pgb,
    product_code,
    product,
    pgb_tarief,
    uren_beschikking,
    beschikking_nr,
    beschikking_omschr,
    ins_discipline_key,
    ins_discipline_omschrijving,
    alt_hv1,
    alt_hv2,
    alt_hv3,
    alt_hv1_start,
    alt_hv2_start,
    alt_hv3_start
)
AS
    SELECT m.mld_melding_key,
           m.mld_melding_status,
           gemeente.alg_locatie_key,
           gemeente.alg_locatie_code,
           gemeente.alg_locatie_omschrijving,
           gemeente.alg_locatie_adres,
           gemeente.alg_locatie_postcode,
           gemeente.alg_locatie_plaats,
           gemeente.alg_locatie_post_adres,
           gemeente.alg_locatie_post_postcode,
           gemeente.alg_locatie_post_plaats,
           gemeente.alg_locatie_verantw,
           (SELECT ok.alg_onrgoedkenmerk_waarde
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 1004
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL),
           (SELECT ok.alg_onrgoedkenmerk_waarde
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 1005
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL),
           gemeente.alg_locatie_x,
           gemeente.alg_locatie_y,
           gemeente.alg_locatie_veiling,
           gemeente.gemeente_budget,
           gemeente.gemeente_ob,
           client.prs_perslid_key
               prs_client_key,
           client.prs_perslid_naam
               prs_client_naam,
           client.prs_perslid_tussenvoegsel
               prs_client_tussenvoegsel,
           client.prs_perslid_voorletters
               prs_client_voorletters,
           client.prs_perslid_voornaam
               prs_client_voornaam,
           client.prs_perslid_nr
               prs_client_nr,
           client.fac_profiel_key
               prs_client_cak_actie,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)
               client_bsn,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)
               client_meisjesnaam,
           (SELECT DECODE (kl.prs_kenmerklink_waarde,
                           21, 'M',
                           22, 'V',
                           NULL)
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1061)
               client_mv,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)
               client_geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)
               client_adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1040)
               client_huisnr,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)
               client_postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1005)
               client_woonplaats,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)
               client_telefoon_thuis,
           client.prs_perslid_telefoonnr
               client_telefoon_werk,
           client.prs_perslid_mobiel
               prs_client_mobiel,
           client.prs_perslid_email
               prs_client_email,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1041)
               client_bijzonderheden,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = client.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 2000)
               client_contactpersonen,
           m.mld_melding_datum
               beschikking_datum_van,
           TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'IW'))
               beschikking_week_van,
           TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'IYYY'))
               beschikking_jaar_van,
           (  TRUNC (mld_melding_datum)
            - DECODE (TO_CHAR (mld_melding_datum, 'D'),
                      '1', 8,
                      TO_CHAR (mld_melding_datum, 'D'))
            + 2)
               beschikking_maandag_van_std,
           care.goodmonday_start (m.mld_melding_key)
               beschikking_maandag_van,
           m.mld_melding_einddatum
               beschikking_datum_tot,
           TO_NUMBER (TO_CHAR (m.mld_melding_einddatum, 'IW'))
               beschikking_week_tot,
           TO_NUMBER (TO_CHAR (m.mld_melding_einddatum, 'IYYY'))
               beschikking_jaar_tot,
           (  TRUNC (mld_melding_einddatum)
            + 7
            - DECODE (TO_CHAR (mld_melding_einddatum, 'D'),
                      '1', 8,
                      TO_CHAR (mld_melding_einddatum, 'D'))
            + 2)
               beschikking_maandag_tot_std,
           care.goodmonday_end (m.mld_melding_key)
               beschikking_maandag_tot,
           fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
           m.prs_kostenplaats_key
               pgb,
           (SELECT fac.safe_to_number (km.mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     km.mld_melding_key = m.mld_melding_key
                   AND km.mld_kenmerkmelding_verwijder IS NULL
                   AND mld_kenmerk_key = 2)
               product_code,
           (SELECT ud.fac_usrdata_code
              FROM mld_kenmerkmelding km, fac_usrdata ud
             WHERE     km.mld_melding_key = m.mld_melding_key
                   AND km.mld_kenmerkmelding_verwijder IS NULL
                   AND mld_kenmerk_key = 2
                   AND ud.fac_usrdata_key =
                       fac.safe_to_number (km.mld_kenmerkmelding_waarde))
               product,
           COALESCE (
               (SELECT fac.safe_to_number (km.mld_kenmerkmelding_waarde)
                  FROM mld_kenmerkmelding km
                 WHERE     km.mld_melding_key = m.mld_melding_key
                       AND km.mld_kenmerkmelding_verwijder IS NULL
                       AND mld_kenmerk_key = 4),
               0)
               tarief,
           (SELECT fac.safe_to_number (km.mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     km.mld_melding_key = m.mld_melding_key
                   AND km.mld_kenmerkmelding_verwijder IS NULL
                   AND mld_kenmerk_key = 3)
               uren_beschikking,
           (SELECT km.mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     km.mld_melding_key = m.mld_melding_key
                   AND km.mld_kenmerkmelding_verwijder IS NULL
                   AND mld_kenmerk_key = 1)
               beschikking_nr,
           mld_melding_omschrijving,
           std.mld_ins_discipline_key,
           ins_discipline_omschrijving,
           (SELECT ok.alg_onrgoedkenmerk_waarde
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2000
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv1,
           (SELECT ok.alg_onrgoedkenmerk_waarde
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2001
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv2,
           (SELECT ok.alg_onrgoedkenmerk_waarde
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2002
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv3,
           (SELECT    TO_NUMBER (
                          TO_CHAR (
                              TO_DATE (ok.alg_onrgoedkenmerk_waarde,
                                       'DD-MM-YYYY'),
                              'IYYY'))
                   || LPAD (
                          LEAST (
                                FLOOR (
                                      (  TO_CHAR (
                                             TO_DATE (
                                                 ok.alg_onrgoedkenmerk_waarde,
                                                 'DD-MM-YYYY'),
                                             'IW')
                                       - 1)
                                    / 4)
                              + 1,
                              13),
                          2,
                          '0')
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2003
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv1_start,
           (SELECT    TO_NUMBER (
                          TO_CHAR (
                              TO_DATE (ok.alg_onrgoedkenmerk_waarde,
                                       'DD-MM-YYYY'),
                              'IYYY'))
                   || LPAD (
                          LEAST (
                                FLOOR (
                                      (  TO_CHAR (
                                             TO_DATE (
                                                 ok.alg_onrgoedkenmerk_waarde,
                                                 'DD-MM-YYYY'),
                                             'IW')
                                       - 1)
                                    / 4)
                              + 1,
                              13),
                          2,
                          '0')
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2004
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv2_start,
           (SELECT    TO_NUMBER (
                          TO_CHAR (
                              TO_DATE (ok.alg_onrgoedkenmerk_waarde,
                                       'DD-MM-YYYY'),
                              'IYYY'))
                   || LPAD (
                          LEAST (
                                FLOOR (
                                      (  TO_CHAR (
                                             TO_DATE (
                                                 ok.alg_onrgoedkenmerk_waarde,
                                                 'DD-MM-YYYY'),
                                             'IW')
                                       - 1)
                                    / 4)
                              + 1,
                              13),
                          2,
                          '0')
              FROM alg_onrgoedkenmerk ok
             WHERE     ok.alg_onrgoed_key = gemeente.alg_locatie_key
                   AND ok.alg_onrgoed_niveau = 'L'
                   AND ok.alg_kenmerk_key = 2005
                   AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
               alt_hv3_start
      FROM care_v_gemeente     gemeente,
           prs_perslid         client,
           mld_melding         m,
           mld_stdmelding      std,
           ins_tab_discipline  d
     WHERE     m.mld_alg_locatie_key = gemeente.alg_locatie_key
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND m.mld_melding_status <> 1
           AND d.ins_discipline_key = std.mld_ins_discipline_key
           AND d.ins_srtdiscipline_key = 1
           AND m.prs_perslid_key = client.prs_perslid_key;

-- Deze view is de totale view van alle productieve, bestede uren op beschikkingen, op welke opdracht, door wie op welk moment

CREATE OR REPLACE FORCE VIEW care_v_bestede_uren_all
AS
    SELECT o.mld_melding_key,
           o.mld_opdr_key,
           o.mld_opdr_datumbegin,
           TRUNC (o.mld_opdr_einddatum)
               einddatum,
           o.mld_opdr_uren
               uren_opdracht,
           verzorger.prs_perslid_key,
           verzorger.prs_perslid_naam,
           verzorger.prs_perslid_tussenvoegsel,
           verzorger.prs_perslid_voorletters,
           verzorger.prs_perslid_voornaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)
               bsn,
           verzorger.prs_perslid_nr
               nr_verzorger,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)
               meisjesnaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)
               geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)
               adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)
               postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)
               telefoon_thuis,
           verzorger.prs_perslid_telefoonnr
               telefoon_werk,
           verzorger.prs_perslid_mobiel,
           verzorger.prs_perslid_email,
           verzorger.prs_perslid_dienstverband,
           ou.mld_opdr_uren_key,
           TO_NUMBER (TO_CHAR (ou.mld_opdr_uren_datum, 'IYYY'))
               jaar,
           TO_NUMBER (TO_CHAR (ou.mld_opdr_uren_datum, 'IW'))
               weeknr,
           LEAST (
               FLOOR ((TO_CHAR (ou.mld_opdr_uren_datum, 'IW') - 1) / 4) + 1,
               13)
               periodenr,
           (  TRUNC (ou.mld_opdr_uren_datum)
            - DECODE (TO_CHAR (ou.mld_opdr_uren_datum, 'D'),
                      '1', 8,
                      TO_CHAR (ou.mld_opdr_uren_datum, 'D'))
            + 2)
               maandag_vandeweek,
           ou.mld_opdr_uren_datum
               datum_gewerkt,
           ou.mld_opdr_uren_besteed
               uren_besteed,
           ou.mld_opdr_uren_status
               uren_status
      FROM mld_opdr o, mld_opdr_uren ou, prs_perslid verzorger
     WHERE     ou.mld_opdr_key = o.mld_opdr_key
           AND ou.prs_perslid_key = verzorger.prs_perslid_key;

-- Deze view is de totale view van alle IMproductieve, bestede uren (verlof, ziekte, arts, werkoverleg) door wie op welk moment

CREATE OR REPLACE FORCE VIEW care_v_improductieve_uren_all
AS
    SELECT o.mld_impropdr_key,
           o.mld_impropdr_code,
           o.mld_impropdr_omschrijving,
           verzorger.prs_perslid_key,
           verzorger.prs_perslid_naam,
           verzorger.prs_perslid_tussenvoegsel,
           verzorger.prs_perslid_voorletters,
           verzorger.prs_perslid_voornaam,
           verzorger.prs_perslid_nr,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)
               bsn,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)
               meisjesnaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)
               geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)
               adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)
               postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)
               telefoon_thuis,
           verzorger.prs_perslid_telefoonnr
               telefoon_werk,
           verzorger.prs_perslid_mobiel,
           verzorger.prs_perslid_email,
           verzorger.prs_perslid_dienstverband,
           ou.mld_opdr_uren_key,
           TO_NUMBER (TO_CHAR (ou.mld_opdr_uren_datum, 'IYYY'))
               jaar,
           TO_NUMBER (TO_CHAR (ou.mld_opdr_uren_datum, 'IW'))
               weeknr,
           LEAST (
               FLOOR ((TO_CHAR (ou.mld_opdr_uren_datum, 'IW') - 1) / 4) + 1,
               13)
               periodenr,
           (  TRUNC (ou.mld_opdr_uren_datum)
            - DECODE (TO_CHAR (ou.mld_opdr_uren_datum, 'D'),
                      '1', 8,
                      TO_CHAR (ou.mld_opdr_uren_datum, 'D'))
            + 2)
               maandag_vandeweek,
           ou.mld_opdr_uren_datum
               datum_gewerkt,
           ou.mld_opdr_uren_besteed
               uren_besteed,
           ou.mld_opdr_uren_status
               uren_status
      FROM mld_impropdr o, mld_opdr_uren ou, prs_perslid verzorger
     WHERE     ou.mld_impropdr_key = o.mld_impropdr_key
           AND ou.prs_perslid_key = verzorger.prs_perslid_key;

-- UNION van de tabellen care_v_bestede_uren_all en care_v_improductieve_uren_all
-- Dus zowel de productieve als improductieve uren

CREATE OR REPLACE FORCE VIEW care_v_totaal_uren_all
AS
    SELECT prs_perslid_key,
           mld_melding_key,
           mld_opdr_key     AS opdracht_key,
           'P'              AS opdracht_type,
           mld_opdr_uren_key,
           jaar,
           periodenr,
           weeknr,
           maandag_vandeweek,
           datum_gewerkt,
           uren_besteed,
           uren_status
      FROM care_v_bestede_uren_all
    UNION ALL
    SELECT prs_perslid_key,
           NULL                 AS mld_melding_key,
           mld_impropdr_key     AS opdracht_key,
           'I'                  AS opdracht_type,
           mld_opdr_uren_key,
           jaar,
           periodenr,
           weeknr,
           maandag_vandeweek,
           datum_gewerkt,
           uren_besteed,
           uren_status
      FROM care_v_improductieve_uren_all;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van deze(!) week niet hebben ingeleverd
-- Want ieder teamlid moet een weekbrief inleveren, en bij geen gemaakt uren moet 0 worden ingevuld.
-- Teamleden zonder opdrachten kunnen (in principe) ook niets invullen.

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_0
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE)
                - DECODE (TO_CHAR (SYSDATE, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE)
                              - DECODE (TO_CHAR (SYSDATE, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van vorige(!) week niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_1
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 7)
                - DECODE (TO_CHAR (SYSDATE - 7, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 7, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 7)
                              - DECODE (TO_CHAR (SYSDATE - 7, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 7, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van 2(!) week geleden niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_2
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 14)
                - DECODE (TO_CHAR (SYSDATE - 14, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 14, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 14)
                              - DECODE (TO_CHAR (SYSDATE - 14, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 14, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van 3(!) week geleden niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_3
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 21)
                - DECODE (TO_CHAR (SYSDATE - 21, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 21, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 21)
                              - DECODE (TO_CHAR (SYSDATE - 21, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 21, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van 4(!) week geleden niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_4
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 28)
                - DECODE (TO_CHAR (SYSDATE - 28, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 28, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 28)
                              - DECODE (TO_CHAR (SYSDATE - 28, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 28, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van 5(!) week geleden niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_5
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 35)
                - DECODE (TO_CHAR (SYSDATE - 35, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 35, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 35)
                              - DECODE (TO_CHAR (SYSDATE - 35, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 35, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van 6(!) week geleden niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_6
AS
    SELECT tlid.prs_perslid_key
      FROM care_v_totaal_uren_all uren, care_v_verzorger tlid
     WHERE     (  TRUNC (SYSDATE - 42)
                - DECODE (TO_CHAR (SYSDATE - 42, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 42, 'D'))
                + 2) =
               uren.maandag_vandeweek
           AND uren.uren_status < 2
           AND uren.prs_perslid_key = tlid.prs_perslid_key
    UNION
      SELECT tlid.prs_perslid_key
        FROM care_v_verzorger tlid
       WHERE NOT EXISTS
                 (SELECT uren.prs_perslid_key
                    FROM care_v_totaal_uren_all uren
                   WHERE     (  TRUNC (SYSDATE - 42)
                              - DECODE (TO_CHAR (SYSDATE - 42, 'D'),
                                        '1', 8,
                                        TO_CHAR (SYSDATE - 42, 'D'))
                              + 2) =
                             uren.maandag_vandeweek
                         AND uren.prs_perslid_key = tlid.prs_perslid_key)
    -- AND NVL (tlid.prs_verzorger_dienstverband, -1) <> 0
    GROUP BY tlid.prs_perslid_key;

-- Van alle teamleden (of ze nu opdracht hebben of niet) diegene die de weekbrief van de vorige periode niet hebben ingeleverd

CREATE OR REPLACE FORCE VIEW care_v_missing_weekbrief_all
(
    prs_perslid_key,
    jaar,
    weeknr
)
AS
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE, 'IW'))
      FROM care_v_missing_weekbrief_0
    UNION
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IW'))
      FROM care_v_missing_weekbrief_1
    UNION
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IW'))
      FROM care_v_missing_weekbrief_2
    UNION
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IW'))
      FROM care_v_missing_weekbrief_3
    UNION
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IW'))
      FROM care_v_missing_weekbrief_4
    UNION
    SELECT prs_perslid_key,
           TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IYYY')),
           TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IW'))
      FROM care_v_missing_weekbrief_5
    UNION
      SELECT prs_perslid_key,
             TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IYYY')),
             TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IW'))
        FROM care_v_missing_weekbrief_6
    GROUP BY prs_perslid_key;

CREATE OR REPLACE FORCE VIEW care_v_ingevoerde_uren
AS
    SELECT *
      FROM care_v_totaal_uren_all
     WHERE uren_status = 1;

CREATE OR REPLACE FORCE VIEW care_v_te_fiatteren_uren
AS
    SELECT *
      FROM care_v_totaal_uren_all
     WHERE uren_status = 2;

CREATE OR REPLACE FORCE VIEW care_v_te_factureren_uren
AS
    SELECT *
      FROM care_v_bestede_uren_all
     WHERE uren_status = 3;

CREATE OR REPLACE FORCE VIEW care_v_first_factuur_uren_ooit
AS
      SELECT b.client_bsn, MIN (uur.datum_gewerkt) AS datum_eerste_keer_ooit
        FROM care_v_beschikking_all b, care_v_te_factureren_uren uur
       WHERE uur.mld_melding_key = b.mld_melding_key AND b.pgb IS NULL
    GROUP BY client_bsn;

-- View die hieronder wordt gebruikt ter afsluiting van een periode, en waarvan de laatste uren van de laatste week
-- moeten worden goedgekeurd danwel dat een gehele periode goedgekeurd dient te worden
-- Dit zijn alle gemaakte uren die ter fiat zijn aangeboden of reeds zijn goedgekeurd.

CREATE OR REPLACE FORCE VIEW care_v_te_fiatfact_uren
AS
    SELECT *
      FROM care_v_bestede_uren_all
     WHERE uren_status = 2 OR uren_status = 3;

CREATE OR REPLACE FORCE VIEW care_v_gefactureerde_uren
AS
    SELECT *
      FROM care_v_bestede_uren_all
     WHERE uren_status = 4;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- in deze(!) week

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_0
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE)
              - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE to_number(to_char (SYSDATE,'IYYY')) = uren2.jaar
    --AND to_number(to_char (SYSDATE,'IW')) = uren2.weeknr
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- in de vorige(!) week

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_1
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 7)
              - DECODE (TO_CHAR (SYSDATE - 7, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 7, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE to_number(to_char (SYSDATE-7,'IYYY')) = uren2.jaar
    --AND to_number(to_char (SYSDATE-7,'IW')) = uren2.weeknr
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- van 2(!) weken geleden

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_2
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 14)
              - DECODE (TO_CHAR (SYSDATE - 14, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 14, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-14,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-14,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- in de vorige 2(!) weken

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_12
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_1
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_2)
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- van 3(!) weken geleden

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_3
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 21)
              - DECODE (TO_CHAR (SYSDATE - 21, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 21, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-21,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-21,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- in de vorige 3(!) weken

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_123
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_1
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_2
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_3)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_4
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 28)
              - DECODE (TO_CHAR (SYSDATE - 28, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 28, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-28,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-28,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

-- View per beschikking met de gemaakte uren (uren die ter goedkeuring zijn aangeboden danwel zijn goedgekeurd)
-- in de vorige 3(!) weken

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_1234
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_1
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_2
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_3
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_4)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_5
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 35)
              - DECODE (TO_CHAR (SYSDATE - 35, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 35, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-35,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-35,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_2345
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_2
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_3
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_4
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_5)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_6
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 42)
              - DECODE (TO_CHAR (SYSDATE - 42, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 42, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-42,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-42,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_3456
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_3
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_4
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_5
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_6)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_7
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, COALESCE (SUM (uren2.uren_besteed), -1)
        FROM care_v_te_fiatfact_uren uren2
       WHERE (  TRUNC (SYSDATE - 49)
              - DECODE (TO_CHAR (SYSDATE - 49, 'D'),
                        '1', 8,
                        TO_CHAR (SYSDATE - 49, 'D'))
              + 2) =
             uren2.maandag_vandeweek
    --WHERE (to_number(to_char (SYSDATE-42,'IYYY')) = uren2.jaar)
    --AND (to_number(to_char (SYSDATE-42,'IW')) = uren2.weeknr)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_gemaakte_uren_4567
(
    mld_melding_key,
    uren_besteed
)
AS
      SELECT mld_melding_key, SUM (uren_besteed)
        FROM (SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_4
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_5
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_6
              UNION ALL
              SELECT mld_melding_key, uren_besteed FROM care_v_gemaakte_uren_7)
    GROUP BY mld_melding_key;

--  View met lopende beschikkingen in de vorige 4(!) weken  met gesommeerd hun indicatieuren

CREATE OR REPLACE FORCE VIEW care_v_indicatie_uren_1234
(
    mld_melding_key,
    uren_beschikking
)
AS
      SELECT mld_melding_key, SUM (uren_beschikking)
        FROM (WITH
                  XX
                  AS
                      (SELECT b.mld_melding_key,
                              b.uren_beschikking,
                              beschikking_maandag_van,
                              beschikking_maandag_tot
                         FROM care_v_beschikking_all b)
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 7 >= beschikking_maandag_van
                     AND SYSDATE - 7 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 14 >= beschikking_maandag_van
                     AND SYSDATE - 14 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 21 >= beschikking_maandag_van
                     AND SYSDATE - 21 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 28 >= beschikking_maandag_van
                     AND SYSDATE - 28 <= beschikking_maandag_tot)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_indicatie_uren_2345
(
    mld_melding_key,
    uren_beschikking
)
AS
      SELECT mld_melding_key, SUM (uren_beschikking)
        FROM (WITH
                  XX
                  AS
                      (SELECT b.mld_melding_key,
                              b.uren_beschikking,
                              beschikking_maandag_van,
                              beschikking_maandag_tot
                         FROM care_v_beschikking_all b)
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 14 >= beschikking_maandag_van
                     AND SYSDATE - 14 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 21 >= beschikking_maandag_van
                     AND SYSDATE - 21 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 28 >= beschikking_maandag_van
                     AND SYSDATE - 28 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 35 >= beschikking_maandag_van
                     AND SYSDATE - 35 <= beschikking_maandag_tot)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_indicatie_uren_3456
(
    mld_melding_key,
    uren_beschikking
)
AS
      SELECT mld_melding_key, SUM (uren_beschikking)
        FROM (WITH
                  XX
                  AS
                      (SELECT b.mld_melding_key,
                              b.uren_beschikking,
                              beschikking_maandag_van,
                              beschikking_maandag_tot
                         FROM care_v_beschikking_all b)
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 21 >= beschikking_maandag_van
                     AND SYSDATE - 21 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 28 >= beschikking_maandag_van
                     AND SYSDATE - 28 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 35 >= beschikking_maandag_van
                     AND SYSDATE - 35 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 42 >= beschikking_maandag_van
                     AND SYSDATE - 42 <= beschikking_maandag_tot)
    GROUP BY mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_indicatie_uren_4567
(
    mld_melding_key,
    uren_beschikking
)
AS
      SELECT mld_melding_key, SUM (uren_beschikking)
        FROM (WITH
                  XX
                  AS
                      (SELECT b.mld_melding_key,
                              b.uren_beschikking,
                              beschikking_maandag_van,
                              beschikking_maandag_tot
                         FROM care_v_beschikking_all b)
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 28 >= beschikking_maandag_van
                     AND SYSDATE - 28 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 35 >= beschikking_maandag_van
                     AND SYSDATE - 35 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 42 >= beschikking_maandag_van
                     AND SYSDATE - 42 <= beschikking_maandag_tot
              UNION ALL
              SELECT mld_melding_key, uren_beschikking
                FROM XX
               WHERE     SYSDATE - 49 >= beschikking_maandag_van
                     AND SYSDATE - 49 <= beschikking_maandag_tot)
    GROUP BY mld_melding_key;

-- View met lopende beschikkingen met een verschil tussen indicatie-uren en gemaakte uren van de vorige 4(!) weken

CREATE OR REPLACE FORCE VIEW care_v_conflict_uren_1234
AS
    SELECT iu.mld_melding_key, iu.uren_beschikking, gu.uren_besteed
      FROM care_v_indicatie_uren_1234 iu, care_v_gemaakte_uren_1234 gu
     WHERE iu.mld_melding_key = gu.mld_melding_key;

-- View met lopende beschikkingen met een verschil tussen indicatie-uren en gemaakte uren van de periode (= 4(!) weken)
-- vanaf niet vorige week en 3 ervoor, maar vanaf 2 week geleden en 3 week ervoor

CREATE OR REPLACE FORCE VIEW care_v_conflict_uren_2345
AS
    SELECT iu.mld_melding_key, iu.uren_beschikking, gu.uren_besteed
      FROM care_v_indicatie_uren_2345 iu, care_v_gemaakte_uren_2345 gu
     WHERE iu.mld_melding_key = gu.mld_melding_key;

-- View met lopende beschikkingen met een verschil tussen indicatie-uren en gemaakte uren van de periode (= 4(!) weken)
-- vanaf niet 2 week geleden en 3 ervoor, maar vanaf 3 week geleden en 3 week ervoor

CREATE OR REPLACE FORCE VIEW care_v_conflict_uren_3456
AS
    SELECT iu.mld_melding_key, iu.uren_beschikking, gu.uren_besteed
      FROM care_v_indicatie_uren_3456 iu, care_v_gemaakte_uren_3456 gu
     WHERE iu.mld_melding_key = gu.mld_melding_key;

-- View met lopende beschikkingen met een verschil tussen indicatie-uren en gemaakte uren van de periode (= 4(!) weken)
-- vanaf niet 2 week geleden en 3 ervoor, maar vanaf 4 week geleden en 3 week ervoor

CREATE OR REPLACE FORCE VIEW care_v_conflict_uren_4567
AS
    SELECT iu.mld_melding_key, iu.uren_beschikking, gu.uren_besteed
      FROM care_v_indicatie_uren_4567 iu, care_v_gemaakte_uren_4567 gu
     WHERE iu.mld_melding_key = gu.mld_melding_key;

-- Om de conflicten van een periode in detail te kunnen analyseren: wie heeft in welke week de uren gemaakt.
-- Eerst een hulp-view voor de rapportage, vandaar de infix _tmp_

CREATE OR REPLACE FORCE VIEW care_v_tmp_conflict_uren_1234
(
    periode,
    melding,
    gemeente,
    beschikkingsnr,
    client,
    uren_totaal,
    uren_besteed,
    indicatie_uren,
    verzorger,
    jaar,
    weeknr,
    datum,
    week_uren_gepland,
    week_uren_besteed
)
AS
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IW')),
           c.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           c.uren_beschikking,
           c.uren_besteed,
           b.uren_beschikking,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           uur.jaar,
           uur.weeknr,
           uur.datum_gewerkt,
           uur.uren_opdracht,
           uur.uren_besteed
      FROM care_v_conflict_uren_1234  c,
           care_v_beschikking_all     b,
           care_v_bestede_uren_all    uur
     WHERE     c.mld_melding_key = b.mld_melding_key
           AND uur.mld_melding_key = b.mld_melding_key
           AND (  TRUNC (SYSDATE - 28)
                - DECODE (TO_CHAR (SYSDATE - 28, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 28, 'D'))
                + 2) <=
               uur.maandag_vandeweek
           AND (  TRUNC (SYSDATE - 7)
                - DECODE (TO_CHAR (SYSDATE - 7, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 7, 'D'))
                + 2) >=
               uur.maandag_vandeweek
           AND (uur.uren_status = 2 OR uur.uren_status = 3)
    UNION
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 7, 'IW')),
           b.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           iu.uren_beschikking,
           0,
           b.uren_beschikking,
           '-',
           NULL,
           NULL,
           NULL,
           NULL,
           0
      FROM care_v_indicatie_uren_1234 iu, care_v_beschikking_all b
     WHERE     iu.mld_melding_key = b.mld_melding_key
           AND NOT EXISTS
                   (SELECT *
                      FROM care_v_gemaakte_uren_1234 gu
                     WHERE gu.mld_melding_key = iu.mld_melding_key);

-- Rapportage view A (postfix A): op periode-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_1234a
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed)
        FROM care_v_tmp_conflict_uren_1234
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client;

-- Rapportage view B (postfix B): op periode + week-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_1234b
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_1234
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr;

-- Rapportage view C (postfix C): op periode + week + verzorger -nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_1234c
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    fclt_f_verzorger,
    uren_gepland_week,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             verzorger,
             MIN (week_uren_gepland),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_1234
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr,
             verzorger;

-- Om de conflicten van een periode in detail te kunnen analyseren: wie heeft in welke week de uren gemaakt.
-- Eerst een hulp-view voor de rapportage, vandaar de infix _tmp_

CREATE OR REPLACE FORCE VIEW care_v_tmp_conflict_uren_2345
(
    periode,
    melding,
    gemeente,
    beschikkingsnr,
    client,
    uren_totaal,
    uren_besteed,
    indicatie_uren,
    verzorger,
    jaar,
    weeknr,
    datum,
    week_uren_gepland,
    week_uren_besteed
)
AS
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IW')),
           c.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           c.uren_beschikking,
           c.uren_besteed,
           b.uren_beschikking,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           uur.jaar,
           uur.weeknr,
           uur.datum_gewerkt,
           uur.uren_opdracht,
           uur.uren_besteed
      FROM care_v_conflict_uren_2345  c,
           care_v_beschikking_all     b,
           care_v_bestede_uren_all    uur
     WHERE     c.mld_melding_key = b.mld_melding_key
           AND uur.mld_melding_key = b.mld_melding_key
           AND (  TRUNC (SYSDATE - 35)
                - DECODE (TO_CHAR (SYSDATE - 35, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 35, 'D'))
                + 2) <=
               uur.maandag_vandeweek
           AND (  TRUNC (SYSDATE - 14)
                - DECODE (TO_CHAR (SYSDATE - 14, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 14, 'D'))
                + 2) >=
               uur.maandag_vandeweek
           AND (uur.uren_status = 2 OR uur.uren_status = 3)
    UNION
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 35, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 14, 'IW')),
           b.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           iu.uren_beschikking,
           0,
           b.uren_beschikking,
           '-',
           NULL,
           NULL,
           NULL,
           NULL,
           0
      FROM care_v_indicatie_uren_2345 iu, care_v_beschikking_all b
     WHERE     iu.mld_melding_key = b.mld_melding_key
           AND NOT EXISTS
                   (SELECT *
                      FROM care_v_gemaakte_uren_2345 gu
                     WHERE gu.mld_melding_key = iu.mld_melding_key);

-- Rapportage view A (postfix A): op periode-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_2345a
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed)
        FROM care_v_tmp_conflict_uren_2345
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client;

-- Rapportage view B (postfix B): op periode + week-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_2345b
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_2345
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr;

-- Rapportage view C (postfix C): op periode + week + verzorger -nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_2345c
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    fclt_f_verzorger,
    uren_gepland_week,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             verzorger,
             MIN (week_uren_gepland),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_2345
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr,
             verzorger;

-- Om de conflicten van een periode in detail te kunnen analyseren: wie heeft in welke week de uren gemaakt.
-- Eerst een hulp-view voor de rapportage, vandaar de infix _tmp_

CREATE OR REPLACE FORCE VIEW care_v_tmp_conflict_uren_3456
(
    periode,
    melding,
    gemeente,
    beschikkingsnr,
    client,
    uren_totaal,
    uren_besteed,
    indicatie_uren,
    verzorger,
    jaar,
    weeknr,
    datum,
    week_uren_gepland,
    week_uren_besteed
)
AS
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IW')),
           c.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           c.uren_beschikking,
           c.uren_besteed,
           b.uren_beschikking,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           uur.jaar,
           uur.weeknr,
           uur.datum_gewerkt,
           uur.uren_opdracht,
           uur.uren_besteed
      FROM care_v_conflict_uren_3456  c,
           care_v_beschikking_all     b,
           care_v_bestede_uren_all    uur
     WHERE     c.mld_melding_key = b.mld_melding_key
           AND uur.mld_melding_key = b.mld_melding_key
           AND (  TRUNC (SYSDATE - 42)
                - DECODE (TO_CHAR (SYSDATE - 42, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 42, 'D'))
                + 2) <=
               uur.maandag_vandeweek
           AND (  TRUNC (SYSDATE - 21)
                - DECODE (TO_CHAR (SYSDATE - 21, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 21, 'D'))
                + 2) >=
               uur.maandag_vandeweek
           AND (uur.uren_status = 2 OR uur.uren_status = 3)
    UNION
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 42, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 21, 'IW')),
           b.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           iu.uren_beschikking,
           0,
           b.uren_beschikking,
           '-',
           NULL,
           NULL,
           NULL,
           NULL,
           0
      FROM care_v_indicatie_uren_3456 iu, care_v_beschikking_all b
     WHERE     iu.mld_melding_key = b.mld_melding_key
           AND NOT EXISTS
                   (SELECT *
                      FROM care_v_gemaakte_uren_3456 gu
                     WHERE gu.mld_melding_key = iu.mld_melding_key);

-- Rapportage view A (postfix A): op periode-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_3456a
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed)
        FROM care_v_tmp_conflict_uren_3456
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client;

-- Rapportage view B (postfix B): op periode + week-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_3456b
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_3456
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr;

-- Rapportage view C (postfix C): op periode + week + verzorger -nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_3456c
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    fclt_f_verzorger,
    uren_gepland_week,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             verzorger,
             MIN (week_uren_gepland),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_3456
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr,
             verzorger;

-- Om de conflicten van een periode in detail te kunnen analyseren: wie heeft in welke week de uren gemaakt.
-- Eerst een hulp-view voor de rapportage, vandaar de infix _tmp_

CREATE OR REPLACE FORCE VIEW care_v_tmp_conflict_uren_4567
(
    periode,
    melding,
    gemeente,
    beschikkingsnr,
    client,
    uren_totaal,
    uren_besteed,
    indicatie_uren,
    verzorger,
    jaar,
    weeknr,
    datum,
    week_uren_gepland,
    week_uren_besteed
)
AS
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 49, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 49, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IW')),
           c.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           c.uren_beschikking,
           c.uren_besteed,
           b.uren_beschikking,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           uur.jaar,
           uur.weeknr,
           uur.datum_gewerkt,
           uur.uren_opdracht,
           uur.uren_besteed
      FROM care_v_conflict_uren_4567  c,
           care_v_beschikking_all     b,
           care_v_bestede_uren_all    uur
     WHERE     c.mld_melding_key = b.mld_melding_key
           AND uur.mld_melding_key = b.mld_melding_key
           AND (  TRUNC (SYSDATE - 49)
                - DECODE (TO_CHAR (SYSDATE - 49, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 49, 'D'))
                + 2) <=
               uur.maandag_vandeweek
           AND (  TRUNC (SYSDATE - 28)
                - DECODE (TO_CHAR (SYSDATE - 28, 'D'),
                          '1', 8,
                          TO_CHAR (SYSDATE - 28, 'D'))
                + 2) >=
               uur.maandag_vandeweek
           AND (uur.uren_status = 2 OR uur.uren_status = 3)
    UNION
    SELECT    TO_NUMBER (TO_CHAR (SYSDATE - 49, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 49, 'IW'))
           || ' t/m '
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IYYY'))
           || '-'
           || TO_NUMBER (TO_CHAR (SYSDATE - 28, 'IW')),
           b.mld_melding_key,
           b.gemeente_omschrijving,
           b.beschikking_nr,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           iu.uren_beschikking,
           0,
           b.uren_beschikking,
           '-',
           NULL,
           NULL,
           NULL,
           NULL,
           0
      FROM care_v_indicatie_uren_4567 iu, care_v_beschikking_all b
     WHERE     iu.mld_melding_key = b.mld_melding_key
           AND NOT EXISTS
                   (SELECT *
                      FROM care_v_gemaakte_uren_4567 gu
                     WHERE gu.mld_melding_key = iu.mld_melding_key);

-- Rapportage view A (postfix A): op periode-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_4567a
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed)
        FROM care_v_tmp_conflict_uren_4567
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client;

-- Rapportage view B (postfix B): op periode + week-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_4567b
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_4567
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr;

-- Rapportage view C (postfix C): op periode + week + verzorger -nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_4567c
(
    periode,
    melding,
    fclt_f_gemeente,
    beschikking,
    fclt_f_client,
    uren_gepland_totaal,
    uren_besteed_totaal,
    indicatie_uren,
    fclt_f_jaar_weeknr,
    fclt_f_verzorger,
    uren_gepland_week,
    uren_besteed_week
)
AS
      SELECT periode,
             TO_CHAR (melding),
             gemeente,
             beschikkingsnr,
             client,
             MIN (uren_totaal),
             MIN (uren_besteed),
             MIN (indicatie_uren),
             jaar || '-' || TO_CHAR (weeknr, '09'),
             verzorger,
             MIN (week_uren_gepland),
             SUM (week_uren_besteed)
        FROM care_v_tmp_conflict_uren_4567
    GROUP BY periode,
             melding,
             gemeente,
             beschikkingsnr,
             client,
             jaar,
             weeknr,
             verzorger;

-- Let op de notificatie-key 21 (=notificatie aan teamleiders/backoffice van team) in onderstaande view

CREATE OR REPLACE FORCE VIEW care_v_noti_teamleider
(
    code,
    sender,
    receiver,
    text,
    key,
    par1,
    par2,
    xkey
)
AS
    SELECT sn.fac_srtnotificatie_code,
           fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key),
           tl.prs_perslid_key,
           sn.fac_srtnotificatie_oms,
           m.mld_melding_key,
           m.mld_stdmelding_key,
           m.mld_melding_omschrijving,
           NULL
      FROM mld_melding          m,
           mld_stdmelding       std,
           prs_perslid          client,
           care_v_teamleider    tl,
           fac_notificatie_job  nj,
           fac_srtnotificatie   sn
     WHERE     sn.fac_srtnotificatie_code = 'CUST01'
           AND m.mld_melding_status = 2
           AND nj.fac_notificatie_job_key = 21
           AND client.prs_perslid_key = m.prs_perslid_key
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND tl.ins_discipline_key = std.mld_ins_discipline_key
           AND fac.gettrackingdate ('MLDNEW', m.mld_melding_key) >=
                 nj.fac_notificatie_job_nextrun
               - (nj.fac_notificatie_job_interval / 24);

-- Let op de kenmerk-key 3 (= indicatie-uren van de beschikking) in onderstaande view

CREATE OR REPLACE FORCE VIEW care_v_mld_match_opd
AS
      SELECT m.mld_melding_key,
             COUNT (o.mld_opdr_key)                  aant_opdr,
             km.mld_kenmerkmelding_waarde            uren_beschikking,
             COALESCE (SUM (o.mld_opdr_uren), 0)     uren_opdracht
        FROM mld_melding m, mld_opdr o, mld_kenmerkmelding km
       WHERE     m.mld_melding_key = o.mld_melding_key(+)
             AND km.mld_melding_key = m.mld_melding_key
             AND m.mld_melding_status IN (4, 7)
             AND km.mld_kenmerkmelding_verwijder IS NULL
             AND mld_kenmerk_key = 3
             AND o.mld_statusopdr_key(+) <> 1
             AND o.mld_statusopdr_key(+) <> 6
    GROUP BY m.mld_melding_key, km.mld_kenmerkmelding_waarde;

CREATE OR REPLACE FORCE VIEW care_v_mld_urenconflict_opd
AS
    SELECT *
      FROM care_v_mld_match_opd mmo
     WHERE mmo.uren_beschikking <> mmo.uren_opdracht;

CREATE OR REPLACE FORCE VIEW care_v_noti_urenconflict
(
    code,
    sender,
    receiver,
    text,
    key,
    par1,
    par2,
    xkey
)
AS
    SELECT sn.fac_srtnotificatie_code,
           c.prs_perslid_key,
           c.prs_perslid_key,
           sn.fac_srtnotificatie_oms,
           mmo.mld_melding_key,
           NULL,
           NULL,
           NULL
      FROM care_v_mld_match_opd  mmo,
           fac_srtnotificatie    sn,
           care_v_controller     c
     WHERE     sn.fac_srtnotificatie_code = 'CUST02'
           AND mmo.mld_melding_key =
               (SELECT MIN (mld_melding_key) FROM care_v_mld_urenconflict_opd);

-- Let op: mld_melding hieronder kan NULL zijn (dan zijn het kosten mbt improductieve uren),
-- en anders is mld_melding_key gevuld, en zijn de kosten gerelateerd aan beschikking.

CREATE OR REPLACE FORCE VIEW care_v_onkosten_all
(
    prs_perslid_key,
    bsn_verzorger,
    verzorger_naam,
    prs_verzorger_voorletters,
    prs_verzorger_tussenvoegsel,
    mld_kosten_key,
    mld_kosten_code,
    mld_kosten_omschrijving,
    mld_opdruren_kosten_besteed,
    mld_kosten_kosten,
    mld_melding_key,
    datum,
    status
)
AS
    SELECT v.prs_perslid_key,
           v.verzorger_bsn,
           v.prs_verzorger_naam,
           v.prs_verzorger_voorletters,
           v.prs_verzorger_tussenvoegsel,
           k.mld_kosten_key,
           k.mld_kosten_code,
           k.mld_kosten_omschrijving,
           ouk.mld_opdruren_kosten_besteed,
           k.mld_kosten_kosten,
           uur.mld_melding_key,
           uur.datum_gewerkt,
           uur.uren_status
      FROM care_v_totaal_uren_all  uur,
           care_v_verzorger        v,
           mld_opdruren_kosten     ouk,
           mld_kosten              k
     WHERE     uur.prs_perslid_key = v.prs_perslid_key
           AND uur.mld_opdr_uren_key = ouk.mld_opdr_uren_key
           AND ouk.mld_kosten_key = k.mld_kosten_key
           AND k.mld_kosten_verwijder IS NULL;

--
--
--
-- Rapportages
--
--
--
-- Overzicht van je teamgenoten, die de VERZORGER kan bekijken.

CREATE OR REPLACE FORCE VIEW care_v_rap_mijnteamgenoten
(
    [REDACTED],
    medewerker,
    mv,
    meisjesnaam,
    adres,
    postcode,
    woonplaats,
    huistelefoon,
    telefoonwerk,
    mobiel,
    email
)
AS
    SELECT v.team_key,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel
           || '('
           || COALESCE (v.prs_verzorger_voornaam, '-')
           || ')',
           v.verzorger_mv,
           v.verzorger_meisjesnaam,
           v.verzorger_adres || ' ' || v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_thuis,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email
      FROM care_v_verzorger_in_teams v;

CREATE OR REPLACE FORCE VIEW care_v_rap_personeel
(
    fclt_f_team,
    bsn,
    fclt_f_medewerker,
    fclt_f_mv,
    meisjesnaam,
    geboortedatum,
    leeftijd,
    adres,
    postcode,
    fclt_f_woonplaats,
    huistelefoon,
    telefoonwerk,
    mobiel,
    email,
    contracturen,
    fclt_f_jaar_indienst,
    datum_indienst,
    datum_uitdienst,
    verwijderd
)
AS
    SELECT v.team_naam,
           v.verzorger_bsn,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel
           || '('
           || COALESCE (v.prs_verzorger_voornaam, '-')
           || ')',
           v.verzorger_mv,
           v.verzorger_meisjesnaam,
           v.verzorger_geboortedatum,
           DECODE (
               verzorger_geboortedatum,
               NULL, '',
                 TO_NUMBER (TO_CHAR (SYSDATE, 'yyyy'))
               - TO_NUMBER (SUBSTR (verzorger_geboortedatum, 7, 4))),
           v.verzorger_adres || ' ' || v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_thuis,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email,
           v.prs_verzorger_dienstverband,
           TO_CHAR (v.prs_verzorger_ingangsdatum, 'YYYY'),
           TO_CHAR (v.prs_verzorger_ingangsdatum, 'DD-MM-YYYY'),
           TO_CHAR (v.prs_verzorger_einddatum, 'DD-MM-YYYY'),
           DECODE (v.prs_verzorger_verwijder, NULL, 'Nee', 'Ja')
      FROM care_v_verzorger_in_teams v;

CREATE OR REPLACE FORCE VIEW care_v_rap_missing_weekbrief
(
    fclt_f_weeknr,
    fclt_f_team,
    [REDACTED],
    fclt_f_medewerker,
    indienst,
    uitdienst,
    contracturen,
    meisjesnaam,
    adres,
    postcode,
    woonplaats,
    huistelefoon,
    telefoonwerk,
    mobiel,
    email
)
AS
    SELECT TO_CHAR (mw.jaar) || '-' || TO_CHAR (mw.weeknr, '00'),
           v.team_naam,
           v.team_key,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel
           || '('
           || COALESCE (v.prs_verzorger_voornaam, '-')
           || ')',
           TO_CHAR (v.prs_verzorger_ingangsdatum, 'dd-mm-yyyy'),
           TO_CHAR (v.prs_verzorger_einddatum, 'dd-mm-yyyy'),
           TO_CHAR (prs_verzorger_dienstverband),
           v.verzorger_meisjesnaam,
           v.verzorger_adres || ' ' || v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_thuis,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email
      FROM care_v_verzorger_in_teams v, care_v_missing_weekbrief_all mw
     WHERE v.prs_perslid_key = mw.prs_perslid_key;

CREATE OR REPLACE FORCE VIEW care_v_rap_clienten
(
    fclt_f_clientnr,
    fclt_f_bsn,
    fclt_f_naam,
    tussenvoegsel,
    voorletters,
    geboortejaar,
    adres,
    huisnr,
    postcode,
    fclt_f_woonplaats,
    telefoon,
    mobiel,
    bijzonderheden
)
AS
    SELECT prs_client_nr,
           client_bsn,
           prs_client_naam,
           prs_client_tussenvoegsel,
           prs_client_voorletters,
           client_geboortedatum,
           client_adres,
           client_huisnr,
           client_postcode,
           client_woonplaats,
           client_telefoon_thuis,
           prs_client_mobiel,
           client_bijzonderheden
      FROM care_v_client;

-- Alle beschikkingen in de toekomst (beschikking_datum_tot >= SYSDATE)

CREATE OR REPLACE FORCE VIEW care_v_rap_beschik_aflopend
(
    einddatum,
    aantal_dagen_te_gaan,
    looptijd_dagen,
    fclt_f_gemeente,
    melding_nr,
    client,
    bsn,
    product,
    uren_beschikking,
    fclt_3d_discipline_key,
    fclt_f_team
)
AS
    SELECT beschikking_datum_tot,
           FLOOR (beschikking_datum_tot - SYSDATE + 1),
           beschikking_datum_tot - beschikking_datum_van + 1,
           gemeente_omschrijving,
           TO_CHAR (mld_melding_key),
              prs_client_naam
           || ','
           || prs_client_voorletters
           || ' '
           || prs_client_tussenvoegsel,
           client_bsn,
           product,
           uren_beschikking,
           ins_discipline_key,
           ins_discipline_omschrijving
      FROM care_v_beschikking_all b1
     WHERE     beschikking_datum_tot >= SYSDATE
           AND mld_melding_status NOT IN (1, 5, 6)
           AND NOT EXISTS
                   (SELECT 'x'
                      FROM care_v_beschikking_all b2
                     WHERE     b2.prs_client_key = b1.prs_client_key
                           AND b2.beschikking_datum_van =
                               b1.beschikking_datum_tot + 1);

-- Totaliseren van conflict-uren variant A: op periode-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_a
(
    fclt_f_periode,
    fclt_f_gemeente,
    fclt_f_client,
    beschikking,
    melding,
    uren_periode,
    uren_besteed,
    fclt_f_status
)
AS
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_1234a
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_2345a
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_3456a
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_4567a;

-- Totaliseren van conflict-uren variant B: op periode + week-nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_b
(
    fclt_f_periode,
    fclt_f_gemeente,
    fclt_f_client,
    beschikking,
    melding,
    uren_periode,
    uren_besteed,
    fclt_f_weeknr,
    indicatie,
    bestede_uren_week,
    fclt_f_status,
    fclt_f_weekstatus
)
AS
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_1234b
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_2345b
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_3456b
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_4567b;

-- Totaliseren van conflict-uren variant C: op periode + week + verzorger -nivo de conflicten analyseren...

CREATE OR REPLACE FORCE VIEW care_v_rap_conflict_uren_c
(
    fclt_f_periode,
    fclt_f_gemeente,
    fclt_f_client,
    beschikking,
    melding,
    uren_periode,
    uren_besteed,
    fclt_f_weeknr,
    fclt_f_verzorger,
    indicatie,
    bestede_uren_week,
    fclt_f_status,
    fclt_f_weekstatus
)
AS
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           fclt_f_verzorger,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_1234c
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           fclt_f_verzorger,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_2345c
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           fclt_f_verzorger,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_3456c
    UNION
    SELECT periode,
           fclt_f_gemeente,
           fclt_f_client,
           beschikking,
           melding,
           uren_gepland_totaal,
           ROUND (uren_besteed_totaal, 2),
           fclt_f_jaar_weeknr,
           fclt_f_verzorger,
           indicatie_uren,
           ROUND (uren_besteed_week, 2),
           CASE
               WHEN uren_gepland_totaal < ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te veel uren besteed'
               WHEN uren_gepland_totaal > ROUND (uren_besteed_totaal, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END,
           CASE
               WHEN indicatie_uren < ROUND (uren_besteed_week, 2)
               THEN
                   'Te veel uren besteed'
               WHEN indicatie_uren > ROUND (uren_besteed_week, 2)
               THEN
                   'Te weinig uren besteed'
               ELSE
                   'OKEE'
           END
      FROM care_v_rap_conflict_uren_4567c;

----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- factuur ---factuur----factuur-----factuur----factuur----factuur----factuur----factuur----factuur----factuur---factuur---factuur--factuur--factuur------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Periodetabel van 2 jaar in het verleden t/m heden

CREATE OR REPLACE FORCE VIEW care_v_periodeweektabel_2jaar
(
    jaar,
    periode,
    week,
    maandag
)
AS
        SELECT TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IYYY')    jaar,
               LEAST (
                     FLOOR ((TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW') - 1) / 4)
                   + 1,
                   13)                                        periode,
               TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW')      week,
               TRUNC (SYSDATE - 7 * (LEVEL - 1), 'IW')        startdatum
          FROM DUAL
    CONNECT BY LEVEL <= 2 * 52 + 1;

CREATE OR REPLACE FORCE VIEW care_v_periodetabel_2jaar
(
    jaar,
    periode,
    jaar_periode,
    week_van,
    week_tm,
    maandag_van,
    zondag_tm
)
AS
      SELECT DISTINCT jaar,
                      periode,
                      jaar || '-' || LPAD (periode, 2, '0'),
                      MIN (week),
                      MAX (week),
                      MIN (maandag),
                      MAX (maandag) + 6
        FROM care_v_periodeweektabel_2jaar
    GROUP BY jaar, periode;

-- Periodetabel van 10 weken in het verleden t/m heden

CREATE OR REPLACE FORCE VIEW care_v_periodeweektabel
(
    jaar,
    periode,
    week,
    maandag
)
AS
        SELECT TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IYYY')    jaar,
               LEAST (
                     FLOOR ((TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW') - 1) / 4)
                   + 1,
                   13)                                        periode,
               TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW')      week,
               TRUNC (SYSDATE - 7 * (LEVEL - 1), 'IW')        startdatum
          FROM DUAL
    CONNECT BY LEVEL <= 1 * 10 + 1;

CREATE OR REPLACE FORCE VIEW care_v_periodetabel
(
    jaar,
    periode,
    jaar_periode,
    week_van,
    week_tm,
    maandag_van,
    zondag_tm
)
AS
      SELECT DISTINCT jaar,
                      periode,
                      jaar || '-' || LPAD (periode, 2, '0'),
                      MIN (week),
                      MAX (week),
                      MIN (maandag),
                      MAX (maandag) + 6
        FROM care_v_periodeweektabel
    GROUP BY jaar, periode;

--- View die van doen hebben met facturatie en salariering
--- pb.prs_bedrijf_key=2 is het interne bedrijf 'ATC' (WZA-code is hier geregistreerd in lev. nr)
--  ud.fac_usrdata_key = 48 is het record/instelling voor clientnr: prs_perslid_key of prs_perslid_nr.

CREATE OR REPLACE FORCE VIEW care_v_tmp2_factuur_uren
(
    periode,
    periode_nr,
    wzacode,
    prs_bedrijf_naam,
    prs_bedrijf_post_adres,
    prs_bedrijf_post_postcode,
    prs_bedrijf_post_plaats,
    prs_bedrijf_kvk,
    prs_bedrijf_bankrekeningnr,
    prs_bedrijf_contact_persoon,
    prs_bedrijf_contact_telefoon,
    prs_bedrijf_contact_fax,
    prs_bedrijf_email,
    prs_bedrijf_factnr_infix,
    melding,
    gemeente,
    gemeente_code,
    gemeente_post_adres,
    gemeente_post_postcode,
    gemeente_post_plaats,
    gemeente_contactpersoon,
    gemeente_factnr_infix,
    gemeente_factnr_suffix,
    gemeente_hv1_code,
    gemeente_hv2_code,
    gemeente_veiling,
    gemeente_budget,
    gemeente_ob,
    beschikkingsnr,
    beschikking_datum_van,
    beschikking_datum_tot,
    bsn_client,
    client_nr,
    client,
    client2,
    client_voorletters,
    client_tussenvoegsel,
    client_naam,
    client_meisjesnaam,
    client_mv,
    prs_client_email,
    client_contactpersonen,
    prs_client_cak_actie,
    client_geboortedatum,
    client_adres,
    client_huisnr,
    client_postcode,
    client_woonplaats,
    client_telefoon_thuis,
    prs_client_mobiel,
    client_bijzonderheden,
    indicatie_uren,
    pgb,
    product,
    tarief,
    beschikking_omschr,
    alt_hv1,
    alt_hv2,
    alt_hv3,
    verzorger_key,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    jaar,
    weeknr,
    datum,
    week_uren_gepland,
    week_uren_besteed
)
AS
    SELECT uur.jaar || '-' || LPAD (uur.periodenr, 2, '0'),
           uur.periodenr,
           pb.prs_leverancier_nr,
           pb.prs_bedrijf_naam,
           pb.prs_bedrijf_post_adres,
           pb.prs_bedrijf_post_postcode,
           pb.prs_bedrijf_post_plaats,
           pb.prs_overeenkomst_nr,
           pb.prs_bedrijf_opmerking,
           pb.prs_bedrijf_contact_persoon,
           pb.prs_bedrijf_contact_telefoon,
           pb.prs_bedrijf_contact_fax,
           pb.prs_bedrijf_email,
           pb.prs_bedrijf_telefoon2,
           b.mld_melding_key,
           b.gemeente_omschrijving,
           b.gemeente_code,
           b.gemeente_post_adres,
           b.gemeente_post_postcode,
           b.gemeente_post_plaats,
           b.gemeente_contactpersoon,
           b.gemeente_factnr_infix,
           b.gemeente_factnr_suffix,
           b.gemeente_hv1_code,
           b.gemeente_hv2_code,
           b.gemeente_veiling,
           b.gemeente_budget,
           b.gemeente_ob,
           b.beschikking_nr,
           b.beschikking_datum_van,
           b.beschikking_datum_tot,
           b.client_bsn,
           DECODE (ud.fac_usrdata_omschr,
                   1, b.prs_client_nr,
                   b.prs_client_key),
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
              b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel
           || ' '
           || b.prs_client_naam,
           b.prs_client_voorletters,
           b.prs_client_tussenvoegsel,
           b.prs_client_naam,
           b.client_meisjesnaam,
           b.client_mv,
           b.prs_client_email,
           b.client_contactpersonen,
           b.prs_client_cak_actie,
           b.client_geboortedatum,
           b.client_adres,
           b.client_huisnr,
           b.client_postcode,
           b.client_woonplaats,
           b.client_telefoon_thuis,
           b.prs_client_mobiel,
           b.client_bijzonderheden,
           b.uren_beschikking,
           b.pgb,
           b.product,
           CASE
               WHEN b.pgb = 1 THEN b.pgb_tarief
               WHEN b.gemeente_veiling = 1 THEN b.pgb_tarief
               ELSE gt.tarief
           END,
           b.beschikking_omschr,
           CASE
               WHEN b.alt_hv1_start <=
                    (uur.jaar || LPAD (uur.periodenr, 2, '0'))
               THEN
                   b.alt_hv1
               ELSE
                   NULL
           END
               alt_hv1,
           CASE
               WHEN b.alt_hv2_start <=
                    (uur.jaar || LPAD (uur.periodenr, 2, '0'))
               THEN
                   b.alt_hv2
               ELSE
                   NULL
           END
               alt_hv2,
           CASE
               WHEN b.alt_hv3_start <=
                    (uur.jaar || LPAD (uur.periodenr, 2, '0'))
               THEN
                   b.alt_hv3
               ELSE
                   NULL
           END
               alt_hv3,
           uur.prs_perslid_key,
           uur.bsn,
           uur.nr_verzorger,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           uur.prs_perslid_dienstverband,
           uur.jaar,
           uur.weeknr,
           uur.datum_gewerkt,
           uur.uren_opdracht,
           uur.uren_besteed
      FROM care_v_beschikking_all    b,
           care_v_bestede_uren_all   uur,
           prs_bedrijf               pb,
           fac_usrdata               ud,
           care_v_gemeente_tarieven  gt
     WHERE     uur.mld_melding_key = b.mld_melding_key
           AND uur.uren_status = 3
           AND pb.prs_bedrijf_key = 2
           AND ud.fac_usrdata_key = 48
           AND gt.alg_locatie_key = b.gemeente_key
           AND gt.product_code = b.product_code
           AND COALESCE (gt.duedatum, SYSDATE) =
               (SELECT COALESCE (MIN (gt2.duedatum), SYSDATE)
                  FROM care_v_gemeente_tarieven gt2
                 WHERE     COALESCE (gt2.duedatum, SYSDATE + 999) >=
                           uur.datum_gewerkt
                       AND gt2.alg_locatie_key = b.gemeente_key
                       AND gt2.product_code = b.product_code);

CREATE OR REPLACE FORCE VIEW care_v_gemeente_fact2_uren
AS
    SELECT *
      FROM care_v_tmp2_factuur_uren
     WHERE pgb IS NULL;

CREATE OR REPLACE FORCE VIEW care_v_pgb_fact2_uren
AS
    SELECT *
      FROM care_v_tmp2_factuur_uren
     WHERE pgb = 1;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_voorblad_a
(
    fclt_f_periode,
    periode_nr,
    factuurnr,
    factuurdatum,
    wzacode,
    prs_bedrijf_post_adres,
    prs_bedrijf_post_postcode,
    prs_bedrijf_post_plaats,
    prs_bedrijf_kvk,
    prs_bedrijf_bankrekeningnr,
    prs_bedrijf_contact_persoon,
    prs_bedrijf_contact_telefoon,
    prs_bedrijf_contact_fax,
    prs_bedrijf_email,
    prs_bedrijf_factnr_infix,
    fclt_f_gemeente,
    gemeente_code,
    gemeente_post_adres,
    gemeente_post_postcode,
    gemeente_post_plaats,
    gemeente_contactpersoon,
    gemeente_factnr_infix,
    gemeente_factnr_suffix,
    product,
    tarief,
    jaar,
    week_uren_besteed,
    subtotaal
)
AS
      SELECT periode,
             MIN (periode_nr),
                MIN (jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || MIN (periode_nr)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             MIN (prs_bedrijf_post_adres),
             MIN (prs_bedrijf_post_postcode),
             MIN (prs_bedrijf_post_plaats),
             MIN (prs_bedrijf_kvk),
             MIN (prs_bedrijf_bankrekeningnr),
             MIN (prs_bedrijf_contact_persoon),
             MIN (prs_bedrijf_contact_telefoon),
             MIN (prs_bedrijf_contact_fax),
             MIN (prs_bedrijf_email),
             MIN (prs_bedrijf_factnr_infix),
             gemeente,
             MIN (gemeente_code),
             MIN (gemeente_post_adres),
             MIN (gemeente_post_postcode),
             MIN (gemeente_post_plaats),
             MIN (gemeente_contactpersoon),
             MIN (gemeente_factnr_infix),
             MIN (gemeente_factnr_suffix),
             product,
             MIN (tarief),
             MIN (jaar),
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren
    GROUP BY periode, gemeente, product;

-- Factuur voor PGB clienten, zonder 6 weken berperking

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_pgb_a
(
    fclt_f_periode,
    periode_nr,
    factuurdatum,
    wzacode,
    prs_bedrijf_post_adres,
    prs_bedrijf_post_postcode,
    prs_bedrijf_post_plaats,
    prs_bedrijf_kvk,
    prs_bedrijf_bankrekeningnr,
    prs_bedrijf_contact_persoon,
    prs_bedrijf_contact_telefoon,
    prs_bedrijf_contact_fax,
    prs_bedrijf_email,
    prs_bedrijf_factnr_infix,
    gemeente_factnr_infix,
    gemeente_factnr_suffix,
    melding,
    beschikkingsnr,
    bsn_client,
    client_nr,
    client,
    client_adres,
    client_huisnr,
    client_postcode,
    client_woonplaats,
    product,
    tarief,
    beschikking_omschr,
    jaar,
    week_uren_besteed,
    subtotaal
)
AS
      SELECT periode,
             MIN (periode_nr),
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             MIN (prs_bedrijf_post_adres),
             MIN (prs_bedrijf_post_postcode),
             MIN (prs_bedrijf_post_plaats),
             MIN (prs_bedrijf_kvk),
             MIN (prs_bedrijf_bankrekeningnr),
             MIN (prs_bedrijf_contact_persoon),
             MIN (prs_bedrijf_contact_telefoon),
             MIN (prs_bedrijf_contact_fax),
             MIN (prs_bedrijf_email),
             MIN (prs_bedrijf_factnr_infix),
             MIN (gemeente_factnr_infix),
             MIN (gemeente_factnr_suffix),
             melding,
             MIN (beschikkingsnr),
             bsn_client,
             MIN (client_nr),
             MIN (client2),
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (product),
             MIN (tarief),
             MIN (beschikking_omschr),
             MIN (jaar),
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_pgb_fact2_uren
    GROUP BY periode, bsn_client, melding;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_a
(
    fclt_f_periode,
    factuurdatum,
    wzacode,
    fclt_f_gemeente,
    beschikkingsnr,
    bsn_client,
    client,
    geboortedatum,
    uren_periode,
    indicatie_uren,
    product,
    tarief,
    uren,
    minuten,
    bedrag_euro,
    bedrag_centen
)
AS
      SELECT fu.periode,
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             MIN (fu.client),
             MIN (fu.client_geboortedatum),
             MIN (bp.uren_beschikking),
             DECODE (MIN (indicatie_uren) - MAX (indicatie_uren),
                     0, TO_CHAR (MIN (indicatie_uren)),
                     MIN (indicatie_uren) || ' tot ' || MAX (indicatie_uren)),
             fu.product,
             MIN (fu.tarief),
             ROUND (SUM (fu.week_uren_besteed), 2),
             ROUND (60 * SUM (fu.week_uren_besteed)),
             ROUND (MIN (fu.tarief) * SUM (fu.week_uren_besteed), 2),
             ROUND (100 * MIN (fu.tarief) * SUM (fu.week_uren_besteed))
        FROM care_t_beschikk_x_periodetabel bp, care_v_gemeente_fact2_uren fu
       WHERE     bp.jaar = fu.jaar
             AND bp.periode = fu.periode_nr
             AND bp.product = fu.product
             AND bp.bsn = fu.bsn_client
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_a2
(
    fclt_f_periode,
    factuurdatum,
    wzacode,
    fclt_f_gemeente,
    beschikkingsnr,
    bsn_client,
    client,
    geboortedatum,
    indicatie_uren,
    product,
    tarief,
    uren,
    minuten,
    bedrag_euro,
    bedrag_centen
)
AS
      SELECT fu.periode,
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             MIN (fu.client),
             MIN (fu.client_geboortedatum),
             DECODE (MIN (indicatie_uren) - MAX (indicatie_uren),
                     0, TO_CHAR (MIN (indicatie_uren)),
                     MIN (indicatie_uren) || ' tot ' || MAX (indicatie_uren)),
             fu.product,
             MIN (fu.tarief),
             ROUND (SUM (fu.week_uren_besteed), 2),
             ROUND (60 * SUM (fu.week_uren_besteed)),
             ROUND (MIN (fu.tarief) * SUM (fu.week_uren_besteed), 2),
             ROUND (100 * MIN (fu.tarief) * SUM (fu.week_uren_besteed))
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

-- FactuurRapportage view B (postfix B): op per gemeente, op periode/week-nivo de gemaakte uren per beschikking totaliseren...

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_b
(
    fclt_f_periode,
    factuurdatum,
    wzacode,
    fclt_f_gemeente,
    beschikkingsnr,
    bsn_client,
    client,
    geboortedatum,
    indicatie_uren,
    product,
    tarief,
    jaar,
    weeknr,
    uren,
    minuten,
    bedrag_euro,
    bedrag_centen
)
AS
      SELECT periode,
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             MIN (client),
             MIN (client_geboortedatum),
             MIN (indicatie_uren),
             product,
             MIN (tarief),
             jaar,
             weeknr,
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (60 * SUM (week_uren_besteed)),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))
        FROM care_v_gemeente_fact2_uren f
    GROUP BY periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             jaar,
             weeknr;

-- FactuurRapportage view C (postfix C): op per gemeente, op periode/week-nivo/datum de gemaakte uren per beschikking totaliseren...

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_c
(
    fclt_f_periode,
    factuurdatum,
    wzacode,
    fclt_f_gemeente,
    beschikkingsnr,
    bsn_client,
    client,
    geboortedatum,
    indicatie_uren,
    product,
    tarief,
    jaar,
    weeknr,
    datum,
    uren,
    minuten,
    bedrag_euro,
    bedrag_centen
)
AS
      SELECT periode,
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             MIN (client),
             MIN (client_geboortedatum),
             MIN (indicatie_uren),
             product,
             MIN (tarief),
             jaar,
             weeknr,
             datum,
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (60 * SUM (week_uren_besteed)),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))
        FROM care_v_gemeente_fact2_uren f
    GROUP BY periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             jaar,
             weeknr,
             datum;

-- FactuurRapportage view D: op per gemeente per dag, op periode/week/datum-nivo de gemaakte uren per beschikking totaliseren.

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_d
(
    fclt_x_periode,
    factuurnummer,
    factuurjaar,
    factuurperiode,
    wzacode,
    fclt_f_gemeente,
    naam_en_voorletters,
    geboortedatum,
    bsn,
    indicatie_startdatum,
    indicatie_einddatum,
    indicatie_uren,
    productcode,
    op_datum,
    weeknr,
    aantal,
    bedrag
)
AS
      SELECT f.periode,
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             SUBSTR (f.periode, 1, 4),
                SUBSTR (f.periode, 1, 4)
             || '-'
             || MIN (pt.week_van)
             || ' t/m '
             || MAX (pt.week_tm),
             MIN (wzacode),
             gemeente,
             MIN (client),
             MIN (client_geboortedatum),
             f.bsn_client,
             MIN (beschikking_datum_van),
             MAX (beschikking_datum_tot),
             MIN (indicatie_uren),
             product,
             datum,
             weeknr,
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren f, care_v_periodetabel_2jaar pt
       WHERE f.periode = pt.jaar_periode
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             f.jaar,
             weeknr,
             datum;

-- FactuurRapportage view E: per gemeente, op periode-nivo de gemaakte uren per beschikking totaliseren.

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_e
(
    fclt_x_periode,
    periode,
    weeknrs,
    factuurnummer,
    wzacode,
    fclt_f_gemeente,
    bsn_client,
    client,
    geboortedatum,
    uren_periode,
    indicatie_uren,
    product,
    tarief,
    uren,
    bedrag_euro
)
AS
      SELECT fu.periode,
             SUBSTR (fu.periode, 6, 2) || '.' || SUBSTR (fu.periode, 1, 4),
                SUBSTR (fu.periode, 1, 4)
             || '-'
             || MIN (bp.week_van)
             || ' t/m '
             || MAX (bp.week_tm),
                MIN (fu.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (fu.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             MIN (wzacode),
             fu.gemeente,
             fu.bsn_client,
             MIN (fu.client),
             MIN (fu.client_geboortedatum),
             MIN (bp.uren_beschikking),
             DECODE (MIN (indicatie_uren) - MAX (indicatie_uren),
                     0, TO_CHAR (MIN (indicatie_uren)),
                     MIN (indicatie_uren) || ' tot ' || MAX (indicatie_uren)),
             fu.product,
             MIN (fu.tarief),
             ROUND (SUM (fu.week_uren_besteed), 2),
             ROUND (MIN (fu.tarief) * SUM (fu.week_uren_besteed), 2)
        FROM CARE_T_BESCHIKK_X_PERIODETABEL bp, care_v_gemeente_fact2_uren fu
       WHERE     bp.jaar = fu.jaar
             AND bp.periode = fu.periode_nr
             AND bp.product = fu.product
             AND bp.bsn = fu.bsn_client
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

-- FactuurRapportage view F: op per gemeente per dag, op periode/week/datum-nivo de gemaakte uren per beschikking totaliseren.

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_f
(
    fclt_x_periode,
    fclt_x_gemeente,
    periode,
    weeknr,
    product,
    client,
    adres,
    woonplaats,
    geboortedatum,
    bsn,
    datum,
    tijdsduur,
    tijdseenheid,
    totaal_bedrag
)
AS
      SELECT f.periode,
             f.gemeente,
             SUBSTR (f.periode, 1, 4) || '.' || SUBSTR (f.periode, 6, 2),
             weeknr,
             product,
             MIN (client),
             MIN (client_adres) || ' ' || MIN (client_huisnr),
             MIN (client_woonplaats),
             MIN (client_geboortedatum),
             f.bsn_client,
             datum,
             ROUND (SUM (week_uren_besteed), 2),
             'uur',
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren f
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             weeknr,
             datum;

-- FactuurRapportage view G: op per gemeente per dag, op periode-nivo de gemaakte uren per beschikking totaliseren.

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_g
(
    fclt_x_periode,
    fclt_x_gemeente,
    hide_f_nr,
    record_start,
    wzacode,
    factuurnummer,
    code,
    bsn,
    geboortedatum,
    van,
    tot,
    product,
    productcode,
    minuten,
    centen,
    btw,
    subtotaal,
    record_einde
)
AS
      SELECT f.periode,
             f.gemeente,
             1,
             'V',
             MIN (wzacode),
             COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                       MIN (prs_bedrijf_factnr_infix)),
             'F',
             SUBSTR (f.periode, 1, 4) || SUBSTR (f.periode, 6, 2),
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             '',
             '',
             '',
             '',
             '',
             '',
             '',
             '',
             ''
        FROM care_v_gemeente_fact2_uren f
    GROUP BY f.periode, f.gemeente
    UNION ALL
      SELECT f.periode,
             f.gemeente,
             2,
             'D',
             MIN (wzacode),
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             CASE
                 WHEN MIN (pt.maandag_van) <= MIN (beschikking_datum_van)
                 THEN
                     'S'
                 WHEN MIN (pt.zondag_tm) >= MIN (beschikking_datum_tot)
                 THEN
                     'E'
                 ELSE
                     'P'
             END,
             f.bsn_client,
             MIN (client_geboortedatum),
             TO_CHAR (
                 GREATEST (MIN (pt.maandag_van), MIN (beschikking_datum_van)),
                 'DD-MM-YYYY'),
             TO_CHAR (LEAST (MIN (pt.zondag_tm), MIN (beschikking_datum_tot)),
                      'DD-MM-YYYY'),
             'HV',
             DECODE (
                 product,
                 'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                 'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                 'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                 ''),
             TO_CHAR (ROUND (60 * SUM (week_uren_besteed))),
             TO_CHAR (ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))),
             '0',
             TO_CHAR (ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))),
             'D'
        FROM care_v_gemeente_fact2_uren f, care_v_periodetabel_2jaar pt
       WHERE f.periode = pt.jaar_periode
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product
    UNION ALL
      SELECT f.periode,
             f.gemeente,
             3,
             'S',
             MIN (wzacode),
             COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                       MIN (prs_bedrijf_factnr_infix)),
             'F',
             SUBSTR (f.periode, 1, 4) || SUBSTR (f.periode, 6, 2),
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             '',
             '',
             '',
             '',
             '',
             '',
             '',
             '',
             'D'
        FROM care_v_gemeente_fact2_uren f
    GROUP BY f.periode, f.gemeente;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_i
(
    fclt_x_periode,
    fclt_x_gemeente,
    num_bsn,
    num_pers,
    naa_rel_ac,
    naa_rel_vl,
    dat_geb,
    num_klant,
    cod_agb,
    num_contr,
    num_fact,
    srt_voorz,
    num_voorz,
    cod_voorz,
    dat_begin,
    dat_eind,
    bed_huur,
    num_art,
    oms_merk,
    dat_van,
    dat_tot,
    cod_per,
    dat_reg,
    aant_u,
    bed_face,
    srt_btw,
    bed_btw,
    bed_faci,
    srt_bed,
    cod_stakl,
    cod_stabt,
    bed_bet,
    cod_bet
)
AS
      SELECT f.periode,
             f.gemeente,
             f.bsn_client,
             '',
             MIN (f.client_naam) || ',' || MIN (f.client_tussenvoegsel),
             MIN (f.client_voorletters),
             MIN (client_geboortedatum),
             '',
             MIN (wzacode),
             '',
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             '',
             '',
             product,
             TO_CHAR (MIN (beschikking_datum_van), 'DD-MM-YYYY'),
             TO_CHAR (MIN (beschikking_datum_tot), 'DD-MM-YYYY'),
             '',
             '',
             '',
             TO_CHAR (MIN (pt.maandag_van), 'DD-MM-YYYY'),
             TO_CHAR (MIN (pt.zondag_tm), 'DD-MM-YYYY'),
             '',
             '',
             ROUND (SUM (f.week_uren_besteed), 2),
             '',
             '0',
             '',
             ROUND (MIN (f.tarief) * SUM (f.week_uren_besteed), 2),
             '',
             '',
             '',
             '',
             ''
        FROM care_v_gemeente_fact2_uren f, care_v_periodetabel_2jaar pt
       WHERE f.periode = pt.jaar_periode
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_j
(
    fclt_x_periode,
    fclt_x_gemeente,
    factuurnr,
    periode_nr,
    periode_jaar,
    achternaam,
    initialen,
    geboortedatum,
    clientnummer,
    bsn,
    straat,
    huisnummer,
    postcode,
    plaats,
    soort_hh,
    ind_startdatum,
    ind_einddatum,
    uren,
    tarief,
    totaal
)
AS
      SELECT periode,
             gemeente,
                MIN (jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             SUBSTR (periode, 6, 2),
             SUBSTR (periode, 1, 4),
             MIN (client_naam) || ',' || MIN (client_tussenvoegsel),
             MIN (client_voorletters),
             MIN (client_geboortedatum),
             '',
             bsn_client,
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             product,
             TO_CHAR (MIN (beschikking_datum_van), 'DD-MM-YYYY'),
             TO_CHAR (MIN (beschikking_datum_tot), 'DD-MM-YYYY'),
             ROUND (SUM (week_uren_besteed), 2),
             MIN (tarief),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_k
(
    fclt_x_periode,
    fclt_x_gemeente,
    dossiernr,
    voorz,
    begindatum_1,
    einddatum_1,
    bedrag,
    soort_hulp,
    gelev_uren,
    begindatum,
    einddatum,
    indicatie_pw_in_min,
    begindatum_2,
    einddatum_2,
    bsn,
    clientnr,
    naam,
    geb_datum,
    aanbieder,
    begin_voorz,
    eind_voorz
)
AS
      SELECT periode,
             gemeente,
             beschikkingsnr,
             DECODE (
                 product,
                 'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                 'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                 'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                 ''),
             '',
             '',
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             product,
             ROUND (SUM (week_uren_besteed), 2),
             TO_CHAR (MIN (beschikking_datum_van), 'DD-MM-YYYY'),
             TO_CHAR (MIN (beschikking_datum_tot), 'DD-MM-YYYY'),
             DECODE (
                 MIN (indicatie_uren) - MAX (indicatie_uren),
                 0, TO_CHAR (60 * MIN (indicatie_uren)),
                    60 * MIN (indicatie_uren)
                 || ' tot '
                 || 60 * MAX (indicatie_uren)),
             TO_CHAR (MIN (beschikking_datum_van), 'DD-MM-YYYY'),
             TO_CHAR (MIN (beschikking_datum_tot), 'DD-MM-YYYY'),
             bsn_client,
             '',
             MIN (client),
             MIN (client_geboortedatum),
             '',
             '',
             ''
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_l
(
    fclt_x_periode,
    fclt_x_gemeente,
    naam,
    bsn,
    clientnummer,
    geboortedatum,
    adres,
    pc,
    woonplaats,
    product,
    uren_per_periode,
    totaal_bedrag,
    periode,
    factuurnummer
)
AS
      SELECT periode,
             gemeente,
             MIN (client),
             bsn_client,
             '',
             MIN (client_geboortedatum),
             MIN (client_adres) || ' ' || MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             DECODE (product,  'HV1', 'HH1',  'HV2', 'HH2',  'HV3', 'HH3',  ''),
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             periode,
                MIN (jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code))
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_m
(
    fclt_x_periode,
    fclt_x_gemeente,
    clientnummer,
    bsn,
    achternaam,
    voorvoegsels,
    voorletters,
    geboortedatum,
    geslacht,
    postcode,
    huisnummer,
    huisnummertoevoeging,
    jaar,
    week,
    product,
    minuten,
    medewerker,
    personeelsnummer_mdw
)
AS
      SELECT periode,
             gemeente,
             MIN (client_nr),
             bsn_client,
             MIN (client_naam),
             MIN (client_tussenvoegsel),
             MIN (client_voorletters),
             MIN (client_geboortedatum),
             MIN (client_mv),
             MIN (client_postcode),
             SUBSTR (
                 MIN (client_huisnr),
                 1,
                 DECODE (
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                     0, LENGTH (MIN (client_huisnr)),
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]') - 1)),
             SUBSTR (
                 MIN (client_huisnr),
                 DECODE (REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                         0, LENGTH (MIN (client_huisnr)) + 1,
                         REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'))),
             jaar,
             weeknr,
             DECODE (
                 product,
                 'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                 'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                 'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                 ''),
             ROUND (60 * SUM (week_uren_besteed)),
             verzorger,
             nr_verzorger
        FROM care_v_gemeente_fact2_uren f
    GROUP BY periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             jaar,
             weeknr,
             verzorger,
             nr_verzorger;

--  BONS#22915: FactuurRapportage view N (Woudenberg): op per gemeente per dag, op periode-nivo de gemaakte uren per beschikking totaliseren.

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_n
(
    fclt_x_periode,
    fclt_x_gemeente,
    hide_f_nr,
    record_start,
    wzacode,
    factuurnummer,
    code,
    bsn,
    geboortedatum,
    van,
    tot,
    product,
    productcode,
    minuten,
    centen,
    btw,
    subtotaal,
    record_einde,
    uurtarief,
    achternaam,
    voorvoegsels,
    voorletters,
    datum_eerstkeerzorg,
    gemeente_code
)
AS
      SELECT f.periode,
             f.gemeente,
             2,
             'D',
             MIN (wzacode),
                MIN (f.jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (f.periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             CASE
                 WHEN MIN (pt.maandag_van) <= MIN (beschikking_datum_van)
                 THEN
                     'S'
                 WHEN MIN (pt.zondag_tm) >= MIN (beschikking_datum_tot)
                 THEN
                     'E'
                 ELSE
                     'P'
             END,
             f.bsn_client,
             MIN (client_geboortedatum),
             TO_CHAR (
                 GREATEST (MIN (pt.maandag_van), MIN (beschikking_datum_van)),
                 'DD-MM-YYYY'),
             TO_CHAR (LEAST (MIN (pt.zondag_tm), MIN (beschikking_datum_tot)),
                      'DD-MM-YYYY'),
             'HH',
                'HH'
             || DECODE (
                    product,
                    'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                    'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                    'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                    ''),
             TO_CHAR (ROUND (60 * SUM (week_uren_besteed))),
             TO_CHAR (ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))),
             '0',
             TO_CHAR (ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))),
             'D',
             MIN (f.tarief),
             MIN (client_naam),
             MIN (client_tussenvoegsel),
             MIN (client_voorletters),
             MIN (ffu.datum_eerste_keer_ooit),
             MIN (gemeente_code)
        FROM care_v_gemeente_fact2_uren    f,
             care_v_periodetabel_2jaar     pt,
             care_v_first_factuur_uren_ooit ffu
       WHERE f.periode = pt.jaar_periode AND f.bsn_client = ffu.client_bsn
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_o
(
    fclt_x_periode,
    fclt_x_gemeente,
    bsn,
    naam,
    straat,
    postcode,
    woonplaats,
    geboortedatum,
    product,
    uren,
    periodenr,
    uurtarief,
    bedrag
)
AS
      SELECT periode,
             gemeente,
             bsn_client,
             MIN (client),
             MIN (client_adres) || ' ' || MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (client_geboortedatum),
             DECODE (product,  'HV1', 'HH1',  'HV2', 'HH2',  'HV3', 'HH3',  ''),
             ROUND (SUM (week_uren_besteed), 2),
             SUBSTR (periode, 6, 2),
             MIN (fu.tarief),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product;

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_p
(
    fclt_x_periode,
    fclt_x_gemeente,
    factuurnummer,
    bsn,
    naam,
    straat,
    huisnummer,
    postcode,
    woonplaats,
    geboortedatum,
    geleverde_uren,
    vorm,
    weeknummer,
    factuurbedrag
)
AS
      SELECT periode,
             gemeente,
                MIN (jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code)),
             bsn_client,
             MIN (client),
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (client_geboortedatum),
             ROUND (SUM (week_uren_besteed), 2),
             DECODE (product,
                     'HV1', 'CHT basis',
                     'HV2', 'CHT plus',
                     'HV3', '',
                     ''),
             weeknr,
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2)
        FROM care_v_gemeente_fact2_uren fu
    GROUP BY fu.periode,
             fu.gemeente,
             fu.beschikkingsnr,
             fu.bsn_client,
             fu.product,
             fu.jaar,
             fu.weeknr;

-- BONS#33906 variant R

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_r
(
    fclt_x_periode,
    fclt_x_gemeente,
    factuurnummer,
    bsn,
    voorletters,
    tussenvoegsel,
    naam,
    meisjes_naam,
    naam2,
    geboortedatum,
    geslacht,
    straat,
    huisnummer,
    postcode,
    woonplaats,
    telefoonnummer,
    mobielnummer,
    contactpersoon,
    email,
    opmerking,
    bijzonderheden,
    beschikkingsnummer,
    start_indicatie,
    eind_indicatie,
    soort_hv,
    indicatie_uren,
    uren_besteed
)
AS
      SELECT periode,
             gemeente,
                MIN (jaar)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_infix)),
                          MIN (prs_bedrijf_factnr_infix))
             || SUBSTR (periode, 6, 2)
             || COALESCE (MIN (TO_CHAR (gemeente_factnr_suffix)),
                          MIN (gemeente_code))    factuurnr,
             bsn_client,
             MIN (client_voorletters),
             MIN (client_tussenvoegsel),
             MIN (client_naam),
             MIN (client_meisjesnaam),
             MIN (client2),
             MIN (client_geboortedatum),
             MIN (client_mv),
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (client_telefoon_thuis),
             MIN (prs_client_mobiel),
             MIN (client_contactpersonen),
             MIN (prs_client_email),
             MIN (beschikking_omschr),
             MIN (client_bijzonderheden),
             beschikkingsnr,
             TRUNC (beschikking_datum_van),
             TRUNC (beschikking_datum_tot),
             product,
             indicatie_uren,
             SUM (week_uren_besteed)
        FROM care_v_tmp2_factuur_uren
       WHERE pgb IS NULL
    GROUP BY periode,
             gemeente,
             bsn_client,
             beschikkingsnr,
             beschikking_datum_van,
             beschikking_datum_tot,
             product,
             indicatie_uren;

CREATE OR REPLACE FORCE VIEW care_v_rap_tot_clientzorg
(
    fclt_f_periode,
    fclt_f_gemeente,
    fclt_f_status,
    bsn,
    voorletters,
    tussenvoegsel,
    naam,
    meisjes_naam,
    naam2,
    geboortedatum,
    geslacht,
    straat,
    huisnummer,
    postcode,
    woonplaats,
    telefoonnummer,
    mobielnummer,
    contactpersoon,
    email,
    opmerking,
    bijzonderheden,
    beschikkingsnummer,
    fclt_f_start_indicatie,
    eind_indicatie,
    soort_hv,
    indicatie_uren,
    uren_besteed
)
AS
      SELECT COALESCE (periode, 'nvt'),
             gemeente_omschrijving,
             DECODE (mld_melding_status,
                     5, 'Afgemeld',
                     6, 'Afgemeld',
                     'Open')
                 status,
             MIN (client_bsn),
             prs_client_voorletters,
             prs_client_tussenvoegsel,
             prs_client_naam,
             MIN (client_meisjesnaam),
                b.prs_client_naam
             || ','
             || b.prs_client_voorletters
             || ' '
             || b.prs_client_tussenvoegsel,
             MIN (client_geboortedatum),
             MIN (client_mv),
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (client_telefoon_thuis),
             MIN (prs_client_mobiel),
             MIN (client_contactpersonen),
             MIN (prs_client_email),
             MIN (beschikking_omschr),
             MIN (client_bijzonderheden),
             beschikking_nr,
             beschikking_datum_van,
             beschikking_datum_tot,
             product,
             uren_beschikking,
             SUM (uur.uren_besteed)
                 besteed
        FROM care_v_beschikking_all b,
             (SELECT mld_melding_key,
                     jaar || '-' || LPAD (periodenr, 2, '0')     periode,
                     uren_besteed
                FROM care_v_bestede_uren_all
               WHERE uren_status = 3) uur
       WHERE     mld_melding_status != 1
             AND pgb IS NULL
             AND uur.mld_melding_key(+) = b.mld_melding_key
    GROUP BY periode,
             gemeente_omschrijving,
             mld_melding_status,
             prs_client_naam,
             prs_client_voorletters,
             prs_client_tussenvoegsel,
             beschikking_nr,
             beschikking_datum_van,
             beschikking_datum_tot,
             beschikking_nr,
             beschikking_datum_van,
             beschikking_datum_tot,
             product,
             uren_beschikking;

-- view die ook de gekoppelde medewerker per opdracht laat zien

CREATE OR REPLACE FORCE VIEW care_v_rap_tot_clientzorg_mdw
(
    fclt_f_periode,
    fclt_f_gemeente,
    fclt_f_status,
    bsn,
    voorletters,
    tussenvoegsel,
    naam,
    meisjes_naam,
    naam2,
    geboortedatum,
    geslacht,
    straat,
    huisnummer,
    postcode,
    woonplaats,
    telefoonnummer,
    mobielnummer,
    contactpersoon,
    email,
    opmerking,
    bijzonderheden,
    beschikkingsnummer,
    fclt_f_start_indicatie,
    eind_indicatie,
    soort_hv,
    indicatie_uren,
    uren_besteed,
    fclt_f_medewerker,
    personeelsnummer
)
AS
      SELECT COALESCE (periode, 'nvt'),
             gemeente_omschrijving,
             DECODE (mld_melding_status,
                     5, 'Afgemeld',
                     6, 'Afgemeld',
                     'Open')
                 status,
             MIN (client_bsn),
             prs_client_voorletters,
             prs_client_tussenvoegsel,
             prs_client_naam,
             MIN (client_meisjesnaam),
                b.prs_client_naam
             || ','
             || b.prs_client_voorletters
             || ' '
             || b.prs_client_tussenvoegsel,
             MIN (client_geboortedatum),
             MIN (client_mv),
             MIN (client_adres),
             MIN (client_huisnr),
             MIN (client_postcode),
             MIN (client_woonplaats),
             MIN (client_telefoon_thuis),
             MIN (prs_client_mobiel),
             MIN (client_contactpersonen),
             MIN (prs_client_email),
             MIN (beschikking_omschr),
             MIN (client_bijzonderheden),
             beschikking_nr,
             beschikking_datum_van,
             beschikking_datum_tot,
             product,
             uren_beschikking,
             SUM (uur.uren_besteed)
                 besteed,
             p.prs_perslid_naam_full,
             p.prs_perslid_nr
        FROM care_v_beschikking_all b,
             (SELECT mld_melding_key,
                     mld_opdr_key,
                     jaar || '-' || LPAD (periodenr, 2, '0')     periode,
                     uren_besteed
                FROM care_v_bestede_uren_all
               WHERE uren_status = 3) uur,
             mld_opdr              o,
             (SELECT p.prs_perslid_key,
                     p.prs_perslid_nr,
                     pf.prs_perslid_naam_full
                FROM prs_perslid p, prs_v_perslid_fullnames_all pf
               WHERE pf.prs_perslid_key = p.prs_perslid_key) p
       WHERE     mld_melding_status != 1
             AND pgb IS NULL
             AND uur.mld_melding_key(+) = b.mld_melding_key
             AND o.mld_opdr_key(+) = uur.mld_opdr_key
             AND o.mld_uitvoerende_keys = p.prs_perslid_key(+)
    GROUP BY periode,
             gemeente_omschrijving,
             mld_melding_status,
             prs_client_naam,
             prs_client_voorletters,
             prs_client_tussenvoegsel,
             beschikking_nr,
             beschikking_datum_van,
             beschikking_datum_tot,
             product,
             uren_beschikking,
             p.prs_perslid_naam_full,
             p.prs_perslid_nr;

CREATE OR REPLACE FORCE VIEW care_v_rap_tot_clientzorg_all
(
    mld_melding_key,
    fclt_f_gemeente,
    fclt_f_status,
    bsn,
    voorletters,
    tussenvoegsel,
    naam,
    meisjes_naam,
    naam2,
    geboortedatum,
    geslacht,
    straat,
    huisnummer,
    postcode,
    woonplaats,
    telefoonnummer,
    mobielnummer,
    contactpersoon,
    email,
    opmerking,
    bijzonderheden,
    beschikkingsnummer,
    fclt_f_start_indicatie,
    fclt_f_eind_indicatie,
    soort_hv,
    indicatie_uren,
    fclt_f_medewerker,
    personeelsnummer
)
AS
    SELECT b.mld_melding_key,
           gemeente_omschrijving,
           DECODE (mld_melding_status,
                   5, 'Afgemeld',
                   6, 'Afgemeld',
                   'Open')
               status,
           client_bsn,
           prs_client_voorletters,
           prs_client_tussenvoegsel,
           prs_client_naam,
           client_meisjesnaam,
              b.prs_client_naam
           || ','
           || b.prs_client_voorletters
           || ' '
           || b.prs_client_tussenvoegsel,
           client_geboortedatum,
           client_mv,
           client_adres,
           client_huisnr,
           client_postcode,
           client_woonplaats,
           client_telefoon_thuis,
           prs_client_mobiel,
           client_contactpersonen,
           prs_client_email,
           beschikking_omschr,
           client_bijzonderheden,
           beschikking_nr,
           beschikking_datum_van,
           beschikking_datum_tot,
           product,
           uren_beschikking,
           p.prs_perslid_naam_full,
           p.prs_perslid_nr
      FROM care_v_beschikking_all  b,
           mld_opdr                o,
           (SELECT p.prs_perslid_key,
                   p.prs_perslid_nr,
                   pf.prs_perslid_naam_full
              FROM prs_perslid p, prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key) p
     WHERE     b.mld_melding_key = o.mld_melding_key
           AND o.mld_uitvoerende_keys = p.prs_perslid_key(+);

-- mbmb
-- Rapport Q) FACTUURrapport voor de gemaakte uren per datum - variant Q (Bernisse):

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_q
(
    fclt_x_periode,
    fclt_x_gemeente,
    aanbieder,
    dossiernr,
    tussenv_partner,
    partner,
    tussenv,
    achternaam_klant,
    geboortedatum,
    veilingnr,
    ingangsdatum_contract,
    werkelijke_startdatum,
    einddatum_contract,
    gemeente,
    clientnr_ZA,
    annuleringsdatum,
    cancel_reden,
    korting,
    status,
    minuten,
    bsn,
    omzet,
    soort_indicatie,
    indicatie_minuten,
    prijs_inc_korting,
    datum,
    geleverde_minuten,
    factuur,
    medewerker,
    personeelsnummer_mdw
)
AS
      SELECT periode,
             gemeente,
             MIN (prs_bedrijf_naam),
             '',
             '',
             '',
             MIN (client_tussenvoegsel),
             MIN (client_naam),
             MIN (client_geboortedatum),
             beschikkingsnr,
             MIN (beschikking_datum_van),
             MIN (ffu.datum_eerste_keer_ooit),
             MIN (beschikking_datum_tot),
             gemeente,
             MIN (client_nr),
             '',
             '',
             '',
             '',
             '',
             f.bsn_client,
             '',
             DECODE (product,  'HV1', 'HH',  'HV2', 'HH',  'HV3', 'HH',  'HH'),
             60 * MIN (indicatie_uren),
             MIN (tarief),
             datum,
             ROUND (60 * SUM (week_uren_besteed)),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             verzorger,
             nr_verzorger
        FROM care_v_gemeente_fact2_uren f, care_v_first_factuur_uren_ooit ffu
       WHERE f.bsn_client = ffu.client_bsn
    GROUP BY periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product,
             jaar,
             weeknr,
             datum,
             verzorger,
             nr_verzorger;

-- FactuurRapportage view Iwmo

CREATE OR REPLACE FORCE VIEW care_v_rap2_factuur_uren_iwmo
(
    fclt_x_periode,
    fclt_x_gemeente,
    bsn,
    geboortedatum,
    geslacht,
    geboortenaam,
    voorvoegsel,
    naamcode1,
    achternaampartner,
    voorvoegselpartner,
    voorletters,
    naamcode2,
    postcode,
    huisnummer,
    huisnummertoevoeging,
    indicatieoverleden,
    beschikkingsnummer,
    productcategorie,
    begindatumproduct,
    einddatumproduct,
    productcode,
    aantaluitgevoerdeproduct,
    tijdseenheidzorgperiode,
    declaratiebedrag,
    debetcredit,
    referentienummercredit
)
AS
      SELECT f.periode,
             f.gemeente,
             f.bsn_client,                                          -- kolom A
                SUBSTR (MIN (client_geboortedatum), 7, 4)
             || SUBSTR (MIN (client_geboortedatum), 4, 2)
             || SUBSTR (MIN (client_geboortedatum), 1, 2),           --kolom B
             DECODE (MIN (client_mv),  'M', 1,  'V', 2,  ''),       -- kolom C
             COALESCE (MIN (client_meisjesnaam), MIN (client_naam)), -- kolom D
             '',                                                    -- kolom E
             '1',                                                   -- kolom F
             '',                                                    -- kolom G
             '',                                                    -- kolom H
             REPLACE (REPLACE (MIN (client_voorletters), ' ', ''), '.', ''), --kolom I
             '0',                                                   -- kolom J
             REPLACE (MIN (client_postcode), ' ', ''),               --kolom K
             SUBSTR (
                 MIN (client_huisnr),
                 1,
                 DECODE (
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                     0, LENGTH (MIN (client_huisnr)),
                     REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]') - 1)), --Kolom L
             SUBSTR (
                 MIN (client_huisnr),
                 DECODE (REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'),
                         0, LENGTH (MIN (client_huisnr)) + 1,
                         REGEXP_INSTR (MIN (client_huisnr), '[[:alpha:]]|[-]'))), --Kolom M
             '2',                                                   -- kolom N
             beschikkingsnr,                                        -- Kolom O
             '01',                                                  -- Kolom P
             TO_CHAR (
                 GREATEST (MIN (pt.maandag_van), MIN (beschikking_datum_van)),
                 'YYYYMMDD'),                                       -- Kolom Q
             TO_CHAR (LEAST (MIN (pt.zondag_tm), MIN (beschikking_datum_tot)),
                      'YYYYMMDD'),                                  -- Kolom R
             LPAD (
                 DECODE (
                     product,
                     'HV1', TO_CHAR (COALESCE (MIN (gemeente_hv1_code), 1)),
                     'HV2', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2)),
                     'HV3', TO_CHAR (COALESCE (MIN (gemeente_hv2_code), 2) + 1),
                     ''),
                 5,
                 '0'),                                              -- Kolom S
             CASE
                 WHEN MIN (gemeente_budget) = 0
                 THEN
                     TO_CHAR (ROUND (60 * SUM (week_uren_besteed)))
                 ELSE
                     '0001'
             END,                                                   -- Kolom T
             CASE WHEN MIN (gemeente_budget) = 0 THEN '01' ELSE '81' END, -- Kolom U
             CASE
                 WHEN MIN (gemeente_budget) = 0
                 THEN
                     LPAD (
                         TO_CHAR (
                             ROUND (
                                 100 * MIN (tarief) * SUM (week_uren_besteed))),
                         8,
                         '0')
                 ELSE
                     LPAD (TO_CHAR (ROUND (100 * MIN (tarief))), 8, '0')
             END,                                                   -- Kolom V
             'D',                                                   -- Kolom W
             ''                                                      --Kolom X
        FROM care_v_gemeente_fact2_uren f, care_v_periodetabel_2jaar pt
       WHERE f.periode = pt.jaar_periode
    GROUP BY f.periode,
             gemeente,
             beschikkingsnr,
             f.bsn_client,
             product;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- salaris ---salaris----salaris-----salaris----salaris----salaris----salaris----salaris----salaris----salaris---salaris---salaris--salaris--salaris------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FORCE VIEW care_v_onkosten2_all
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_kosten_key,
    mld_kosten_code,
    mld_kosten_omschrijving,
    mld_opdruren_kosten_besteed,
    mld_kosten_kosten,
    datum
)
AS
    SELECT uur.jaar || '-' || LPAD (uur.periodenr, 2, '0'),
           v.verzorger_bsn,
           v.prs_verzorger_personeelsnr,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel,
           v.prs_verzorger_dienstverband,
           k.mld_kosten_key,
           k.mld_kosten_code,
           k.mld_kosten_omschrijving,
           ouk.mld_opdruren_kosten_besteed,
           k.mld_kosten_kosten,
           uur.datum_gewerkt
      FROM care_v_totaal_uren_all  uur,
           care_v_verzorger        v,
           mld_opdruren_kosten     ouk,
           mld_kosten              k
     WHERE     uur.prs_perslid_key = v.prs_perslid_key
           AND uur.mld_opdr_uren_key = ouk.mld_opdr_uren_key
           AND ouk.mld_kosten_key = k.mld_kosten_key
           AND k.mld_kosten_verwijder IS NULL
           AND uur.uren_status = 3
    UNION ALL
    SELECT periode,
           bsn,
           nr_verzorger,
              prs_perslid_naam
           || ','
           || prs_perslid_voorletters
           || ' '
           || prs_perslid_tussenvoegsel    verzorger,
           prs_perslid_dienstverband,
           NULL                            mld_kosten_key,
           kosten_code,
           kosten_omschrijving,
           rt.interkm,
           NULL,
           datum_gewerkt
      FROM care_v_reistijden_all rt;

CREATE OR REPLACE FORCE VIEW care_v_tmp2_auto
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    woonwerk_km,
    rest_km,
    datum
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             LEAST (SUM (mld_opdruren_kosten_besteed), 10),
               SUM (mld_opdruren_kosten_besteed)
             - LEAST (SUM (mld_opdruren_kosten_besteed), 10),
             datum
        FROM care_v_onkosten2_all
       WHERE mld_kosten_code = 'A'
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             datum;

CREATE OR REPLACE FORCE VIEW care_v_rap2_auto
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    woonwerk_km,
    rest_km
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             SUM (woonwerk_km),
             SUM (rest_km)
        FROM care_v_tmp2_auto
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

CREATE OR REPLACE FORCE VIEW care_v_rap2_reistijd
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    reistijd
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             SUM (mld_opdruren_kosten_besteed)
        FROM care_v_onkosten2_all
       WHERE mld_kosten_code = 'T'
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

-- mld_kosten_code = 'F', Dit zijn de onkosten voor FIETS gebruik: elke dag dat er gefietst is, telt als 1 (meerdere keren op 1 dag telt ook als 1)

CREATE OR REPLACE FORCE VIEW care_v_rap2_fiets
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_opdruren_kosten_besteed
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             COUNT (DISTINCT datum)
        FROM care_v_onkosten2_all
       WHERE mld_kosten_code = 'F'
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

-- mld_kosten_code = 'B', Dit zijn de onkosten voor BROMFIETS gebruik: elke dag dat er gebromt is, telt als 1 (meerdere keren op 1 dag telt ook als 1)

CREATE OR REPLACE FORCE VIEW care_v_rap2_bromfiets
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_opdruren_kosten_besteed
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             COUNT (DISTINCT datum)
        FROM care_v_onkosten2_all
       WHERE mld_kosten_code = 'B'
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

CREATE OR REPLACE FORCE VIEW care_v_tmp2_impr_uren
(
    mld_impropdr_key,
    mld_impropdr_code,
    jaar,
    periode,
    periode_nr,
    weeknr,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    week_uren_besteed,
    datum
)
AS
    SELECT uur.mld_impropdr_key,
           uur.mld_impropdr_code,
           uur.jaar,
           uur.jaar || '-' || LPAD (uur.periodenr, 2, '0'),
           uur.periodenr,
           uur.weeknr,
           uur.bsn,
           uur.prs_perslid_nr,
              uur.prs_perslid_naam
           || ','
           || uur.prs_perslid_voorletters
           || ' '
           || uur.prs_perslid_tussenvoegsel,
           prs_perslid_dienstverband,
           uur.uren_besteed,
           uur.datum_gewerkt
      FROM care_v_improductieve_uren_all uur
     WHERE uur.uren_status = 3;

--- Hieronder het totaal aan goedgekeurde niet-productieve uren (werkoverleg) over de periode 1234,
--- waarbij de verlof-uren (mld_impropdr_key = 1) en ziekte-uren (mld_impropdr_key = 2) worden uitgesloten.

CREATE OR REPLACE FORCE VIEW care_v_gewerkte_impr2_uren
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_impropdr_key,
    week_uren_besteed,
    datum
)
AS
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           mld_impropdr_key,
           week_uren_besteed,
           datum
      FROM care_v_tmp2_impr_uren
     WHERE mld_impropdr_key <> 1 AND mld_impropdr_key <> 2;

--- Hieronder het totaal aan goedgekeurde niet-productieve ziekte uren over de periode 1234,
--- Voor ziekte-uren geldt: mld_impropdr_key = 2

CREATE OR REPLACE FORCE VIEW care_v_gekeurde_ziek2_uren
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    ziekte_uren,
    dagen
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             ROUND (SUM (week_uren_besteed), 2),
             COUNT (DISTINCT datum)
        FROM care_v_tmp2_impr_uren
       WHERE mld_impropdr_key = 2
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

--- Hieronder het totaal aan goedgekeurde niet-productieve verlof uren over de periode 1234,
--- Voor verlof-uren geldt: mld_impropdr_key = 1

CREATE OR REPLACE FORCE VIEW care_v_gekeurde_vrij2_uren
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    verlof_uren,
    dagen
)
AS
      SELECT periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             ROUND (SUM (week_uren_besteed), 2),
             COUNT (DISTINCT datum)
        FROM care_v_tmp2_impr_uren
       WHERE mld_impropdr_key = 1
    GROUP BY periode,
             bsn_verzorger,
             nr_verzorger,
             verzorger;

CREATE OR REPLACE FORCE VIEW care_v_rap2_salaris
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    week_uren_besteed,
    datum
)
AS
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           week_uren_besteed,
           datum
      FROM care_v_tmp2_factuur_uren
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           week_uren_besteed,
           datum
      FROM care_v_gewerkte_impr2_uren;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_salaris
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    periode_uren_besteed,
    dagen,
    bsn_periode
)
AS
      SELECT jaar_periode,
             bsn_verzorger,
             MIN (nr_verzorger),
             MIN (verzorger),
             MIN (prs_perslid_dienstverband),
             ROUND (SUM (week_uren_besteed), 2),
             COUNT (DISTINCT datum),
             bsn_verzorger || '_' || jaar_periode
        FROM care_v_periodetabel_2jaar pt, care_v_rap2_salaris x
       WHERE pt.jaar_periode = x.periode
    GROUP BY jaar_periode, bsn_verzorger;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_ziek
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    ziekte_uren,
    dagen,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           ziekte_uren,
           dagen,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_gekeurde_ziek2_uren x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_vrij
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    verlof_uren,
    dagen,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           verlof_uren,
           dagen,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_gekeurde_vrij2_uren x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_auto
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    woonwerk_km,
    rest_km,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           woonwerk_km,
           rest_km,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_rap2_auto x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_fiets
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_opdruren_kosten_besteed,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           mld_opdruren_kosten_besteed,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_rap2_fiets x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_bromfiets
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_opdruren_kosten_besteed,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           mld_opdruren_kosten_besteed,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_rap2_bromfiets x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_periode_x_reistijd
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    mld_opdruren_kosten_besteed,
    bsn_periode
)
AS
    SELECT jaar_periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           reistijd,
           bsn_verzorger || '_' || jaar_periode
      FROM care_v_periodetabel_2jaar pt, care_v_rap2_reistijd x
     WHERE pt.jaar_periode = x.periode;

CREATE OR REPLACE FORCE VIEW care_v_salaris_all
(
    periode,
    bsn_verzorger,
    nr_verzorger,
    verzorger,
    prs_perslid_dienstverband,
    periode_uren_besteed,
    werkdagen,
    ziekte_uren,
    ziekdagen,
    verlof_uren,
    verlofdagen,
    woonwerk_km,
    rest_km,
    fietsdagen,
    bromfietsdagen
)
AS
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           periode_uren_besteed,
           dagen,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           0
      FROM care_v_periode_x_salaris s
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           0,
           0,
           ziekte_uren,
           dagen,
           0,
           0,
           0,
           0,
           0,
           0
      FROM care_v_periode_x_ziek z
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           0,
           0,
           0,
           0,
           verlof_uren,
           dagen,
           0,
           0,
           0,
           0
      FROM care_v_periode_x_vrij v
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           0,
           0,
           0,
           0,
           0,
           0,
           woonwerk_km,
           rest_km,
           0,
           0
      FROM care_v_periode_x_auto a
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           mld_opdruren_kosten_besteed,
           0
      FROM care_v_periode_x_fiets f
    UNION ALL
    SELECT periode,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           prs_perslid_dienstverband,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           mld_opdruren_kosten_besteed
      FROM care_v_periode_x_bromfiets b;

CREATE OR REPLACE FORCE VIEW care_v_rap2_salaris_a
(
    fclt_f_periode,
    bsn,
    verzorger,
    contract_uren,
    uren_gewerkt,
    uren_ziek,
    uren_verlof,
    svdagen,
    fietsvergoeding,
    bromfietsvergoeding,
    km_woonwerk,
    km_plus
)
AS
      SELECT periode,
             bsn_verzorger,
             verzorger,
             MIN (prs_perslid_dienstverband),
             SUM (periode_uren_besteed),
             SUM (ziekte_uren),
             SUM (verlof_uren),
             SUM (werkdagen),
             SUM (fietsdagen),
             SUM (bromfietsdagen),
             SUM (woonwerk_km),
             SUM (rest_km)
        FROM care_v_salaris_all s
    GROUP BY periode, bsn_verzorger, verzorger;

---
-- Salarisrapport type B: per medewerker elke uren/declaratiepost op aparte regel, dus meer regels voor 1 medewerker
-- Identificatie van medewerker: personeelsnummer (clientnummer)
-- NB: Dit rapport is voor Unit 4 Salaris administratie geschikt
--
-- Periode berekening iets als: LPAD (FLOOR (SUBSTR (ud1.fac_usrdata_omschr, 6, 2) / 4) + 1, 3, '0')
--- looncode = GEWERKT / ZIEK / VERLOF / FIETS / BROMF / KM_WW / KM_PLUS
---

CREATE OR REPLACE FORCE VIEW care_v_rap2_salaris_b
(
    FCLT_F_PERIODE,
    BOEKDATUM,
    BSN,
    NR_VERZORGER,
    VERZORGER,
    UUR_SOORT,
    UREN,
    SVDAGEN,
    KOSTEN_SOORT,
    KOSTEN
)
AS
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           'GEWERKT',
           periode_uren_besteed,
           dagen,
           NULL,
           NULL
      FROM care_v_periode_x_salaris
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           'ZIEK',
           ziekte_uren,
           dagen,
           NULL,
           NULL
      FROM care_v_periode_x_ziek
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           'VERLOF',
           verlof_uren,
           dagen,
           NULL,
           NULL
      FROM care_v_periode_x_vrij
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           NULL,
           NULL,
           NULL,
           'KM_WW',
           woonwerk_km
      FROM care_v_periode_x_auto
     WHERE woonwerk_km != 0
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           NULL,
           NULL,
           NULL,
           'KM_PLUS',
           rest_km
      FROM care_v_periode_x_auto
     WHERE rest_km != 0
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           NULL,
           NULL,
           NULL,
           'FIETS',
           mld_opdruren_kosten_besteed
      FROM care_v_periode_x_fiets
     WHERE mld_opdruren_kosten_besteed != 0
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           NULL,
           NULL,
           NULL,
           'BROMF',
           mld_opdruren_kosten_besteed
      FROM care_v_periode_x_bromfiets
     WHERE mld_opdruren_kosten_besteed != 0
    UNION
    SELECT periode,
           SYSDATE,
           bsn_verzorger,
           nr_verzorger,
           verzorger,
           NULL,
           NULL,
           NULL,
           'REISTIJD',
           ROUND (mld_opdruren_kosten_besteed)
      FROM care_v_periode_x_reistijd
     WHERE mld_opdruren_kosten_besteed != 0;

-- Herdefinietie van oorspronkelijk 'care_v_rap_salaris_b' die nog op 6 weken is gebaseerd,
-- !!Let op: care_v_rap_salaris_b komt in de cust/atch.sql en bons.sql terug!!!

CREATE OR REPLACE FORCE VIEW care_v_rap_salaris_b
AS
    SELECT * FROM care_v_rap2_salaris_b;

----------------------------------------------------------------------------------------------------
--                                                                                 CAK rapportage                                                                                     --
--                                                                                 CAK rapportage                                                                                     --
--                                                                                 CAK rapportage                                                                                     --
--                                                                                 CAK rapportage                                                                                     --
----------------------------------------------------------------------------------------------------

CREATE OR REPLACE FORCE VIEW care_v_cak2_factuur_uren_b
(
    fclt_f_periode,
    eerste_datum_periode_gewerkt,
    factuurdatum,
    wzacode,
    fclt_f_gemeente,
    gemeente_ob,
    alt_hv1,
    alt_hv2,
    alt_hv3,
    beschikkingsnr,
    bsn_client,
    client_nr,
    client,
    prs_client_cak_actie,
    geboortedatum,
    indicatie_uren,
    product,
    tarief,
    jaar,
    weeknr,
    verzorger_key,
    uren,
    minuten,
    bedrag_euro,
    bedrag_centen
)
AS
      SELECT periode,
             MIN (datum),
             TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
             MIN (wzacode),
             gemeente,
             MIN (gemeente_ob),
             MIN (alt_hv1),
             MIN (alt_hv2),
             MIN (alt_hv3),
             beschikkingsnr,
             bsn_client,
             MIN (client_nr),
             MIN (client),
             MIN (prs_client_cak_actie),
             MIN (client_geboortedatum),
             MIN (indicatie_uren),
             product,
             MIN (tarief),
             jaar,
             weeknr,
             verzorger_key,
             ROUND (SUM (week_uren_besteed), 2),
             ROUND (60 * SUM (week_uren_besteed)),
             ROUND (MIN (tarief) * SUM (week_uren_besteed), 2),
             ROUND (100 * MIN (tarief) * SUM (week_uren_besteed))
        FROM care_v_gemeente_fact2_uren
       WHERE gemeente_veiling = 0 AND gemeente_budget = 0
    GROUP BY periode,
             gemeente,
             beschikkingsnr,
             bsn_client,
             product,
             jaar,
             weeknr,
             verzorger_key;

CREATE OR REPLACE FORCE VIEW care_v_cak_choose_periode
(
    fclt_f_periode
)
AS
    SELECT DISTINCT periode
      FROM care_v_gemeente_fact2_uren;

-- Key 41 = SLEUTEL van waarde-code 'BESTANDSNUMMER' van eigen tabel '$SYSTEM-CAK' :: DEZE WORDT NIET MEER GEBRUIKT!!
-- Key 47 = SLEUTEL van waarde-code 'PERIODE' van eigen tabel '$SYSTEM-CAK' (geeft de gekozen periode waarover CAK rapport wordt gemaakt aan)
   --> Deze constructie met FLOOR(SUBSTR(ud1.fac_usrdata_omschr,6,2)/4) .... wordt ook in cak_tzi_2_zip.js gebruikt,
   --> Deze 2 moeten overeenkomen, vandaar!!!
-- Key 42 = SLEUTEL van waarde-code 'OMGEVING' van eigen tabel '$SYSTEM-CAK' (P of T)
-- Key 43 = SLEUTEL van waarde-code 'VERSIENUMMER' van eigen tabel '$SYSTEM-CAK' (=20)

CREATE OR REPLACE FORCE VIEW care_v_cak_hoofd_record
(
    fclt_f_periode,
    txt
)
AS
    SELECT cp.fclt_f_periode,
              '01'
           || pb.prs_leverancier_nr
           || SUBSTR (cp.fclt_f_periode, 1, 4)
           || LPAD (SUBSTR (cp.fclt_f_periode, 6, 2), 3, '0')
           || TO_CHAR (SYSDATE, 'YYYYMMDD')
           || UPPER (ud2.fac_usrdata_omschr)
           || ud3.fac_usrdata_omschr
           || RPAD (' ', 54, ' ')
      FROM prs_bedrijf                pb,
           fac_usrdata                ud2,
           fac_usrdata                ud3,
           care_v_cak_choose_periode  cp
     WHERE ud2.fac_usrdata_key = 42 AND ud3.fac_usrdata_key = 43;

CREATE OR REPLACE FORCE VIEW care_v_cak_zorg_pre_record
(
    fclt_f_periode,
    eerste_datum_periode_gewerkt,
    bsn_client,
    client_nr,
    prs_client_cak_actie,
    hele_uren,
    minuten,
    txt
)
AS
    SELECT fclt_f_periode,
           eerste_datum_periode_gewerkt,
           f.bsn_client,
           f.client_nr,
           f.prs_client_cak_actie,
           FLOOR (f.uren),
           ROUND (60 * (f.uren - FLOOR (f.uren))),
              jaar
           || LPAD (weeknr, 2, '0')
           || LPAD (COALESCE (client_nr, ' '), 10, '0')
           || DECODE (
                  product,
                  'HV1', DECODE (gemeente_ob,
                                 1, '428',
                                 COALESCE (alt_hv1, ud1.fac_usrdata_omschr)),
                  'HV2', DECODE (gemeente_ob,
                                 1, '429',
                                 COALESCE (alt_hv2, ud2.fac_usrdata_omschr)),
                  'HV3', DECODE (gemeente_ob,
                                 1, '430',
                                 COALESCE (alt_hv3, ud4.fac_usrdata_omschr)),
                  '000')
           || ud3.fac_usrdata_omschr
           || LPAD (FLOOR (f.uren), 3, '0')
           || LPAD (ROUND (60 * (f.uren - FLOOR (f.uren))), 2, '0')
           || LPAD (verzorger_key, 10, '0')
           || RPAD (' ', 2, ' ')
           || RPAD (' ', 39, ' ')
      FROM care_v_cak2_factuur_uren_b  f,
           fac_usrdata                 ud1,
           fac_usrdata                 ud2,
           fac_usrdata                 ud3,
           fac_usrdata                 ud4
     WHERE     ud1.fac_usrdata_key = 44
           AND ud2.fac_usrdata_key = 45
           AND ud3.fac_usrdata_key = 46
           AND ud4.fac_usrdata_key = 49;

-- Key 44 bij ud1 = SLEUTEL van waarde-code 'HV1' van eigen tabel '$SYSTEM-CAK' (007)
-- Key 45 bij ud2 = SLEUTEL van waarde-code 'HV2' van eigen tabel '$SYSTEM-CAK' (006)
-- Key 46 bij ud3 = SLEUTEL van waarde-code 'FINANCIERINGSSTROOM' van eigen tabel '$SYSTEM-CAK' (=08)
-- Key 49 bij ud4 = SLEUTEL van waarde-code 'HV3' van eigen tabel '$SYSTEM-CAK' (100)

CREATE OR REPLACE FORCE VIEW care_v_cak_client_zorg_record
(
    fclt_f_periode,
    eerste_datum_periode_gewerkt,
    bsn_client,
    client_nr,
    prs_client_cak_actie,
    hele_uren,
    minuten,
    txt
)
AS
    SELECT fclt_f_periode,
           eerste_datum_periode_gewerkt,
           bsn_client,
           client_nr,
           prs_client_cak_actie,
           hele_uren,
           minuten,
           '51' || '1' || txt
      FROM care_v_cak_zorg_pre_record;

--- Gewijzigde cq. correctie zorguren die naar CAK moeten.
--- KEY(prs_client_cak_actie) = 2 betekent "Correctie zorguren voor CAK"

CREATE OR REPLACE FORCE VIEW care_v_cak_changed_zorg_record
(
    fclt_f_periode,
    eerste_datum_periode_gewerkt,
    bsn_client,
    client_nr,
    prs_client_cak_actie,
    hele_uren,
    minuten,
    txt
)
AS
    SELECT fclt_f_periode,
           eerste_datum_periode_gewerkt,
           bsn_client,
           client_nr,
           prs_client_cak_actie,
           hele_uren,
           minuten,
           '51' || prs_client_cak_actie || txt
      FROM care_v_cak_zorg_pre_record
     WHERE prs_client_cak_actie = 1 OR prs_client_cak_actie = 2;

-- MB: let wel: een beetje tricky, maar wel ok!
-- Er mogen alleen clienten in bestand die nog niet eerder zijn aangeleverd (dus alleen de nieuwe clienten van dezer periode)
-- Opgelost via view care_v_first_factuur_uren_ooit en veld datum_eerste_keer_ooit, de allereerste keer dat client zorguren
-- heeft gekregen. Als die gelijk is aan de eerste keer dat zorg in deze periode is gekregen, dan conclusie: nieuwe client.
-- (NB: Niet via persoon-aanmaak datum vergeleken met periode, want dat zegt niet over ontvangen zorguren!!!)
-- Verder accepteert CAK niet dat 1,2 en 3 jan 2010 wordt weergegeven met 2010-week 53, dus in die gevallen wordt dat weeknr 01
-- Dit wordt ook enigszins tricky gedaan, maar wel ok, met verschil tussen beschikking_datum_van 'WW' en 'IW'...
-- Tenslotte de voorletters van client, die moeten zonder puntjes (de replace zorgt ervoor dat puntjes eruit worden gehaald).
-- Usrdata-Key 48 = SLEUTEL van waarde-code 'CLIENTNR' van eigen tabel '$SYSTEM-CAK'
-- (=1 indien gebruikt van expliciet clientnr, anders perslid_key als impliciet nr)
-- Prs_client_cak_actie = 1 betekent: client opnieuw aanmelden bij het CAK.

CREATE OR REPLACE FORCE VIEW care_v_cak_clientstam_record
(
    fclt_f_periode,
    client_bsn,
    txt
)
AS
      SELECT cz.fclt_f_periode,
             b.client_bsn,
                '10'
             || TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IYYY'))
             || LPAD (
                    TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IW')),
                    2,
                    '0')
             || LPAD (COALESCE (MIN (client_nr), ' '), 10, '0')
             || '1'
             || LPAD (COALESCE (MIN (b.prs_client_naam), ' '), 25, ' ')
             || LPAD (COALESCE (MIN (b.prs_client_tussenvoegsel), ' '), 8, ' ')
             || LPAD (
                    REPLACE (COALESCE (MIN (b.prs_client_voorletters), ' '),
                             '.',
                             ''),
                    5,
                    ' ')
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 7, 4), ' '),
                    4)
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 4, 2), ' '),
                    2)
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 1, 2), ' '),
                    2)
             || LPAD (COALESCE (b.client_bsn, ' '), 9, ' ')
             || RPAD (' ', 6, ' ')
        FROM care_v_beschikking_all b, care_v_cak_client_zorg_record cz
       WHERE cz.bsn_client = b.client_bsn AND b.pgb IS NULL
    GROUP BY cz.fclt_f_periode, b.client_bsn;

-- Usrdata-Key 48 = SLEUTEL van waarde-code 'CLIENTNR' van eigen tabel '$SYSTEM-CAK'
-- (=1 indien gebruikt van expliciet clientnr, anders perslid_key als impliciet nr)
-- Prs_client_cak_actie = 1 betekent: client opnieuw aanmelden bij het CAK.
-- Bijzonderheid: gebruik van REGEXP_INSTR om dat vervelende huisnr toevoeging gedoe uit elkaar te trekken.
-- CAK rapport eist dat huisnr ALLEEN numerieke waarden heeft (dus 12A en 20-3 zijn ongeldig en moeten in huisnr toevoeging zitten)
-- Het veld Huisnr (1 in facilitor)  verworden in CAK rapport 2 velden 'huisnr' en 'huisnrtoevoeging'
-- Voorbeelden:
-- Facilitor-> CAK
-- huisnr     -> huisnr | huisnr toevoeging
-- 12A        -> 12     | A
-- 20-3       -> 20     | 3
-- 123        -> 123    |

CREATE OR REPLACE FORCE VIEW care_v_cak_clientaanv_record
(
    fclt_f_periode,
    client_bsn,
    txt
)
AS
      SELECT cz.fclt_f_periode,
             b.client_bsn,
                '12'
             || TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IYYY'))
             || LPAD (
                    TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IW')),
                    2,
                    '0')
             || LPAD (COALESCE (MIN (client_nr), ' '), 10, '0')
             || '1'
             || LPAD (COALESCE (MIN (client_mv), ' '), 1, ' ')
             || UPPER (
                    LPAD (
                        COALESCE (REPLACE (MIN (client_postcode), ' ', ''),
                                  ' '),
                        6,
                        ' '))
             || LPAD (
                    COALESCE (
                        MIN (
                            SUBSTR (
                                client_huisnr,
                                1,
                                DECODE (
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]'),
                                    0, LENGTH (client_huisnr),
                                      REGEXP_INSTR (client_huisnr,
                                                    '[[:alpha:]]|[-]')
                                    - 1))),
                        ' '),
                    5,
                    ' ')
             || LPAD (
                    COALESCE (
                        MIN (
                            SUBSTR (
                                client_huisnr,
                                DECODE (
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]'),
                                    0, LENGTH (client_huisnr) + 1,
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]')))),
                        ' '),
                    4,
                    ' ')
             || RPAD (' ', 45, ' ')
        FROM care_v_beschikking_all b, care_v_cak_client_zorg_record cz
       WHERE cz.bsn_client = b.client_bsn AND b.pgb IS NULL
    GROUP BY cz.fclt_f_periode, b.client_bsn;

CREATE OR REPLACE FORCE VIEW care_v_cak_c_clientstam_record
(
    fclt_f_periode,
    client_bsn,
    txt
)
AS
      SELECT cz.fclt_f_periode,
             b.client_bsn,
                '10'
             || TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IYYY'))
             || LPAD (
                    TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IW')),
                    2,
                    '0')
             || LPAD (COALESCE (MIN (client_nr), ' '), 10, '0')
             || '1'
             || LPAD (COALESCE (MIN (b.prs_client_naam), ' '), 25, ' ')
             || LPAD (COALESCE (MIN (b.prs_client_tussenvoegsel), ' '), 8, ' ')
             || LPAD (
                    REPLACE (COALESCE (MIN (b.prs_client_voorletters), ' '),
                             '.',
                             ''),
                    5,
                    ' ')
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 7, 4), ' '),
                    4)
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 4, 2), ' '),
                    2)
             || LPAD (
                    COALESCE (SUBSTR (MIN (b.client_geboortedatum), 1, 2), ' '),
                    2)
             || LPAD (COALESCE (b.client_bsn, ' '), 9, ' ')
             || RPAD (' ', 6, ' ')
        FROM care_v_beschikking_all b, care_v_cak_changed_zorg_record cz
       WHERE cz.bsn_client = b.client_bsn AND b.pgb IS NULL
    GROUP BY cz.fclt_f_periode, b.client_bsn;

-- Usrdata-Key 48 = SLEUTEL van waarde-code 'CLIENTNR' van eigen tabel '$SYSTEM-CAK'
-- (=1 indien gebruikt van expliciet clientnr, anders perslid_key als impliciet nr)
-- Prs_client_cak_actie = 1 betekent: client opnieuw aanmelden bij het CAK.
-- Bijzonderheid: gebruik van REGEXP_INSTR om dat vervelende huisnr toevoeging gedoe uit elkaar te trekken.
-- CAK rapport eist dat huisnr ALLEEN numerieke waarden heeft (dus 12A en 20-3 zijn ongeldig en moeten in huisnr toevoeging zitten)
-- Het veld Huisnr (1 in facilitor)  verworden in CAK rapport 2 velden 'huisnr' en 'huisnrtoevoeging'
-- Voorbeelden:
-- Facilitor-> CAK
-- huisnr     -> huisnr | huisnr toevoeging
-- 12A        -> 12     | A
-- 20-3       -> 20     | 3
-- 123        -> 123    |

CREATE OR REPLACE FORCE VIEW care_v_cak_c_clientaanv_record
(
    fclt_f_periode,
    client_bsn,
    txt
)
AS
      SELECT cz.fclt_f_periode,
             b.client_bsn,
                '12'
             || TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IYYY'))
             || LPAD (
                    TO_NUMBER (TO_CHAR (MIN (b.beschikking_datum_van), 'IW')),
                    2,
                    '0')
             || LPAD (COALESCE (MIN (client_nr), ' '), 10, '0')
             || '1'
             || LPAD (COALESCE (MIN (client_mv), ' '), 1, ' ')
             || UPPER (
                    LPAD (
                        COALESCE (REPLACE (MIN (client_postcode), ' ', ''),
                                  ' '),
                        6,
                        ' '))
             || LPAD (
                    COALESCE (
                        MIN (
                            SUBSTR (
                                client_huisnr,
                                1,
                                DECODE (
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]'),
                                    0, LENGTH (client_huisnr),
                                      REGEXP_INSTR (client_huisnr,
                                                    '[[:alpha:]]|[-]')
                                    - 1))),
                        ' '),
                    5,
                    ' ')
             || LPAD (
                    COALESCE (
                        MIN (
                            SUBSTR (
                                client_huisnr,
                                DECODE (
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]'),
                                    0, LENGTH (client_huisnr) + 1,
                                    REGEXP_INSTR (client_huisnr,
                                                  '[[:alpha:]]|[-]')))),
                        ' '),
                    4,
                    ' ')
             || RPAD (' ', 45, ' ')
        FROM care_v_beschikking_all b, care_v_cak_changed_zorg_record cz
       WHERE cz.bsn_client = b.client_bsn AND b.pgb IS NULL
    GROUP BY cz.fclt_f_periode, b.client_bsn;

CREATE OR REPLACE FORCE VIEW care_v_cak_body
(
    fclt_f_periode,
    hele_uren,
    minuten,
    txt
)
AS
    SELECT fclt_f_periode,
           0,
           0,
           txt
      FROM care_v_cak_clientstam_record cs
    UNION ALL
    SELECT fclt_f_periode,
           0,
           0,
           txt
      FROM care_v_cak_clientaanv_record ca
    UNION ALL
    SELECT fclt_f_periode,
           hele_uren,
           minuten,
           txt
      FROM care_v_cak_client_zorg_record cz;

CREATE OR REPLACE FORCE VIEW care_v_cak_changed_body
(
    fclt_f_periode,
    hele_uren,
    minuten,
    txt
)
AS
    SELECT fclt_f_periode,
           0,
           0,
           txt
      FROM care_v_cak_c_clientstam_record cs
    UNION ALL
    SELECT fclt_f_periode,
           0,
           0,
           txt
      FROM care_v_cak_c_clientaanv_record ca
    UNION ALL
    SELECT fclt_f_periode,
           hele_uren,
           minuten,
           txt
      FROM care_v_cak_changed_zorg_record cz;

CREATE OR REPLACE FORCE VIEW care_v_cak_sluit_record
(
    fclt_f_periode,
    txt
)
AS
      SELECT fclt_f_periode,
                '90'
             || LPAD (COUNT (*), 7, '0')
             || LPAD (SUM (hele_uren) + FLOOR (SUM (minuten) / 60), 10, '0')
             || LPAD (SUM (minuten) - (60 * FLOOR (SUM (minuten) / 60)),
                      2,
                      '0')
             || RPAD (' ', 59, ' ')
        FROM care_v_cak_body b
    GROUP BY fclt_f_periode;

CREATE OR REPLACE FORCE VIEW care_v_cak_sluit2_record
(
    fclt_f_periode,
    txt
)
AS
      SELECT fclt_f_periode,
                '90'
             || LPAD (COUNT (*), 7, '0')
             || LPAD (SUM (hele_uren) + FLOOR (SUM (minuten) / 60), 10, '0')
             || LPAD (SUM (minuten) - (60 * FLOOR (SUM (minuten) / 60)),
                      2,
                      '0')
             || RPAD (' ', 59, ' ')
        FROM care_v_cak_changed_body b
    GROUP BY fclt_f_periode;

CREATE OR REPLACE FORCE VIEW care_v_cak_rapport
(
    fclt_f_periode,
    fclt_f_record,
    txt
)
AS
    SELECT h.fclt_f_periode, SUBSTR (h.txt, 1, 2), h.txt
      FROM care_v_cak_hoofd_record h
    UNION ALL
    SELECT b.fclt_f_periode, SUBSTR (b.txt, 1, 2), b.txt
      FROM care_v_cak_body b
    UNION ALL
    SELECT s.fclt_f_periode, SUBSTR (s.txt, 1, 2), s.txt
      FROM care_v_cak_sluit_record s;

CREATE OR REPLACE FORCE VIEW care_v_cak_changed_rapport
(
    fclt_f_periode,
    fclt_f_record,
    txt
)
AS
    SELECT h.fclt_f_periode, SUBSTR (h.txt, 1, 2), h.txt
      FROM care_v_cak_hoofd_record h
    UNION ALL
    SELECT b.fclt_f_periode, SUBSTR (b.txt, 1, 2), b.txt
      FROM care_v_cak_changed_body b
    UNION ALL
    SELECT s.fclt_f_periode, SUBSTR (s.txt, 1, 2), s.txt
      FROM care_v_cak_sluit2_record s;

-- Key 47 = SLEUTEL van waarde-code 'PERIODE' van eigen tabel '$SYSTEM-CAK' (formaat = yyyy-ww t/m yyyy-ww)
-- Gekozen: 0 = optie
--          1 = gekozen
--          2 = laatste export datum
--          3 = export datum gezet

CREATE OR REPLACE FORCE VIEW care_v_rap_cak
(
    periode,
    gekozen
)
AS
      SELECT fclt_f_periode, 0
        FROM care_v_cak_choose_periode
    GROUP BY fclt_f_periode
    UNION
    SELECT ud1.fac_usrdata_omschr, 1
      FROM fac_usrdata ud1
     WHERE ud1.fac_usrdata_key = 47
    UNION
    SELECT TO_CHAR (MAX (imp_schedule_done), 'DD-MM-YYYY HH24:MI'), 2
      FROM imp_schedule
     WHERE     imp_schedule_name = 'CAK'
           AND imp_schedule_done IS NOT NULL
           AND imp_schedule_aanmaak IS NOT NULL
    UNION
    SELECT TO_CHAR (imp_schedule_aanmaak, 'DD-MM-YYYY HH24:MI'), 3
      FROM imp_schedule
     WHERE     imp_schedule_name = 'CAK'
           AND imp_schedule_done IS NULL
           AND imp_schedule_aanmaak IS NOT NULL
    UNION
    SELECT TO_CHAR (COUNT (*)), 4
      FROM care_v_cak_clientcontrole
     WHERE fout_code = 'E';

CREATE OR REPLACE FORCE VIEW care_v_rap_cak_chg
(
    periode,
    gekozen
)
AS
      SELECT fclt_f_periode, 0
        FROM care_v_cak_choose_periode
    GROUP BY fclt_f_periode
    UNION
    SELECT ud1.fac_usrdata_omschr, 1
      FROM fac_usrdata ud1
     WHERE ud1.fac_usrdata_key = 47
    UNION
    SELECT TO_CHAR (MAX (imp_schedule_done), 'DD-MM-YYYY HH24:MI'), 2
      FROM imp_schedule
     WHERE     imp_schedule_name = 'CAK_CHG'
           AND imp_schedule_done IS NOT NULL
           AND imp_schedule_aanmaak IS NOT NULL
    UNION
    SELECT TO_CHAR (imp_schedule_aanmaak, 'DD-MM-YYYY HH24:MI'), 3
      FROM imp_schedule
     WHERE     imp_schedule_name = 'CAK_CHG'
           AND imp_schedule_done IS NULL
           AND imp_schedule_aanmaak IS NOT NULL
    UNION
    SELECT TO_CHAR (COUNT (*)), 4
      FROM care_v_cak_clientcontrole
     WHERE fout_code = 'E';

-- Menutaak Export CAK bestand: appl/fac/fac_usrrap.asp?rap_name=care_v_rap_cak
-- Key 47 = SLEUTEL van waarde-code 'PERIODE' van eigen tabel '$SYSTEM-CAK' (formaat = yyyy-ww t/m yyyy-ww)
-- Gekozen: 0 = optie
--          1 = gekozen
--          2 = laatste export datum
--          3 = export datum gezet

CREATE OR REPLACE FORCE VIEW care_v_export_cak
(
    result,
    result_order
)
AS
      SELECT txt, ROWNUM
        FROM care_v_cak_rapport
       WHERE fclt_f_periode = (SELECT ud1.fac_usrdata_omschr
                                 FROM fac_usrdata ud1
                                WHERE ud1.fac_usrdata_key = 47)
    ORDER BY TO_NUMBER (SUBSTR (txt, 1, 2));

CREATE OR REPLACE FORCE VIEW care_v_export_cak_chg
(
    result,
    result_order
)
AS
      SELECT txt, ROWNUM
        FROM care_v_cak_changed_rapport
       WHERE fclt_f_periode = (SELECT ud1.fac_usrdata_omschr
                                 FROM fac_usrdata ud1
                                WHERE ud1.fac_usrdata_key = 47)
    ORDER BY TO_NUMBER (SUBSTR (txt, 1, 2));

-- QlikView/Analyze views
--
-- Periodetabel van 10 jaar in het verleden t/m 10 jaar in toekomst

CREATE OR REPLACE FORCE VIEW care_v_qvw_periodeweektabel
(
    jaar,
    periode,
    week,
    maandag
)
AS
        SELECT TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IYYY')    jaar,
               LEAST (
                     FLOOR ((TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW') - 1) / 4)
                   + 1,
                   13)                                        periode,
               TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW')      week,
               TRUNC (SYSDATE - 7 * (LEVEL - 1), 'IW')        startdatum
          FROM DUAL
    CONNECT BY LEVEL <= 5 * 52 + 1
    UNION
        SELECT TO_CHAR (SYSDATE + 7 * (LEVEL), 'IYYY')    jaar,
               LEAST (
                   FLOOR ((TO_CHAR (SYSDATE + 7 * (LEVEL), 'IW') - 1) / 4) + 1,
                   13)                                    periode,
               TO_CHAR (SYSDATE + 7 * (LEVEL), 'IW')      week,
               TRUNC (SYSDATE + 7 * (LEVEL), 'IW')        startdatum
          FROM DUAL
    CONNECT BY LEVEL <= 5 * 52 + 1;

-- Eerst maar eens een hulp-view voor de view care_v_qvw_beschikk
-- In deze hulp-view: per melding-key de eerste datum waarop er zorg is verleend (en is goedgekeurd).

CREATE OR REPLACE FORCE VIEW care_v_qvw_first_gewerkte_uren
AS
      SELECT b.mld_melding_key,
             MIN (uur.datum_gewerkt)     AS datum_eerste_keer_ooit
        FROM care_v_beschikking_all b, care_v_te_factureren_uren uur
       WHERE b.mld_melding_key = uur.mld_melding_key(+)
    GROUP BY b.mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_qvw_beschikk
AS
    SELECT b.mld_melding_key,
           b.gemeente_key,
           b.gemeente_code,
           b.gemeente_omschrijving,
           b.gemeente_veiling,
              b.prs_client_naam
           || ','
           || prs_client_tussenvoegsel
           || ','
           || prs_client_voorletters
               AS prs_client_naam,
           b.client_bsn,
           b.client_mv,
           TO_DATE (b.client_geboortedatum, 'DD-MM-YYYY')
               client_geboortedatum,
           b.client_woonplaats,
           b.beschikking_datum_van,
           DECODE (
               ABS (
                     TO_NUMBER (TO_CHAR (b.beschikking_datum_van, 'IW'))
                   - TO_NUMBER (TO_CHAR (b.beschikking_datum_van, 'WW'))),
               0, TO_NUMBER (TO_CHAR (b.beschikking_datum_van, 'IW')),
               1, TO_NUMBER (TO_CHAR (b.beschikking_datum_van, 'IW')),
               TO_NUMBER (TO_CHAR (b.beschikking_datum_van, 'WW')))
               AS beschikking_week_van,
           b.beschikking_jaar_van,
           b.beschikking_maandag_van_std,
           b.beschikking_maandag_van,
           b.beschikking_maandag_tot_std,
           b.beschikking_datum_tot,
           COALESCE (
               LEAST (b.beschikking_maandag_tot, b.beschikking_afmeld_datum),
               b.beschikking_maandag_tot)
               beschikking_maandag_tot,
           b.beschikking_afmeld_datum,
           u.datum_eerste_keer_ooit,
           b.product_code,
           b.product,
           COALESCE (b.pgb, 0)
               pgb,
           b.pgb_tarief,
           b.uren_beschikking,
           b.beschikking_nr,
           b.ins_discipline_omschrijving
      FROM care_v_beschikking_all b, care_v_qvw_first_gewerkte_uren u
     WHERE b.mld_melding_key = u.mld_melding_key;

CREATE OR REPLACE FORCE VIEW care_v_qvw_gemeente_tarieven
(
    alg_locatie_key,
    product_code,
    tarief,
    vandatum,
    tmdatum
)
AS
    SELECT alg_locatie_key,
           product_code,
           tarief,
           COALESCE (
               LAG (duedatum + 1, 1, TO_DATE ('01-01-2010', 'DD-MM-YYYY'))
                   OVER (ORDER BY alg_locatie_key, product_code, duedatum),
               TO_DATE ('01-01-2010', 'DD-MM-YYYY'))                    AS vandatum,
           COALESCE (duedatum, TO_DATE ('31-12-2099', 'DD-MM-YYYY'))    AS tmdatum
      FROM care_v_gemeente_tarieven;

-- FSN#25608: CARE_V_QVW_BESCHIKK_PER_WEEK te complex voor Ora11, dus bovenstaande care_v_qvw_tarieven_per_week nu op statische tabel gebaseerd.

CREATE OR REPLACE FORCE VIEW care_v_qvw_tarieven_per_week
(
    alg_locatie_key,
    product_code,
    tarief,
    jaar,
    periode,
    week,
    maandag
)
AS
    SELECT alg_locatie_key,
           product_code,
           tarief,
           jaar,
           periode,
           week,
           maandag
      FROM care_v_qvw_gemeente_tarieven gt, care_t_qvw_periodeweektabel pw
     WHERE pw.maandag >= vandatum AND pw.maandag <= tmdatum;

CREATE OR REPLACE FORCE VIEW care_v_qvw_beschikk_per_week
(
    mld_melding_key,
    beschikking_maandag_van,
    beschikking_maandag_tot,
    uren_beschikking,
    tarief,
    jaar,
    periode,
    week,
    maandag_vande_week
)
AS
    SELECT mld_melding_key,
           beschikking_maandag_van,
           beschikking_maandag_tot,
           uren_beschikking,
           CASE
               WHEN b.pgb = 1 THEN b.pgb_tarief
               WHEN b.gemeente_veiling = 1 THEN b.pgb_tarief
               ELSE t.tarief
           END,
           jaar,
           periode,
           week,
           t.maandag
      FROM care_v_qvw_beschikk b, care_v_qvw_tarieven_per_week t
     WHERE     t.maandag >= b.beschikking_maandag_van_std - 7
           AND t.maandag < b.beschikking_maandag_tot_std + 7
           AND b.gemeente_key = alg_locatie_key
           AND b.product_code = t.product_code;

CREATE OR REPLACE FORCE VIEW care_v_qvw_zorguren
AS
    SELECT u.mld_melding_key,
           u.jaar,
           DECODE (
               ABS (
                     TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW'))
                   - TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'WW'))),
               0, TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW')),
               1, TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW')),
               TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'WW')))
               weeknr,
           u.datum_gewerkt,
           u.uren_besteed,
              z.prs_verzorger_naam
           || ','
           || z.prs_verzorger_tussenvoegsel
           || ','
           || z.prs_verzorger_voorletters
               AS prs_verzorger_naam,
           z.verzorger_bsn,
           z.verzorger_mv,
           TO_DATE (z.verzorger_geboortedatum, 'DD-MM-YYYY')
               verzorger_geboortedatum,
           z.verzorger_woonplaats,
           z.prs_verzorger_dienstverband
      FROM care_v_bestede_uren_all u, care_v_verzorger z
     WHERE z.prs_perslid_key = u.prs_perslid_key(+) AND uren_status >= 3;

CREATE OR REPLACE FORCE VIEW care_v_qvw_impr_uren
AS
    SELECT u.mld_impropdr_key,
           u.mld_impropdr_code,
           u.mld_impropdr_omschrijving,
           u.jaar,
           DECODE (
               ABS (
                     TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW'))
                   - TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'WW'))),
               0, TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW')),
               1, TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'IW')),
               TO_NUMBER (TO_CHAR (u.datum_gewerkt, 'WW')))
               weeknr,
           u.datum_gewerkt,
           u.uren_besteed
               AS impr_uren,
              z.prs_verzorger_naam
           || ','
           || z.prs_verzorger_tussenvoegsel
           || ','
           || z.prs_verzorger_voorletters
               AS prs_verzorger_naam,
           z.verzorger_bsn
      FROM care_v_improductieve_uren_all u, care_v_verzorger z
     WHERE z.prs_perslid_key = u.prs_perslid_key(+) AND uren_status >= 3;

CREATE OR REPLACE FORCE VIEW care_v_qvw_kosten
AS
    SELECT mld_kosten_code,
           mld_kosten_omschrijving,
           mld_opdruren_kosten_besteed,
           mld_kosten_kosten,
           k.mld_melding_key,
           TO_CHAR (k.datum, 'IYYY')              jaar,
           TO_NUMBER (TO_CHAR (k.datum, 'IW'))    weeknr,
           k.datum                                AS datum_gewerkt,
              z.prs_verzorger_naam
           || ','
           || z.prs_verzorger_tussenvoegsel
           || ','
           || z.prs_verzorger_voorletters         AS prs_verzorger_naam,
           z.verzorger_bsn
      FROM care_v_onkosten_all k, care_v_verzorger z
     WHERE z.prs_perslid_key = k.prs_perslid_key(+) AND status >= 3;

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--                                                                                 Google kilometer berekening                                                                        --
--                                                                                 Google kilometer berekening                                                                        --
--                                                                                 Google kilometer berekening                                                                        --
--                                                                                 Google kilometer berekening                                                                        --
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ATCH#21595: Google km berekening
-- Kilometers van de medewerkers op datum, alleen van auto (vandaar k.mld_kosten_code = 'A') en de Productieve uren (vandaar opdracht_type = 'P').
-- De improductieve kilometers worden buiten beschouwing gelaten, aangezien we daarvan geen adresgegevens hebben, en met de Google-vergelijking niet mee moeten nemen.

CREATE OR REPLACE FORCE VIEW care_v_km_weekbrief
(
    prs_perslid_key,
    periode,
    bsn,
    nr,
    verzorger,
    adres,
    huisnr,
    postcode,
    woonplaats,
    telefoon,
    mobiel,
    email,
    auto_rijbewijs,
    kilometers,
    datum,
    jaar,
    week,
    status,
    mld_opdr_uren_key,
    prs_client_naam,
    prs_client_tussenvoegsel,
    prs_client_voorletters,
    client_bsn,
    client_meisjesnaam,
    client_adres,
    client_huisnr,
    client_postcode,
    client_woonplaats,
    client_telefoon_thuis,
    client_telefoon_werk,
    client_mobiel
)
AS
    SELECT v.prs_perslid_key,
           uur.jaar || '-' || LPAD (uur.periodenr, 2, '0'),
           v.verzorger_bsn,
           v.prs_verzorger_personeelsnr,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel,
           v.verzorger_adres,
           v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email,
           v.auto_rijbewijs,
           ouk.mld_opdruren_kosten_besteed,
           uur.datum_gewerkt,
           uur.jaar,
           uur.weeknr,
           uur.uren_status,
           uur.mld_opdr_uren_key,
           c.prs_client_naam,
           c.prs_client_tussenvoegsel,
           c.prs_client_voorletters,
           c.client_bsn,
           c.client_meisjesnaam,
           c.client_adres,
           c.client_huisnr,
           c.client_postcode,
           c.client_woonplaats,
           c.client_telefoon_thuis,
           c.client_telefoon_werk,
           c.prs_client_mobiel
      FROM care_v_totaal_uren_all  uur,
           care_v_verzorger        v,
           mld_opdruren_kosten     ouk,
           mld_kosten              k,
           mld_opdr                o,
           mld_melding             m,
           care_v_client           c
     WHERE     uur.prs_perslid_key = v.prs_perslid_key
           AND uur.mld_opdr_uren_key = ouk.mld_opdr_uren_key
           AND ouk.mld_kosten_key = k.mld_kosten_key
           AND k.mld_kosten_verwijder IS NULL
           AND k.mld_kosten_code = 'A'
           AND opdracht_type = 'P'
           AND uur.opdracht_key = o.mld_opdr_key
           AND o.mld_melding_key = m.mld_melding_key
           AND m.prs_perslid_key = c.prs_client_key;

CREATE OR REPLACE FORCE VIEW care_v_verzorger_km_per_dag
(
    prs_perslid_key,
    datum,
    jaar,
    periode,
    week,
    bsn,
    verzorger,
    adres,
    huisnr,
    postcode,
    woonplaats,
    telefoon,
    mobiel,
    email,
    auto_rijbewijs,
    kilometers,
    mld_opdr_uren_key
)
AS
      SELECT prs_perslid_key,
             datum,
             MIN (jaar),
             MIN (periode),
             MIN (week),
             MIN (bsn),
             MIN (verzorger),
             MIN (adres),
             MIN (huisnr),
             MIN (postcode),
             MIN (woonplaats),
             MIN (telefoon),
             MIN (mobiel),
             MIN (email),
             MIN (auto_rijbewijs),
             SUM (kilometers),
             MIN (mld_opdr_uren_key)
        FROM care_v_km_weekbrief
    GROUP BY prs_perslid_key, datum;

CREATE OR REPLACE FORCE VIEW care_v_opdruren_dagkosten
AS
    SELECT mld_opdruren_dagkosten_key,
           prs_perslid_key,
           mld_opdruren_dagkosten_datum,
           mld_opdruren_dagkosten_aantal,
           mld_opdruren_dagkosten_totaal,
           CASE
               WHEN INSTR (mld_opdruren_dagkosten_opm, '#') > 0
               THEN
                   SUBSTR (mld_opdruren_dagkosten_opm,
                           1,
                           INSTR (mld_opdruren_dagkosten_opm, '#') - 1)
               ELSE
                   mld_opdruren_dagkosten_opm
           END    mld_opdruren_dagkosten_opm,
           mld_opdruren_dagkosten_aanmaak,
           CASE
               WHEN INSTR (mld_opdruren_dagkosten_opm, '#') > 0
               THEN
                   fac.safe_to_number (
                       SUBSTR (mld_opdruren_dagkosten_opm,
                               INSTR (mld_opdruren_dagkosten_opm, '#') + 1))
               ELSE
                   0
           END    interkm
      FROM mld_opdruren_dagkosten;

CREATE OR REPLACE FORCE VIEW care_v_rap_km_per_periode
(
    hide_f_prs_perslid_key,
    fclt_f_jaar,
    fclt_f_periode,
    fclt_f_verzorger,
    woonplaats,
    fclt_f_auto,
    km,
    norm_km,
    verschil,
    perc
)
AS
      SELECT km.prs_perslid_key,
             TO_CHAR (km.jaar),
             km.periode,
             MIN (km.verzorger),
             MIN (km.woonplaats),
             COALESCE (MIN (km.auto_rijbewijs), '?'),
             SUM (km.kilometers),
             ROUND ((SUM (cd.mld_opdruren_dagkosten_totaal + 500)) / 1000),
               SUM (km.kilometers)
             - ROUND ((SUM (cd.mld_opdruren_dagkosten_totaal + 500)) / 1000),
             CASE
                 WHEN SUM (cd.mld_opdruren_dagkosten_totaal) > 0
                 THEN
                        ROUND (
                              (  SUM (km.kilometers)
                               - ROUND (
                                       (SUM (
                                              cd.mld_opdruren_dagkosten_totaal
                                            + 500))
                                     / 1000))
                            / ROUND (
                                    (SUM (
                                         cd.mld_opdruren_dagkosten_totaal + 500))
                                  / 1000)
                            * 100)
                     || ' %'
                 ELSE
                     'Onbekend'
             END
        FROM care_v_verzorger_km_per_dag km, care_v_opdruren_dagkosten cd
       WHERE     km.prs_perslid_key = cd.prs_perslid_key(+)
             AND km.datum = cd.mld_opdruren_dagkosten_datum(+)
    GROUP BY km.prs_perslid_key, km.jaar, km.periode;

CREATE OR REPLACE FORCE VIEW care_v_rap_km_per_week
(
    hide_f_prs_perslid_key,
    fclt_f_jaar,
    fclt_f_periode,
    fclt_f_week,
    fclt_f_verzorger,
    woonplaats,
    fclt_f_auto,
    km,
    norm_km,
    verschil,
    perc
)
AS
      SELECT km.prs_perslid_key,
             TO_CHAR (km.jaar),
             km.periode,
             TO_CHAR (km.week),
             MIN (km.verzorger),
             MIN (km.woonplaats),
             COALESCE (MIN (km.auto_rijbewijs), '?'),
             SUM (km.kilometers),
             ROUND ((SUM (cd.mld_opdruren_dagkosten_totaal + 500)) / 1000),
               SUM (km.kilometers)
             - ROUND ((SUM (cd.mld_opdruren_dagkosten_totaal + 500)) / 1000),
             CASE
                 WHEN SUM (cd.mld_opdruren_dagkosten_totaal) > 0
                 THEN
                        ROUND (
                              (  SUM (km.kilometers)
                               - ROUND (
                                       (SUM (
                                              cd.mld_opdruren_dagkosten_totaal
                                            + 500))
                                     / 1000))
                            / ROUND (
                                    (SUM (
                                         cd.mld_opdruren_dagkosten_totaal + 500))
                                  / 1000)
                            * 100)
                     || ' %'
                 ELSE
                     'Onbekend'
             END
        FROM care_v_verzorger_km_per_dag km, care_v_opdruren_dagkosten cd
       WHERE     km.prs_perslid_key = cd.prs_perslid_key(+)
             AND km.datum = cd.mld_opdruren_dagkosten_datum(+)
    GROUP BY km.prs_perslid_key,
             km.jaar,
             km.periode,
             km.week;

CREATE OR REPLACE FORCE VIEW care_v_rap_km_per_dag
(
    hide_f_prs_perslid_key,
    urole,
    hide_f_datum,
    datum,
    hide_maandag,
    fclt_f_jaar,
    fclt_f_periode,
    fclt_f_week,
    fclt_f_verzorger,
    adres,
    huisnr,
    postcode,
    woonplaats,
    telefoonnr,
    mobiel,
    fclt_f_auto,
    clienten,
    km,
    norm_m,
    norm_km,
    verschil,
    fclt_f_staffel,
    perc,
    fclt_f_percentage,
    url,
    html_berekening,
    mld_opdr_uren_key
)
AS
    SELECT km.prs_perslid_key,
           'bo',
           km.datum,
           TO_CHAR (km.datum, 'yyyy-mm-dd'),
           TO_CHAR (TRUNC (km.datum, 'IW'), 'yyyy-mm-dd'),
           TO_CHAR (km.jaar),
           km.periode,
           TO_CHAR (km.week),
           km.verzorger,
           km.adres,
           km.huisnr,
           km.postcode,
           km.woonplaats,
           km.telefoon,
           km.mobiel,
           COALESCE (km.auto_rijbewijs, '?'),
           TO_CHAR (cd.mld_opdruren_dagkosten_aantal),
           km.kilometers,
           COALESCE (cd.mld_opdruren_dagkosten_totaal, 0),
           ROUND ((cd.mld_opdruren_dagkosten_totaal + 500) / 1000),
           CASE
               WHEN cd.mld_opdruren_dagkosten_totaal > 0
               THEN
                     km.kilometers
                   - ROUND ((cd.mld_opdruren_dagkosten_totaal + 500) / 1000)
               ELSE
                   0
           END,
           CASE
               WHEN cd.mld_opdruren_dagkosten_totaal > 0
               THEN
                   CASE
                       WHEN   km.kilometers
                            - ROUND (
                                    (cd.mld_opdruren_dagkosten_totaal + 500)
                                  / 1000) <=
                            -2
                       THEN
                           'A. < (Minder dan NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                -1
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                1
                       THEN
                           'B. = (Volgens NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                2
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                5
                       THEN
                           'C. 2 - 5 km (Boven NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                6
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                10
                       THEN
                           'D. 6 - 10 km (Boven NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                11
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                20
                       THEN
                           'E. 11 - 20 km (Boven NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                21
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                50
                       THEN
                           'F. 21 - 50 km (Boven NORM geschreven)'
                       WHEN       km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) >=
                                51
                            AND   km.kilometers
                                - ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000) <=
                                100
                       THEN
                           'G. 51 - 100 km (Boven NORM geschreven)'
                       ELSE
                           'H. > 100 km (Boven NORM geschreven)'
                   END
               ELSE
                   'Onbekend'
           END,
           CASE
               WHEN cd.mld_opdruren_dagkosten_totaal > 0
               THEN
                      ROUND (
                            (  km.kilometers
                             - ROUND (
                                     (cd.mld_opdruren_dagkosten_totaal + 500)
                                   / 1000))
                          / ROUND (
                                  (cd.mld_opdruren_dagkosten_totaal + 500)
                                / 1000)
                          * 100)
                   || ' %'
               ELSE
                   'Onbekend'
           END,
           CASE
               WHEN cd.mld_opdruren_dagkosten_totaal > 0
               THEN
                   CASE
                       WHEN ROUND (
                                  (  km.kilometers
                                   - ROUND (
                                           (  cd.mld_opdruren_dagkosten_totaal
                                            + 500)
                                         / 1000))
                                / ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000)
                                * 100) <
                            0
                       THEN
                           'A. < % (Minder dan NORM geschreven)'
                       WHEN ROUND (
                                  (  km.kilometers
                                   - ROUND (
                                           (  cd.mld_opdruren_dagkosten_totaal
                                            + 500)
                                         / 1000))
                                / ROUND (
                                        (  cd.mld_opdruren_dagkosten_totaal
                                         + 500)
                                      / 1000)
                                * 100) =
                            0
                       THEN
                           'B. = (Volgens NORM geschreven)'
                       WHEN     ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) >
                                0
                            AND ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) <=
                                10
                       THEN
                           'C. 0 - 10% (Boven NORM geschreven)'
                       WHEN     ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) >
                                10
                            AND ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) <=
                                20
                       THEN
                           'D. 11 - 20% (Boven NORM geschreven)'
                       WHEN     ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) >
                                20
                            AND ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) <=
                                50
                       THEN
                           'E. 21 - 50% (Boven NORM geschreven)'
                       WHEN     ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) >
                                51
                            AND ROUND (
                                      (  km.kilometers
                                       - ROUND (
                                               (  cd.mld_opdruren_dagkosten_totaal
                                                + 500)
                                             / 1000))
                                    / ROUND (
                                            (  cd.mld_opdruren_dagkosten_totaal
                                             + 500)
                                          / 1000)
                                    * 100) <=
                                100
                       THEN
                           'F. 51 - 100% (Boven NORM geschreven)'
                       ELSE
                           'G. > 100 % (Boven NORM geschreven)'
                   END
               ELSE
                   'Onbekend'
           END,
           mld_opdruren_dagkosten_opm,
           CASE
               WHEN cd.mld_opdruren_dagkosten_totaal IS NULL
               THEN
                      '<a href="..\..\appl\care\care_calc_dist.asp?mld_opdr_uren_key='
                   || km.mld_opdr_uren_key
                   || '"><img src="..\..\appl\care\images\vraagje.png"></a>'
               WHEN cd.mld_opdruren_dagkosten_totaal < 0
               THEN
                      '<a href="..\..\appl\care\care_calc_dist.asp?mld_opdr_uren_key='
                   || km.mld_opdr_uren_key
                   || '"><img src="..\..\appl\care\images\foutje.png"></a>'
               ELSE
                      '<a href="'
                   || cd.mld_opdruren_dagkosten_opm
                   || '" target="_blank"><img src="..\..\appl\care\images\googlemaps.png"></a>'
           END,
           km.mld_opdr_uren_key
      FROM care_v_verzorger_km_per_dag km, care_v_opdruren_dagkosten cd
     WHERE     km.prs_perslid_key = cd.prs_perslid_key(+)
           AND km.datum = cd.mld_opdruren_dagkosten_datum(+);

-- Rapport "Ondersteuning/check t.b.v. ingevulde kilometers op de weekbrief" voor de verzorger
-- Dit rapport gaat max. 2 periodes, feitelijk 2x4=8 weken terug in de historie (tov nu)

CREATE OR REPLACE FORCE VIEW care_v_rap_my_km_per_dag
(
    fclt_3d_user_key,
    urole,
    datum,
    hide_maandag,
    fclt_f_jaar,
    fclt_f_periode,
    fclt_f_week,
    clienten,
    km,
    norm_m,
    norm_km,
    verschil,
    hide_f_staffel,
    perc,
    hide_f_percentage,
    url,
    html_berekening,
    mld_opdr_uren_key
)
AS
    SELECT hide_f_prs_perslid_key,
           'fe',
           datum,
           hide_maandag,
           fclt_f_jaar,
           fclt_f_periode,
           fclt_f_week,
           clienten,
           km,
           norm_m,
           norm_km,
           verschil,
           fclt_f_staffel,
           perc,
           fclt_f_percentage,
           url,
           html_berekening,
           mld_opdr_uren_key
      FROM care_v_rap_km_per_dag
     WHERE hide_f_datum >= SYSDATE - 2 * 4 * 7;

------------------------------------------------------
-- Kilometers met de auto gereden bij improductieve uren, zoals coordinatie en werkoverleg

CREATE OR REPLACE FORCE VIEW care_v_km_improd_dag
(
    prs_perslid_key,
    periode,
    bsn,
    nr,
    verzorger,
    adres,
    huisnr,
    postcode,
    woonplaats,
    telefoon,
    mobiel,
    email,
    auto_rijbewijs,
    kilometers,
    datum,
    jaar,
    week,
    status,
    mld_opdr_uren_key,
    improductief
)
AS
    SELECT v.prs_perslid_key,
           uur.jaar || '-' || LPAD (uur.periodenr, 2, '0'),
           v.verzorger_bsn,
           v.prs_verzorger_personeelsnr,
              v.prs_verzorger_naam
           || ','
           || v.prs_verzorger_voorletters
           || ' '
           || v.prs_verzorger_tussenvoegsel,
           v.verzorger_adres,
           v.verzorger_huisnr,
           v.verzorger_postcode,
           v.verzorger_woonplaats,
           v.verzorger_telefoon_werk,
           v.prs_verzorger_mobiel,
           v.prs_verzorger_email,
           v.auto_rijbewijs,
           ouk.mld_opdruren_kosten_besteed,
           uur.datum_gewerkt,
           uur.jaar,
           uur.weeknr,
           uur.uren_status,
           uur.mld_opdr_uren_key,
           io.mld_impropdr_omschrijving
      FROM care_v_totaal_uren_all  uur,
           care_v_verzorger        v,
           mld_opdruren_kosten     ouk,
           mld_kosten              k,
           mld_impropdr            io
     WHERE     uur.prs_perslid_key = v.prs_perslid_key
           AND uur.mld_opdr_uren_key = ouk.mld_opdr_uren_key
           AND ouk.mld_kosten_key = k.mld_kosten_key
           AND k.mld_kosten_verwijder IS NULL
           AND k.mld_kosten_code = 'A'
           AND opdracht_type = 'I'
           AND io.mld_impropdr_key = uur.opdracht_key;

CREATE OR REPLACE FORCE VIEW care_v_rap_km_impr_periode
(
    hide_f_prs_perslid_key,
    fclt_f_jaar,
    fclt_f_periode,
    fclt_f_verzorger,
    woonplaats,
    fclt_f_auto,
    km
)
AS
      SELECT km.prs_perslid_key,
             TO_CHAR (km.jaar),
             km.periode,
             MIN (km.verzorger),
             MIN (km.woonplaats),
             COALESCE (MIN (km.auto_rijbewijs), '?'),
             SUM (km.kilometers)
        FROM care_v_km_improd_dag km
    GROUP BY km.prs_perslid_key, km.jaar, km.periode;

-- matchtype = A (mAtch tussen medewerker werktijden en opdrachttijd),
--           = B (medewerker is Beschikbaar, en heeft hier geen opdracht,
--           = C (de opdrachttijd Conflicteert met de medewerker's werktijden).
-- Deel A: uitvoeringsplan valt geheel of gedeeltelijk binnen de inzetbaarheid van een persoon, opgesplits in A1 en A2:
--         A1:goede => mvan en mtot vallen binnen werktijd
--         A2:foute => mvan en/of mtot vallen/valt buiten werktijd
-- Deel B: Persoon is beschikbaar, maar er is geen uitvoeringsplan binnen zijn tijd ingepland
-- Deel C: Persoon is niet beschikbaar, maar er is wel een uitvoeringsplan op die tijd voor hem ingepland
-- Deel D: Persoon is niet ingepland en persoon heeft geen uitvoeringsplan op deze dag.

CREATE OR REPLACE FORCE VIEW care_v_capaciteitsplan
(
    prs_perslid_inzetbaar_key,
    mld_opdr_uitvoeren_key,
    prs_perslid_key,
    opdr_van,
    opdr_tot,
    pvan,
    ptot,
    opdr_vantijd,
    opdr_tottijd,
    pvantijd,
    ptottijd,
    firstvan,
    dag,
    verzorger_naam,
    client_naam,
    mld_opdr_key,
    mld_melding_key,
    mld_opdr_startdatum,
    mld_opdr_einddatum,
    mld_opdr_uitvoeren_infrequent,
    matchtype
)
AS
    SELECT DISTINCT
           pi.prs_perslid_inzetbaar_key                        inzetbaar_key,
           mu.mld_opdr_uitvoeren_key                           uitvoeren_key,
           p.prs_perslid_key                                   prs_key,
           mu.mld_opdr_uitvoeren_van                           mvan,
           mu.mld_opdr_uitvoeren_tot                           mtot,
           pi.prs_perslid_inzetbaar_van                        pvan,
           pi.prs_perslid_inzetbaar_tot                        ptot,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_van / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_van, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_van, 60)              mvantijd,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_tot / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_tot, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_tot, 60)              mtottijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_van / 60) <
                        10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_van, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_van, 60)           pvantijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_tot / 60) <
                        10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_tot, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_tot, 60)           ptottijd,
           CASE
               WHEN pi.prs_perslid_inzetbaar_van <
                    mu.mld_opdr_uitvoeren_van
               THEN
                   pi.prs_perslid_inzetbaar_van
               ELSE
                   mu.mld_opdr_uitvoeren_van
           END                                                 firstvan,
           CASE
               WHEN mu.mld_opdr_uitvoeren_dag = 0 THEN 7
               ELSE mu.mld_opdr_uitvoeren_dag
           END                                                 dag,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key)     prs_naam,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p1.prs_perslid_key)    prs_client,
           o.mld_opdr_key                                      opdr_key,
           m.mld_melding_key                                   mld_key,
           o.mld_opdr_datumbegin                               startdatum,
           o.mld_opdr_einddatum                                einddatum,
           mu.mld_opdr_uitvoeren_infrequent                    infrequent,
           'A1'                                                part
      FROM prs_perslid_inzetbaar  pi,
           prs_perslid            p,
           mld_opdr               o,
           mld_melding            m,
           prs_perslid            p1,
           mld_opdr_uitvoeren     mu
     WHERE     pi.prs_perslid_key = p.prs_perslid_key
           AND p.prs_perslid_key = o.mld_uitvoerende_keys
           AND p.prs_afdeling_key = 21 -- LET OP: Dit is de klantspecifieke afdeling "HV-medewrk"
           AND o.mld_melding_key = m.mld_melding_key
           AND m.prs_perslid_key_voor = p1.prs_perslid_key
           AND o.mld_opdr_key = mu.mld_opdr_key
           AND pi.prs_perslid_inzetbaar_dag = mu.mld_opdr_uitvoeren_dag
           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
           AND (    pi.prs_perslid_inzetbaar_van <= mu.mld_opdr_uitvoeren_van
                AND pi.prs_perslid_inzetbaar_tot >= mu.mld_opdr_uitvoeren_tot)
    UNION ALL
    SELECT DISTINCT
           pi.prs_perslid_inzetbaar_key                        inzetbaar_key,
           mu.mld_opdr_uitvoeren_key                           uitvoeren_key,
           p.prs_perslid_key                                   prs_key,
           mu.mld_opdr_uitvoeren_van                           mvan,
           mu.mld_opdr_uitvoeren_tot                           mtot,
           pi.prs_perslid_inzetbaar_van                        pvan,
           pi.prs_perslid_inzetbaar_tot                        ptot,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_van / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_van, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_van, 60)              mvantijd,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_tot / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_tot, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_tot, 60)              mtottijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_van / 60) <
                        10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_van, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_van, 60)           pvantijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_tot / 60) <
                        10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_tot, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_tot, 60)           ptottijd,
           CASE
               WHEN pi.prs_perslid_inzetbaar_van <
                    mu.mld_opdr_uitvoeren_van
               THEN
                   pi.prs_perslid_inzetbaar_van
               ELSE
                   mu.mld_opdr_uitvoeren_van
           END                                                 firstvan,
           CASE
               WHEN mu.mld_opdr_uitvoeren_dag = 0 THEN 7
               ELSE mu.mld_opdr_uitvoeren_dag
           END                                                 dag,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key)     prs_naam,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p1.prs_perslid_key)    prs_client,
           o.mld_opdr_key                                      opdr_key,
           m.mld_melding_key                                   mld_key,
           o.mld_opdr_datumbegin                               startdatum,
           o.mld_opdr_einddatum                                einddatum,
           mu.mld_opdr_uitvoeren_infrequent                    infrequent,
           'A2'                                                part
      FROM prs_perslid_inzetbaar  pi,
           prs_perslid            p,
           mld_opdr               o,
           mld_melding            m,
           prs_perslid            p1,
           mld_opdr_uitvoeren     mu
     WHERE     pi.prs_perslid_key = p.prs_perslid_key
           AND p.prs_perslid_key = o.mld_uitvoerende_keys
           AND p.prs_afdeling_key = 21 -- LET OP: Dit is de klantspecifieke afdeling "HV-medewrk"
           AND o.mld_melding_key = m.mld_melding_key
           AND m.prs_perslid_key_voor = p1.prs_perslid_key
           AND o.mld_opdr_key = mu.mld_opdr_key
           AND pi.prs_perslid_inzetbaar_dag = mu.mld_opdr_uitvoeren_dag
           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
           AND (   (    pi.prs_perslid_inzetbaar_van >
                        mu.mld_opdr_uitvoeren_van
                    AND pi.prs_perslid_inzetbaar_van <
                        mu.mld_opdr_uitvoeren_tot)
                OR (    pi.prs_perslid_inzetbaar_tot >
                        mu.mld_opdr_uitvoeren_van
                    AND pi.prs_perslid_inzetbaar_tot <
                        mu.mld_opdr_uitvoeren_tot))
    UNION ALL
    SELECT pi.prs_perslid_inzetbaar_key                       inzetbaar_key,
           NULL                                               uitvoeren_key,
           p.prs_perslid_key                                  prs_key,
           NULL                                               mvan,
           NULL                                               mtot,
           pi.prs_perslid_inzetbaar_van                       pvan,
           pi.prs_perslid_inzetbaar_tot                       ptot,
           NULL                                               mvantijd,
           NULL                                               mtottijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_van / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_van, 60) < 10 THEN '0'
                   ELSE ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_van, 60)          pvantijd,
              (CASE
                   WHEN FLOOR (pi.prs_perslid_inzetbaar_tot / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (pi.prs_perslid_inzetbaar_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (pi.prs_perslid_inzetbaar_tot, 60) < 10 THEN '0'
                   ELSE ''
               END)
           || MOD (pi.prs_perslid_inzetbaar_tot, 60)          ptottijd,
           pi.prs_perslid_inzetbaar_van                       firstvan,
           CASE
               WHEN pi.prs_perslid_inzetbaar_dag = 0 THEN 7
               ELSE pi.prs_perslid_inzetbaar_dag
           END                                                dag,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key)    prs_naam,
           NULL                                               prs_client,
           NULL                                               opdr_key,
           NULL                                               mld_key,
           NULL                                               startdatum,
           NULL                                               einddatum,
           NULL                                               infrequent,
           'B'                                                part
      FROM prs_perslid_inzetbaar pi, prs_perslid p
     WHERE     pi.prs_perslid_key = p.prs_perslid_key
           AND p.prs_afdeling_key = 21 -- LET OP: Dit is de klantspecifieke afdeling "HV-medewrk"
           AND pi.prs_perslid_inzetbaar_key NOT IN
                   (SELECT pi1.prs_perslid_inzetbaar_key
                      FROM prs_perslid_inzetbaar  pi1,
                           mld_opdr               o,
                           mld_opdr_uitvoeren     mu
                     WHERE     pi1.prs_perslid_key = o.mld_uitvoerende_keys
                           AND o.mld_opdr_key = mu.mld_opdr_key
                           AND pi1.prs_perslid_inzetbaar_dag =
                               mu.mld_opdr_uitvoeren_dag
                           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
                           AND (    pi.prs_perslid_inzetbaar_van <
                                    mu.mld_opdr_uitvoeren_tot
                                AND pi.prs_perslid_inzetbaar_tot >
                                    mu.mld_opdr_uitvoeren_van) -- Alle overlap van A1 + A2
                                                              )
    UNION ALL
    SELECT DISTINCT
           NULL                                                inzetbaar_key,
           mu.mld_opdr_uitvoeren_key                           uitvoeren_key,
           p.prs_perslid_key                                   prs_key,
           mu.mld_opdr_uitvoeren_van                           mvan,
           mu.mld_opdr_uitvoeren_tot                           mtot,
           NULL                                                pvan,
           NULL                                                ptot,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_van / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_van / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_van, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_van, 60)              mvantijd,
              (CASE
                   WHEN FLOOR (mu.mld_opdr_uitvoeren_tot / 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || FLOOR (mu.mld_opdr_uitvoeren_tot / 60)
           || ':'
           || (CASE
                   WHEN MOD (mu.mld_opdr_uitvoeren_tot, 60) < 10
                   THEN
                       '0'
                   ELSE
                       ''
               END)
           || MOD (mu.mld_opdr_uitvoeren_tot, 60)              mtottijd,
           NULL                                                pvantijd,
           NULL                                                ptottijd,
           mu.mld_opdr_uitvoeren_van                           firstvan,
           CASE
               WHEN mu.mld_opdr_uitvoeren_dag = 0 THEN 7
               ELSE mu.mld_opdr_uitvoeren_dag
           END                                                 dag,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key)     prs_naam,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p1.prs_perslid_key)    prs_client,
           o.mld_opdr_key                                      opdr_key,
           m.mld_melding_key                                   mld_key,
           o.mld_opdr_datumbegin                               startdatum,
           o.mld_opdr_einddatum                                einddatum,
           mu.mld_opdr_uitvoeren_infrequent                    infrequent,
           'C'                                                 part
      FROM prs_perslid_inzetbaar  pi,
           prs_perslid            p,
           mld_opdr               o,
           mld_melding            m,
           prs_perslid            p1,
           mld_opdr_uitvoeren     mu
     WHERE     pi.prs_perslid_key(+) = p.prs_perslid_key
           AND p.prs_perslid_key = o.mld_uitvoerende_keys
           AND p.prs_afdeling_key = 21 -- LET OP: Dit is de klantspecifieke afdeling "HV-medewrk"
           AND o.mld_melding_key = m.mld_melding_key
           AND m.prs_perslid_key_voor = p1.prs_perslid_key
           AND o.mld_opdr_key = mu.mld_opdr_key
           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
           AND mu.mld_opdr_uitvoeren_key NOT IN
                   (SELECT DISTINCT mu1.mld_opdr_uitvoeren_key
                      FROM prs_perslid_inzetbaar  pi,
                           mld_opdr               o,
                           mld_opdr_uitvoeren     mu1
                     WHERE     pi.prs_perslid_key = o.mld_uitvoerende_keys
                           AND o.mld_opdr_key = mu1.mld_opdr_key
                           AND pi.prs_perslid_inzetbaar_dag =
                               mu1.mld_opdr_uitvoeren_dag
                           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
                           AND (    pi.prs_perslid_inzetbaar_van <
                                    mu.mld_opdr_uitvoeren_tot
                                AND pi.prs_perslid_inzetbaar_tot >
                                    mu.mld_opdr_uitvoeren_van) -- Alle overlap van A1 + A2
                                                              )
    UNION ALL
    SELECT NULL
               inzetbaar_key,
           NULL
               uitvoeren_key,
           p.prs_perslid_key
               prs_key,
           NULL
               mvan,
           NULL
               mtot,
           NULL
               pvan,
           NULL
               ptot,
           NULL
               mvantijd,
           NULL
               mtottijd,
           NULL
               pvantijd,
           NULL
               ptottijd,
           NULL
               firstvan,
           CASE WHEN weekdagen.dag = 0 THEN 7 ELSE weekdagen.dag END
               dag,
           (SELECT pf.prs_perslid_naam_full
              FROM prs_v_perslid_fullnames pf
             WHERE pf.prs_perslid_key = p.prs_perslid_key)
               prs_naam,
           NULL
               prs_client,
           NULL
               opdr_key,
           NULL
               mld_key,
           NULL
               startdatum,
           NULL
               einddatum,
           NULL
               infrequent,
           'D'
               part
      FROM prs_perslid  p,
           (SELECT 0 dag FROM DUAL
            UNION ALL
            SELECT 1 dag FROM DUAL
            UNION ALL
            SELECT 2 dag FROM DUAL
            UNION ALL
            SELECT 3 dag FROM DUAL
            UNION ALL
            SELECT 4 dag FROM DUAL
            UNION ALL
            SELECT 5 dag FROM DUAL
            UNION ALL
            SELECT 6 dag FROM DUAL) weekdagen
     WHERE     p.prs_perslid_key NOT IN
                   (SELECT pi.prs_perslid_key
                      FROM prs_perslid_inzetbaar pi
                     WHERE pi.prs_perslid_inzetbaar_dag = weekdagen.dag
                    UNION
                    SELECT o.mld_uitvoerende_keys
                      FROM mld_opdr o, mld_opdr_uitvoeren mu
                     WHERE     o.mld_opdr_key = mu.mld_opdr_key
                           AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
                           AND mu.mld_opdr_uitvoeren_dag = weekdagen.dag)
           AND p.prs_afdeling_key = 21;

CREATE OR REPLACE FORCE VIEW care_v_prs_opdrachturen
(
    prs_perslid_key,
    prs_verzorger_tot_opdr_uren
)
AS
      SELECT v.prs_perslid_key, SUM (mld_opdr_uren)
        FROM care_v_verzorger v, mld_opdr o
       WHERE     v.prs_perslid_key = o.mld_uitvoerende_keys
             AND o.mld_opdr_einddatum >= TRUNC (SYSDATE)
    GROUP BY v.prs_perslid_key;

CREATE OR REPLACE FORCE VIEW care_v_rap_prs_planbord
(
    prs_perslid_inzetbaar_key,
    mld_opdr_uitvoeren_key,
    prs_perslid_key,
    opdr_van,
    opdr_tot,
    pvan,
    ptot,
    opdr_vantijd,
    opdr_tottijd,
    pvantijd,
    ptottijd,
    firstvan,
    dag,
    --fclt_f_maandag,
    --fclt_f_dinsdag,
    --fclt_f_woensdag,
    --fclt_f_donderdag,
    --fclt_f_vrijdag,
    --fclt_f_zaterdag,
    --fclt_f_zondag,
    verzorger_naam,
    fclt_f_functie,
    verzorger_dienstverband,
    verzorger_opdr_uren,
    fclt_f_besteedbaar,
    dienstverband_tot,
    fclt_f_woonplaats,
    client_naam,
    mld_opdr_key,
    mld_melding_key,
    mld_opdr_startdatum,
    mld_opdr_einddatum,
    mld_opdr_uitvoeren_infrequent,
    matchtype
)
AS
    SELECT prs_perslid_inzetbaar_key,
           mld_opdr_uitvoeren_key,
           c.prs_perslid_key,
           opdr_van,
           opdr_tot,
           pvan,
           ptot,
           opdr_vantijd,
           opdr_tottijd,
           pvantijd,
           ptottijd,
           firstvan,
           dag,
           --decode(dag,1,'Ja','Nee'),
           --decode(dag,2,'Ja','Nee'),
           --decode(dag,3,'Ja','Nee'),
           --decode(dag,4,'Ja','Nee'),
           --decode(dag,5,'Ja','Nee'),
           --decode(dag,6,'Ja','Nee'),
           --decode(dag,7,'Ja','Nee'),
           verzorger_naam,
           prs_verzorger_functie,
           prs_verzorger_dienstverband,
           prs_verzorger_tot_opdr_uren,
           CASE
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <
                    0
               THEN
                   'A. Overpland'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren =
                    0
               THEN
                   'B. Geen uren'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    1
               THEN
                   'C. Max 1 uur'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    2
               THEN
                   'D. Max 2 uur'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    3
               THEN
                   'E. Max 3 uur'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    5
               THEN
                   'F. Max 5 uur'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    10
               THEN
                   'G. Max 10 uur'
               WHEN prs_verzorger_dienstverband - prs_verzorger_tot_opdr_uren <=
                    20
               THEN
                   'H. Max 20 uur'
               ELSE
                   'I. Meer dan 20 uur'
           END,
           prs_verzorger_einddatum,
           UPPER (verzorger_woonplaats),
           client_naam,
           mld_opdr_key,
           mld_melding_key,
           mld_opdr_startdatum,
           mld_opdr_einddatum,
           mld_opdr_uitvoeren_infrequent,
           matchtype
      FROM care_v_capaciteitsplan   c,
           care_v_verzorger         v,
           care_v_prs_opdrachturen  u
     WHERE     c.prs_perslid_key = v.prs_perslid_key
           AND c.prs_perslid_key = u.prs_perslid_key(+);

CREATE OR REPLACE FORCE VIEW care_v_rap_prs_team_planbord
AS
    SELECT prs_perslid_inzetbaar_key,
           mld_opdr_uitvoeren_key,
           pb.prs_perslid_key,
           opdr_van,
           opdr_tot,
           pvan,
           ptot,
           opdr_vantijd,
           opdr_tottijd,
           pvantijd,
           ptottijd,
           firstvan,
           dag,
           --fclt_f_maandag,
           --fclt_f_dinsdag,
           --fclt_f_woensdag,
           --fclt_f_donderdag,
           --fclt_f_vrijdag,
           --fclt_f_zaterdag,
           --fclt_f_zondag,
           tl.ins_discipline_omschrijving     AS fclt_f_team,
           verzorger_naam,
           fclt_f_functie,
           verzorger_dienstverband,
           verzorger_opdr_uren,
           fclt_f_besteedbaar,
           dienstverband_tot,
           fclt_f_woonplaats,
           client_naam,
           mld_opdr_key,
           mld_melding_key,
           mld_opdr_startdatum,
           mld_opdr_einddatum,
           mld_opdr_uitvoeren_infrequent,
           matchtype
      FROM care_v_rap_prs_planbord pb, care_v_teamlid tl
     WHERE pb.prs_perslid_key = tl.prs_perslid_key;

CREATE OR REPLACE FORCE VIEW care_v_maxprs_afgemeld
AS
      SELECT m.prs_perslid_key, MAX (fac_tracking_datum) datum_uitstroom
        FROM mld_melding   m,
             mld_stdmelding std,
             mld_discipline d,
             fac_tracking  ft
       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND d.ins_srtdiscipline_key = 1                          --- zorg
             AND mld_melding_status IN (5, 6)
             AND fac_activiteit_key IS NULL
             AND ft.fac_tracking_refkey = m.mld_melding_key
             AND fac_srtnotificatie_key =
                 (SELECT fac_srtnotificatie_key
                    FROM fac_srtnotificatie
                   WHERE fac_srtnotificatie_code = 'MLDAFM')
             AND m.prs_perslid_key NOT IN
                     (SELECT prs_perslid_key
                        FROM mld_melding
                       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
                             AND std.mld_ins_discipline_key =
                                 d.ins_discipline_key
                             AND d.ins_srtdiscipline_key = 1          --- zorg
                             AND mld_melding_status IN (2,
                                                        3,
                                                        4,
                                                        7))
    GROUP BY m.prs_perslid_key;

CREATE OR REPLACE FORCE VIEW care_v_uitstroom
AS
      SELECT m.prs_perslid_key, fac_tracking_datum, reden_beeindiging
        FROM mld_melding   m,
             mld_stdmelding std,
             mld_discipline d,
             fac_tracking  ft,
             (SELECT fac_usrdata_omschr reden_beeindiging, mld_melding_key
                FROM mld_kenmerkmelding km, fac_usrdata ud
               WHERE     km.mld_kenmerk_key = 21
                     AND ud.fac_usrtab_key = 61
                     AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde)
             krb
       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND d.ins_srtdiscipline_key = 1                          --- zorg
             AND mld_melding_status IN (5, 6)
             AND fac_activiteit_key IS NULL
             AND ft.fac_tracking_refkey = m.mld_melding_key
             AND fac_srtnotificatie_key =
                 (SELECT fac_srtnotificatie_key
                    FROM fac_srtnotificatie
                   WHERE fac_srtnotificatie_code = 'MLDAFM')
             AND krb.mld_melding_key(+) = m.mld_melding_key
             AND m.prs_perslid_key NOT IN
                     (SELECT prs_perslid_key
                        FROM mld_melding
                       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
                             AND std.mld_ins_discipline_key =
                                 d.ins_discipline_key
                             AND d.ins_srtdiscipline_key = 1          --- zorg
                             AND mld_melding_status IN (2,
                                                        3,
                                                        4,
                                                        7))
    GROUP BY m.prs_perslid_key, fac_tracking_datum, reden_beeindiging;

CREATE OR REPLACE FORCE VIEW care_v_rap_in_uitstroom
(
    TYPE,
    Naam,
    Datum,
    Reden_beeindiging
)
AS
    SELECT 'Uitstroom',
           prs_perslid_naam_full     cu,
           fac_tracking_datum,
           cu.reden_beeindiging
      FROM care_v_uitstroom             cu,
           care_v_maxprs_afgemeld       mpmax,
           prs_v_perslid_fullnames_all  pf
     WHERE     mpmax.prs_perslid_key = cu.prs_perslid_key
           AND mpmax.datum_uitstroom = cu.fac_tracking_datum
           AND cu.prs_perslid_key = pf.prs_perslid_key
    UNION ALL
    SELECT 'Instroom',
           pf.prs_perslid_naam_full,
           prs_perslid_aanmaak,
           NULL     reden_uitstroom
      FROM prs_perslid p, prs_v_perslid_fullnames_all pf
     WHERE     p.prs_perslid_key = pf.prs_perslid_key
           AND prs_srtperslid_key = (SELECT prs_srtperslid_key
                                       FROM prs_srtperslid
                                      WHERE prs_srtperslid_upper = 'CLIENT');

CREATE OR REPLACE FORCE VIEW CARE_V_FACTUUR_UREN_MND
(
    FCLT_X_PERIODE,
    PERIODE,
    VAN,
    TOT,
    FACTUURNUMMER,
    WZACODE,
    FCLT_F_GEMEENTE,
    BSN_CLIENT,
    CLIENT_VOORLETTERS,
    CLIENT_TUSSENVOEGSEL,
    CLIENT_NAAM,
    CLIENT_MEISJESNAAM,
    NAAM2,
    GEBOORTEDATUM,
    CLIENT_GESLACHT,
    CLIENT_ADRES,
    CLIENT_HUISNR,
    CLIENT_POSTCODE,
    CLIENT_WOONPLAATS,
    CLIENT_TELEFOON,
    CLIENT_MOBIEL,
    CLIENT_CONTACTPERS,
    CLIENT_EMAIL,
    BIJZONDERHEDEN,
    BESCHIKKING_OMSCHR,
    BESCHIKKINGNR,
    BESCHIKKING_VAN,
    BESCHIKKING_TOT,
    INDICATIE_WEEK,
    PRODUCT,
    TARIEF,
    UREN,
    MINUTEN,
    BEDRAG_EURO
)
AS
      SELECT u.periode,
             SUBSTR (u.periode, 6, 2) || '.' || SUBSTR (u.periode, 1, 4),
             TRUNC (u.start_periode),
             TRUNC (u.einde_periode),
                SUBSTR (u.periode, 1, 4)
             || COALESCE (TO_CHAR (u.gemeente_factnr_infix),
                          u.prs_bedrijf_factnr_infix)
             || SUBSTR (u.periode, 6, 2)
             || COALESCE (TO_CHAR (u.gemeente_factnr_suffix), u.gemeente_code)
                 factuurnr,
             u.wzacode,
             u.gemeente,
             u.client_bsn,
             u.prs_client_voorletters
                 client_voorletters,
             u.prs_client_tussenvoegsel
                 client_tussenvoegsel,
             u.prs_client_naam
                 client_naam,
             u.client_meisjesnaam,
             u.naam2,
             u.client_geboortedatum,
             u.client_geslacht,
             u.client_adres,
             u.client_huisnr,
             u.client_postcode,
             u.client_woonplaats,
             u.client_telefoon_thuis,
             u.prs_client_mobiel,
             u.client_contactpersonen,
             u.prs_client_email,
             u.client_bijzonderheden,
             u.beschikking_omschr,
             u.beschikking_nr,
             u.beschikking_van,
             u.beschikking_tot,
             u.uren_beschikking
                 ind_uren_week,
             u.product,
             u.tarief,
             SUM (u.uren_besteed)
                 totaal_periode,
             (SUM (u.uren_besteed)) * 60,
             SUM (u.uren_besteed) * u.tarief
                 bedrag_euro
        FROM (SELECT    EXTRACT (YEAR FROM uur.start_periode)
                     || '-'
                     || LPAD (EXTRACT (MONTH FROM uur.start_periode), 2, '0')
                         periode,
                     uur.start_periode,
                     uur.einde_periode,
                     pb.prs_leverancier_nr
                         wzacode,
                     pb.prs_bedrijf_telefoon2
                         prs_bedrijf_factnr_infix,
                     b.gemeente_omschrijving
                         gemeente,
                     b.gemeente_code,
                     b.gemeente_factnr_infix,
                     b.gemeente_factnr_suffix,
                     b.client_bsn,
                     DECODE (ud.fac_usrdata_omschr,
                             1, b.prs_client_nr,
                             b.prs_client_key),
                     b.prs_client_voorletters,
                     b.prs_client_tussenvoegsel,
                     b.prs_client_naam,
                     b.client_meisjesnaam,
                        b.prs_client_voorletters
                     || ' '
                     || b.prs_client_tussenvoegsel
                     || ' '
                     || b.prs_client_naam
                         naam2,
                     b.client_mv
                         client_geslacht,
                     b.client_geboortedatum,
                     b.client_adres,
                     b.client_huisnr,
                     b.client_postcode,
                     b.client_woonplaats,
                     b.client_telefoon_thuis,
                     b.prs_client_mobiel,
                     b.client_contactpersonen,
                     b.prs_client_email,
                     b.client_bijzonderheden,
                     b.beschikking_omschr,
                     b.beschikking_nr,
                     TRUNC (b.beschikking_datum_van)
                         beschikking_van,
                     TRUNC (b.beschikking_datum_tot)
                         beschikking_tot,
                     b.uren_beschikking,
                     b.product,
                     CASE
                         WHEN b.pgb = 1 THEN b.pgb_tarief
                         WHEN b.gemeente_veiling = 1 THEN b.pgb_tarief
                         ELSE gt.tarief
                     END
                         tarief,
                     uur.datum_gewerkt,
                     uur.uren_besteed
                FROM care_v_beschikking_all  b,
                     (SELECT o.mld_melding_key,
                             o.mld_opdr_key,
                             o.mld_opdr_datumbegin,
                             TRUNC (o.mld_opdr_einddatum)
                                 einddatum,
                             o.mld_opdr_uren
                                 uren_opdracht,
                             ou.mld_opdr_uren_datum
                                 datum_gewerkt,
                             ou.mld_opdr_uren_besteed
                                 uren_besteed,
                             TRUNC (ou.mld_opdr_uren_datum, 'Month')
                                 start_periode,
                             LAST_DAY (TRUNC (ou.mld_opdr_uren_datum, 'Month'))
                                 einde_periode
                        FROM mld_opdr o, mld_opdr_uren ou
                       WHERE     ou.mld_opdr_key = o.mld_opdr_key
                             AND ou.mld_opdr_uren_status = 3) uur,
                     prs_bedrijf             pb,
                     fac_usrdata             ud,
                     care_v_gemeente_tarieven gt
               WHERE     uur.mld_melding_key = b.mld_melding_key
                     AND pb.prs_bedrijf_key = 2
                     AND ud.fac_usrdata_key = 48
                     AND gt.alg_locatie_key = b.gemeente_key
                     AND gt.product_code = b.product_code
                     AND b.pgb IS NULL
                     AND COALESCE (gt.duedatum, SYSDATE) =
                         (SELECT COALESCE (MIN (gt2.duedatum), SYSDATE)
                            FROM care_v_gemeente_tarieven gt2
                           WHERE     COALESCE (gt2.duedatum, SYSDATE + 999) >=
                                     uur.datum_gewerkt
                                 AND gt2.alg_locatie_key = b.gemeente_key
                                 AND gt2.product_code = b.product_code)) u,
             (    SELECT    (TO_CHAR (
                                 TO_DATE (
                                     TRUNC (
                                         TRUNC (ADD_MONTHS (SYSDATE, LEVEL * -1)),
                                         'Month')),
                                 'YYYY'))
                         || '-'
                         || (TO_CHAR (
                                 TO_DATE (
                                     TRUNC (
                                         TRUNC (ADD_MONTHS (SYSDATE, LEVEL * -1)),
                                         'MM')),
                                 'MM'))    periode
                    FROM DUAL
              CONNECT BY LEVEL <= 1 * 12) p
       WHERE u.PERIODE = p.periode
    GROUP BY u.periode,
             u.start_periode,
             u.einde_periode,
             u.gemeente_factnr_infix,
             u.prs_bedrijf_factnr_infix,
             u.gemeente_factnr_suffix,
             u.gemeente_code,
             u.wzacode,
             u.gemeente,
             u.client_bsn,
             u.prs_client_voorletters,
             u.prs_client_tussenvoegsel,
             u.prs_client_naam,
             u.client_meisjesnaam,
             u.naam2,
             u.client_geboortedatum,
             u.client_geslacht,
             u.client_adres,
             u.client_huisnr,
             u.client_postcode,
             u.client_woonplaats,
             u.client_telefoon_thuis,
             u.prs_client_mobiel,
             u.client_contactpersonen,
             u.prs_client_email,
             u.client_bijzonderheden,
             u.beschikking_omschr,
             u.beschikking_nr,
             u.beschikking_van,
             u.beschikking_tot,
             u.uren_beschikking,
             u.product,
             u.tarief
    ORDER BY u.gemeente, u.periode DESC;

CREATE OR REPLACE FORCE VIEW CARE_V_REISTIJDEN_ALL
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_NAAM,
    PRS_PERSLID_TUSSENVOEGSEL,
    PRS_PERSLID_VOORLETTERS,
    PRS_PERSLID_VOORNAAM,
    BSN,
    NR_VERZORGER,
    MEISJESNAAM,
    GEBOORTEDATUM,
    ADRES,
    POSTCODE,
    TELEFOON_THUIS,
    TELEFOON_WERK,
    PRS_PERSLID_MOBIEL,
    PRS_PERSLID_EMAIL,
    PRS_PERSLID_DIENSTVERBAND,
    JAAR,
    WEEKNR,
    PERIODENR,
    PERIODE,
    MAANDAG_VANDEWEEK,
    DATUM_GEWERKT,
    INTERKM,
    INTERM,
    KOSTEN_CODE,
    KOSTEN_OMSCHRIJVING,
    UREN_STATUS
)
AS
    SELECT DISTINCT
           verzorger.prs_perslid_key,
           verzorger.prs_perslid_naam,
           verzorger.prs_perslid_tussenvoegsel,
           verzorger.prs_perslid_voorletters,
           verzorger.prs_perslid_voornaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1020)
               bsn,
           verzorger.prs_perslid_nr
               nr_verzorger,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1001)
               meisjesnaam,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1002)
               geboortedatum,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1003)
               adres,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1004)
               postcode,
           (SELECT kl.prs_kenmerklink_waarde
              FROM prs_kenmerklink kl
             WHERE     kl.prs_link_key = verzorger.prs_perslid_key
                   AND kl.prs_kenmerklink_niveau = 'P'
                   AND kl.prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1006)
               telefoon_thuis,
           verzorger.prs_perslid_telefoonnr
               telefoon_werk,
           verzorger.prs_perslid_mobiel,
           verzorger.prs_perslid_email,
           verzorger.prs_perslid_dienstverband,
           TO_NUMBER (
               TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY'))
               jaar,
           TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW'))
               weeknr,
           LEAST (
                 FLOOR (
                       (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IW') - 1)
                     / 4)
               + 1,
               13)
               periodenr,
              TO_NUMBER (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'IYYY'))
           || '-'
           || LPAD (
                  LEAST (
                        FLOOR (
                              (  TO_CHAR (dk.mld_opdruren_dagkosten_datum,
                                          'IW')
                               - 1)
                            / 4)
                      + 1,
                      13),
                  2,
                  '0')
               periode,
           (  TRUNC (dk.mld_opdruren_dagkosten_datum)
            - DECODE (TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'D'),
                      '1', 8,
                      TO_CHAR (dk.mld_opdruren_dagkosten_datum, 'D'))
            + 2)
               maandag_vandeweek,
           dk.mld_opdruren_dagkosten_datum
               datum_gewerkt,
           dk.interkm / 1000,
           dk.interkm,
           'T'
               kosten_code,
           'Reistijd'
               kosten_omschrijving,
           ou.mld_opdr_uren_status
               uren_status
      FROM prs_perslid                verzorger,
           care_v_opdruren_dagkosten  dk,
           mld_opdr_uren              ou,
           mld_opdruren_kosten        ok
     WHERE     dk.prs_perslid_key = verzorger.prs_perslid_key
           AND ou.prs_perslid_key = dk.prs_perslid_key
           AND ou.mld_opdr_uren_datum = dk.mld_opdruren_dagkosten_datum
           AND ok.mld_opdr_uren_key = ou.mld_opdr_uren_key
           AND dk.interkm > 0;

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

CREATE OR REPLACE PACKAGE care
AS
    TYPE t_cursor IS REF CURSOR;

    FUNCTION goodmonday_start (p_mld_key IN NUMBER)
        RETURN DATE;

    FUNCTION goodmonday_end (p_mld_key IN NUMBER)
        RETURN DATE;

    PROCEDURE care_v_rap2_factuur_uren_a (
        user_key      IN     NUMBER,
        p_datum_van   IN     VARCHAR2,
        p_datum_tot   IN     VARCHAR2,
        p_cursor         OUT t_cursor,
        p_where       IN     VARCHAR2 DEFAULT NULL);

    PROCEDURE care_v_rap2_factuur_uren_e (
        user_key      IN     NUMBER,
        p_datum_van   IN     VARCHAR2,
        p_datum_tot   IN     VARCHAR2,
        p_cursor         OUT t_cursor,
        p_where       IN     VARCHAR2 DEFAULT NULL);
END care;
/

CREATE OR REPLACE PACKAGE BODY care
AS
    FUNCTION goodmonday_start (p_mld_key IN NUMBER)
        RETURN DATE
    IS
        -- Herindicaties/vorige indicaties van dezelfde client die in dezelfde week start/eindigt.
        l_mld_key       NUMBER (10);
        l_good_monday   DATE;
    BEGIN
        --- Vorige beschikking: bij herindicatie midden in de week is 1 van beide beschikkingen geldig
        --- Herindicatie midden in de week wordt gekenmerkt door:
        --- dezelfde client, dezelfde gemeente, eindweek van de vorige is gelijk aan beginweek van herindicatie,
        --- en het maakt niet uit wat de product is/wordt.
        --- Baas' van dubbele beschikking is diegene met de meeste aantal uren, ongeacht HV1->HV2 overgang.
        --- Bij gelijke aantal uren is de nieuwe beschikking de baas.
        -- Selecteer de vorige beschikking b1 van de beschikking b2 die meer uren heeft.
        SELECT MAX (b1.mld_melding_key)
          INTO l_mld_key
          FROM care_v_beschikking_all b1, care_v_beschikking_all b2
         WHERE     b2.mld_melding_key = p_mld_key
               AND b1.mld_melding_key <> b2.mld_melding_key
               AND b1.mld_melding_status <> 1
               AND b1.beschikking_week_tot = b2.beschikking_week_van
               AND b1.beschikking_jaar_tot = b2.beschikking_jaar_van
               AND b1.prs_client_key = b2.prs_client_key
               AND b1.gemeente_code = b2.gemeente_code
               AND b1.uren_beschikking > b2.uren_beschikking;

        IF l_mld_key IS NOT NULL
        THEN
            -- Er is een vorige indicatie met meer uren, die is de 'baas'.
            -- Dat betekent dat de goede maandag van de beschikking b2 verder, naar de volgende week wordt gezet
            -- (ipv standaard op maandag deze week)
            SELECT (  TRUNC (mld_melding_datum)
                    + 7
                    - DECODE (TO_CHAR (mld_melding_datum, 'D'),
                              '1', 8,
                              TO_CHAR (mld_melding_datum, 'D'))
                    + 2)
              INTO l_good_monday
              FROM mld_melding
             WHERE mld_melding_key = p_mld_key;
        ELSE
            -- Er is GEEN vorige indicatie bestaat of GEEN vorige indicatie met MEER uren, dus deze is de 'baas'.
            -- Dat betekent dat de goede maandag van de beschikking b2 standaard op maandag deze week komt te staan.
            SELECT (  TRUNC (mld_melding_datum)
                    - DECODE (TO_CHAR (mld_melding_datum, 'D'),
                              '1', 8,
                              TO_CHAR (mld_melding_datum, 'D'))
                    + 2)
              INTO l_good_monday
              FROM mld_melding
             WHERE mld_melding_key = p_mld_key;
        END IF;

        RETURN l_good_monday;
    END;

    FUNCTION goodmonday_end (p_mld_key IN NUMBER)
        RETURN DATE
    IS
        -- Herindicaties/vorige indicaties van dezelfde client die in dezelfde week start/eindigt.
        l_mld_key       NUMBER (10);
        l_good_monday   DATE;
    BEGIN
        --- Volgende beschikking: bij herindicatie midden in de week is 1 van beide beschikkingen geldig
        --- Herindicatie midden in de week wordt gekenmerkt door:
        --- dezelfde client, dezelfde gemeente, eindjaar/week van de vorige is gelijk aan beginjaar/week van herindicatie,
        --- en het maakt niet uit wat de product is/wordt.
        --- Baas' van dubbele beschikking is diegene met de meeste aantal uren, ongeacht HV1->HV2 overgang.
        --- Bij gelijke aantal uren is de nieuwe beschikking de baas.
        -- Controleer of die er is, en zo ja, selecteer de volgende beschikking b2 van de beschikking b1 die MEER
        -- of GELIJK AANTAL uren heeft.
        SELECT MAX (b2.mld_melding_key)
          INTO l_mld_key
          FROM care_v_beschikking_all b1, care_v_beschikking_all b2
         WHERE     b1.mld_melding_key = p_mld_key
               AND b1.mld_melding_key <> b2.mld_melding_key
               AND b2.mld_melding_status <> 1
               AND b1.beschikking_week_tot = b2.beschikking_week_van
               AND b1.beschikking_jaar_tot = b2.beschikking_jaar_van
               AND b1.prs_client_key = b2.prs_client_key
               AND b1.gemeente_code = b2.gemeente_code
               AND b2.uren_beschikking >= b1.uren_beschikking;

        IF l_mld_key IS NOT NULL
        THEN
            -- Er is een volgende indicatie b2 met MEER of GELIJK AANTAL uren, die is de 'baas' is.
            -- Dat betekent dat de goede maandag van de beschikking b2 op de maandag van deze week wordt gezet
            -- (ipv standaard op maandag de volgende week)
            SELECT (  TRUNC (mld_melding_einddatum)
                    - DECODE (TO_CHAR (mld_melding_einddatum, 'D'),
                              '1', 8,
                              TO_CHAR (mld_melding_einddatum, 'D'))
                    + 2)
              INTO l_good_monday
              FROM mld_melding
             WHERE mld_melding_key = p_mld_key;
        ELSE
            -- Er is GEEN volgende indicatie is of GEEN volgende indicatie met MEER of GELIJK AANTAL uren, dus deze is de 'baas'.
            -- Dat betekent dat de goede maandag van de beschikking b2 standaard op maandag van de volgende week komt te staan.
            SELECT (  TRUNC (mld_melding_einddatum)
                    + 7
                    - DECODE (TO_CHAR (mld_melding_einddatum, 'D'),
                              '1', 8,
                              TO_CHAR (mld_melding_einddatum, 'D'))
                    + 2)
              INTO l_good_monday
              FROM mld_melding
             WHERE mld_melding_key = p_mld_key;
        END IF;

        RETURN l_good_monday;
    END;

    PROCEDURE care_v_rap2_factuur_uren_a (
        user_key      IN     NUMBER,
        p_datum_van   IN     VARCHAR2,
        p_datum_tot   IN     VARCHAR2,
        p_cursor         OUT t_cursor,
        p_where       IN     VARCHAR2 DEFAULT NULL)
    AS
        v_datum_van   DATE;
        v_datum_tot   DATE;
    BEGIN
        DELETE FROM care_periode;

        INSERT INTO care_periode (jaar,
                                  periode,
                                  week,
                                  maandag)
                SELECT TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IYYY')    jaar,
                       LEAST (
                             FLOOR (
                                   (TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW') - 1)
                                 / 4)
                           + 1,
                           13)                                        periode,
                       TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW')      week,
                       TRUNC (SYSDATE - 7 * (LEVEL - 1), 'IW')        startdatum
                  FROM DUAL
            CONNECT BY LEVEL <= 1 * 52 + 1;

        DELETE FROM CARE_T_BESCHIKK_X_PERIODETABEL;

        INSERT INTO CARE_T_BESCHIKK_X_PERIODETABEL (JAAR,
                                                    PERIODE,
                                                    WEEK_VAN,
                                                    WEEK_TM,
                                                    BSN,
                                                    PRODUCT,
                                                    UREN_BESCHIKKING)
              SELECT pw.jaar,
                     pw.periode,
                     MIN (week),
                     MAX (week),
                     b.client_bsn,
                     b.product,
                     SUM (b.uren_beschikking)
                FROM care_periode pw, care_v_beschikking_all b
               WHERE     pw.maandag >= B.BESCHIKKING_MAANDAG_VAN
                     AND pw.maandag < B.BESCHIKKING_MAANDAG_TOT
                     AND b.beschikking_datum_tot >= SYSDATE - 53 * 7
            GROUP BY pw.jaar,
                     pw.periode,
                     b.client_bsn,
                     b.product;

        OPEN p_cursor FOR 'SELECT
               fclt_f_periode,
               factuurdatum,
               wzacode,
               fclt_f_gemeente,
               beschikkingsnr,
               bsn_client,
               client,
               geboortedatum,
               uren_periode,
               indicatie_uren,
               product,
               tarief,
               uren,
               minuten,
               bedrag_euro,
               bedrag_centen
             FROM care_v_rap2_factuur_uren_a' || p_where;
    END care_v_rap2_factuur_uren_a;

    PROCEDURE care_v_rap2_factuur_uren_e (
        user_key      IN     NUMBER,
        p_datum_van   IN     VARCHAR2,
        p_datum_tot   IN     VARCHAR2,
        p_cursor         OUT t_cursor,
        p_where       IN     VARCHAR2 DEFAULT NULL)
    AS
        v_datum_van   DATE;
        v_datum_tot   DATE;
    BEGIN
        DELETE FROM care_periode;

        INSERT INTO care_periode (jaar,
                                  periode,
                                  week,
                                  maandag)
                SELECT TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IYYY')    jaar,
                       LEAST (
                             FLOOR (
                                   (TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW') - 1)
                                 / 4)
                           + 1,
                           13)                                        periode,
                       TO_CHAR (SYSDATE - 7 * (LEVEL - 1), 'IW')      week,
                       TRUNC (SYSDATE - 7 * (LEVEL - 1), 'IW')        startdatum
                  FROM DUAL
            CONNECT BY LEVEL <= 1 * 52 + 1;

        DELETE FROM CARE_T_BESCHIKK_X_PERIODETABEL;

        INSERT INTO CARE_T_BESCHIKK_X_PERIODETABEL (JAAR,
                                                    PERIODE,
                                                    WEEK_VAN,
                                                    WEEK_TM,
                                                    BSN,
                                                    PRODUCT,
                                                    UREN_BESCHIKKING)
              SELECT pw.jaar,
                     pw.periode,
                     MIN (week),
                     MAX (week),
                     b.client_bsn,
                     b.product,
                     SUM (b.uren_beschikking)
                FROM care_periode pw, care_v_beschikking_all b
               WHERE     pw.maandag >= B.BESCHIKKING_MAANDAG_VAN
                     AND pw.maandag < B.BESCHIKKING_MAANDAG_TOT
                     AND b.beschikking_datum_tot >= SYSDATE - 53 * 7
            GROUP BY pw.jaar,
                     pw.periode,
                     b.client_bsn,
                     b.product;

        OPEN p_cursor FOR 'SELECT
               fclt_x_periode,
               periode,
               weeknrs,
               factuurnummer,
               wzacode,
               fclt_f_gemeente,
               bsn_client,
               client,
               geboortedatum,
               uren_periode,
               indicatie_uren,
               product,
               tarief,
               uren,
               bedrag_euro
             FROM care_v_rap2_factuur_uren_e' || p_where;
    END care_v_rap2_factuur_uren_e;
END care;
/


------ 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