#ifdef CARE
/* CARE_VIE.SRC
 * $Revision$
 * $Id$
 */




/* Formatted on 6-9-2010 18:29:56 (QP5 v5.136.908.31019) */
CREATE_VIEW( care_v_gemeente, 0)
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_VIEW( care_v_gemeente_tarieven, 0)
(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_VIEW( care_v_client, 0)
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_VIEW( care_v_cak_clientcontrole, 0)
(
   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_VIEW( care_v_teamleider, 0)
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_VIEW( care_v_teamlid, 0)
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_VIEW( care_v_actief_teamlid, 0)
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_VIEW( care_v_verzorger, 0)
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_VIEW( care_v_verzorger_in_teams, 0)
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_VIEW( care_v_controller, 0)
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_VIEW( care_v_beschikking_all, 0)
(
   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
)
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
     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_VIEW( care_v_bestede_uren_all, 0)
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_VIEW( care_v_improductieve_uren_all, 0)
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_VIEW( care_v_totaal_uren_all, 0)
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_VIEW( care_v_missing_weekbrief_0, 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_VIEW( care_v_missing_weekbrief_1, 0)
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_VIEW( care_v_missing_weekbrief_2, 0)
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_VIEW( care_v_missing_weekbrief_3, 0)
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_VIEW( care_v_missing_weekbrief_4, 0)
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_VIEW( care_v_missing_weekbrief_5, 0)
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_VIEW( care_v_missing_weekbrief_6, 0)
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_VIEW( care_v_missing_weekbrief_all, 0)
(
   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_VIEW( care_v_ingevoerde_uren, 0)
AS
   SELECT   *
     FROM   care_v_totaal_uren_all
    WHERE   uren_status = 1;



CREATE_VIEW( care_v_te_fiatteren_uren, 0)
AS
   SELECT   *
     FROM   care_v_totaal_uren_all
    WHERE   uren_status = 2;



CREATE_VIEW( care_v_te_factureren_uren, 0)
AS
   SELECT   *
     FROM   care_v_bestede_uren_all
    WHERE   uren_status = 3;

CREATE_VIEW( care_v_first_factuur_uren_ooit, 0)
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_VIEW( care_v_te_fiatfact_uren, 0)
AS
   SELECT   *
     FROM   care_v_bestede_uren_all
    WHERE   uren_status = 2 OR uren_status = 3;


CREATE_VIEW( care_v_gefactureerde_uren, 0)
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_VIEW( care_v_gemaakte_uren_0, 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_VIEW( care_v_gemaakte_uren_1, 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 - 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_VIEW( care_v_gemaakte_uren_2, 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 - 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_VIEW( care_v_gemaakte_uren_12 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_gemaakte_uren_3, 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 - 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_VIEW( care_v_gemaakte_uren_123 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_gemaakte_uren_4, 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 - 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_VIEW( care_v_gemaakte_uren_1234 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_gemaakte_uren_5, 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 - 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_VIEW( care_v_gemaakte_uren_2345 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_gemaakte_uren_6, 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 - 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_VIEW( care_v_gemaakte_uren_3456 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_gemaakte_uren_7, 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 - 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_VIEW( care_v_gemaakte_uren_4567 (mld_melding_key, uren_besteed), 0)
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_VIEW( care_v_indicatie_uren_1234 (mld_melding_key, uren_beschikking), 0)
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_VIEW( care_v_indicatie_uren_2345 (mld_melding_key, uren_beschikking), 0)
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_VIEW( care_v_indicatie_uren_3456 (mld_melding_key, uren_beschikking), 0)
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_VIEW( care_v_indicatie_uren_4567 (mld_melding_key, uren_beschikking), 0)
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_VIEW( care_v_conflict_uren_1234, 0)
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_VIEW( care_v_conflict_uren_2345, 0)
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_VIEW( care_v_conflict_uren_3456, 0)
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_VIEW( care_v_conflict_uren_4567, 0)
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_VIEW( care_v_tmp_conflict_uren_1234, 0)
(
   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_VIEW( care_v_rap_conflict_uren_1234a, 0)
(
   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_VIEW( care_v_rap_conflict_uren_1234b, 0)
(
   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_VIEW( care_v_rap_conflict_uren_1234c, 0)
(
   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_VIEW( care_v_tmp_conflict_uren_2345, 0)
(
   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_VIEW( care_v_rap_conflict_uren_2345a, 0)
(
   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_VIEW( care_v_rap_conflict_uren_2345b, 0)
(
   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_VIEW( care_v_rap_conflict_uren_2345c, 0)
(
   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_VIEW( care_v_tmp_conflict_uren_3456, 0)
(
   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_VIEW( care_v_rap_conflict_uren_3456a, 0)
(
   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_VIEW( care_v_rap_conflict_uren_3456b, 0)
(
   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_VIEW( care_v_rap_conflict_uren_3456c, 0)
(
   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_VIEW( care_v_tmp_conflict_uren_4567, 0)
(
   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_VIEW( care_v_rap_conflict_uren_4567a, 0)
(
   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_VIEW( care_v_rap_conflict_uren_4567b, 0)
(
   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_VIEW( care_v_rap_conflict_uren_4567c, 0)
(
   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_VIEW( care_v_noti_teamleider, 0)
(
   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_VIEW( care_v_mld_match_opd, 0)
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_VIEW( care_v_mld_urenconflict_opd, 0)
AS
   SELECT   *
     FROM   care_v_mld_match_opd mmo
    WHERE   mmo.uren_beschikking <> mmo.uren_opdracht;



CREATE_VIEW( care_v_noti_urenconflict, 0)
(
   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_VIEW( care_v_onkosten_all, 0)
(
   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_VIEW( care_v_rap_mijnteamgenoten, 0)
(
   fclt_3d_discipline_key,
   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_VIEW( care_v_rap_personeel, 0)
(
	 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_VIEW( care_v_rap_missing_weekbrief, 0)
(
   fclt_f_weeknr,
   fclt_f_team,
   fclt_3d_discipline_key,
   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_VIEW( care_v_rap_clienten, 0)
(
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 tot max. 8 weken in de toekomst (beschikking_datum_tot >= SYSDATE AND
-- beschikking_datum_tot <= SYSDATE + 8*7 ) die op aflopen staan.

CREATE_VIEW( care_v_rap_beschik_aflopend, 0)
(
   hide_f_einddatum,
   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,
            TO_CHAR (beschikking_datum_tot, 'DD-MM-YYYY'),
            TO_CHAR (FLOOR (beschikking_datum_tot - SYSDATE + 1)),
            TO_CHAR (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 beschikking_datum_tot <= SYSDATE + 8 * 7
      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_VIEW( care_v_rap_conflict_uren_a, 0)
(
   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_VIEW( care_v_rap_conflict_uren_b, 0)
(
   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_VIEW( care_v_rap_conflict_uren_c, 0)
(
   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_VIEW(care_v_periodeweektabel_2jaar, 0)
(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_VIEW(care_v_periodetabel_2jaar, 0)
(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_VIEW(care_v_periodeweektabel, 0)
(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_VIEW(care_v_periodetabel, 0)
(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_VIEW( care_v_tmp2_factuur_uren, 0)
(
   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,
   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,
            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_VIEW(care_v_gemeente_fact2_uren, 0)
AS
   SELECT * FROM care_v_tmp2_factuur_uren
   WHERE pgb IS NULL;

CREATE_VIEW(care_v_pgb_fact2_uren, 0)
AS
   SELECT * FROM care_v_tmp2_factuur_uren
   WHERE pgb = 1;



CREATE_VIEW( care_v_rap2_factuur_voorblad_a, 0)
(
					 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_VIEW( care_v_rap2_factuur_pgb_a, 0)
(
					 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_VIEW( care_v_rap2_factuur_uren_a, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_a2, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_b, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_c, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_d, 0)
(
	 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_VIEW( care_v_rap2_factuur_uren_e, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_f, 0)
(
	 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_VIEW( care_v_rap2_factuur_uren_g, 0)
(
	 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_VIEW( care_v_rap2_factuur_uren_i, 0)
(	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_VIEW( care_v_rap2_factuur_uren_j, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_k, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_l, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_m, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_n, 0)
(
	 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_VIEW( care_v_rap2_factuur_uren_o, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_p, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_r, 0)
(
   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_VIEW( care_v_rap_tot_clientzorg, 0)
(
   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_VIEW( care_v_rap_tot_clientzorg_mdw, 0)
(
   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_VIEW( care_v_rap_tot_clientzorg_all, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_q, 0)
(
   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_VIEW( care_v_rap2_factuur_uren_iwmo, 0)
(
	 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_VIEW( care_v_onkosten2_all, 0)
(
   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;



CREATE_VIEW( care_v_tmp2_auto (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, woonwerk_km, rest_km, datum), 0)
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_VIEW( care_v_rap2_auto (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, woonwerk_km, rest_km), 0)
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;


-- 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_VIEW( care_v_rap2_fiets (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, mld_opdruren_kosten_besteed), 0)
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_VIEW( care_v_rap2_bromfiets (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, mld_opdruren_kosten_besteed), 0)
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_VIEW( care_v_tmp2_impr_uren, 0)
(
   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_VIEW( care_v_gewerkte_impr2_uren (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, mld_impropdr_key, week_uren_besteed, datum), 0)
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_VIEW( care_v_gekeurde_ziek2_uren (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, ziekte_uren, dagen), 0)
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_VIEW( care_v_gekeurde_vrij2_uren (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, verlof_uren, dagen), 0)
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_VIEW( care_v_rap2_salaris (periode, bsn_verzorger, nr_verzorger, verzorger, prs_perslid_dienstverband, week_uren_besteed, datum), 0)
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_VIEW( care_v_periode_x_salaris, 0)
(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_VIEW( care_v_periode_x_ziek, 0)
(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_VIEW( care_v_periode_x_vrij, 0)
(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_VIEW( care_v_periode_x_auto, 0)
(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_VIEW( care_v_periode_x_fiets, 0)
(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_VIEW( care_v_periode_x_bromfiets, 0)
(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_VIEW( care_v_salaris_all, 0)
(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_VIEW( care_v_rap2_salaris_a, 0)
(
   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_VIEW(care_v_rap2_salaris_b, 0)
(
   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;

-- 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_VIEW(care_v_rap_salaris_b, 0)
AS
SELECT * FROM care_v_rap2_salaris_b;



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


CREATE_VIEW( care_v_cak2_factuur_uren_b, 0)
(
   fclt_f_periode,
   eerste_datum_periode_gewerkt,
   factuurdatum,
   wzacode,
   fclt_f_gemeente,
   gemeente_ob,
   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),
              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_VIEW( care_v_cak_choose_periode, 0)
(
   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_VIEW( care_v_cak_hoofd_record, 0)
(
   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_VIEW( care_v_cak_zorg_pre_record, 0)
(
   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',  ud1.fac_usrdata_omschr), 'HV2', DECODE( gemeente_ob, 1, '429',  ud2.fac_usrdata_omschr), 'HV3', DECODE( gemeente_ob, 1, '430',  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_VIEW( care_v_cak_client_zorg_record, 0)
(
   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_VIEW(care_v_cak_changed_zorg_record, 0)
(
   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_VIEW( care_v_cak_clientstam_record, 0)
(
   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_VIEW( care_v_cak_clientaanv_record, 0)
(
   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_VIEW( care_v_cak_c_clientstam_record, 0)
(
   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_VIEW( care_v_cak_c_clientaanv_record, 0)
(
   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_VIEW( care_v_cak_body (fclt_f_periode, hele_uren, minuten, txt), 0)
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_VIEW( care_v_cak_changed_body (fclt_f_periode, hele_uren, minuten, txt), 0)
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_VIEW( care_v_cak_sluit_record, 0)
(
   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_VIEW( care_v_cak_sluit2_record, 0)
(
   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_VIEW( care_v_cak_rapport (fclt_f_periode, fclt_f_record, txt), 0)
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_VIEW( care_v_cak_changed_rapport (fclt_f_periode, fclt_f_record, txt), 0)
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_VIEW( care_v_rap_cak (periode, gekozen), 0)
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_VIEW( care_v_rap_cak_chg (periode, gekozen), 0)
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_VIEW( care_v_export_cak (result, result_order), 0)
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_VIEW( care_v_export_cak_chg (result, result_order), 0)
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_VIEW(care_v_qvw_periodeweektabel, 0)
(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_VIEW( care_v_qvw_first_gewerkte_uren, 0)
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_VIEW( care_v_qvw_beschikk, 0)
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;



/*
Hieronder staat versie 1 van care_v_qvw_gemeente_tarieven, a.g.v. performance is versie 2 gemaakt die compacter is (en Oracle beter mee om zou kunnen gaan)
CREATE_VIEW( care_v_qvw_gemeente_tarieven, 0)
(alg_locatie_key, alg_locatie_code, product_code, product, tarief, vandatum, tmdatum)
AS
SELECT  l.alg_locatie_key,
        l.alg_locatie_code,
        gt.product_code,
        ud.fac_usrdata_code,
        gt.tarief,
        gt2.duedatum + 1,
        COALESCE(gt.duedatum, TO_DATE('31-12-2099','DD-MM-YYYY'))
FROM  care_v_gemeente_tarieven gt, alg_locatie l, fac_usrdata ud, care_v_gemeente_tarieven gt2
WHERE l.alg_locatie_key = gt.alg_locatie_key (+)
AND   l.alg_locatie_verwijder IS NULL
AND   ud.fac_usrdata_key = gt.product_code
AND   gt2.alg_locatie_key = gt.alg_locatie_key
AND   gt2.product_code = gt.product_code
AND   gt2.duedatum =      (SELECT MAX (gt3.duedatum)
                            FROM care_v_gemeente_tarieven gt3
                            WHERE COALESCE(gt3.duedatum,SYSDATE+9999) < COALESCE(gt.duedatum,SYSDATE+9999)
                            AND   gt3.alg_locatie_key = gt.alg_locatie_key
                            AND   gt3.product_code = gt.product_code
                           )
UNION ALL
SELECT  l.alg_locatie_key,
        l.alg_locatie_code,
        gt.product_code,
        ud.fac_usrdata_code,
        gt.tarief,
        TO_DATE('01-01-2010','DD-MM-YYYY'),
        COALESCE(gt.duedatum, TO_DATE('31-12-2099','DD-MM-YYYY'))
FROM  care_v_gemeente_tarieven gt, alg_locatie l, fac_usrdata ud
WHERE l.alg_locatie_key = gt.alg_locatie_key (+)
AND   l.alg_locatie_verwijder IS NULL
AND   ud.fac_usrdata_key = gt.product_code
AND COALESCE(gt.duedatum,SYSDATE)=  (SELECT COALESCE(MIN (gt2.duedatum),SYSDATE)
                            FROM care_v_gemeente_tarieven gt2
                            WHERE gt2.alg_locatie_key = gt.alg_locatie_key
                            AND   gt2.product_code = gt.product_code
                           );
*/


CREATE_VIEW( care_v_qvw_gemeente_tarieven, 0)
(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_VIEW( care_v_qvw_tarieven_per_week, 0)
(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;


//Hier de 1e filtering op maandag_std (anders krijgen we veel te veel records), maar wel -7 en + 7 om extra ruim te zitten...
//in qlikview (qvs) gaan we nauwkeuriger op de "good_monday" filereren (anders hier een performance-probleem ivm functie goodmay en vooral fac_tracking: >> 10 min)
CREATE_VIEW( care_v_qvw_beschikk_per_week, 0)
(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_VIEW( care_v_qvw_zorguren, 0)
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_VIEW( care_v_qvw_impr_uren, 0)
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_VIEW( care_v_qvw_kosten, 0)
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_VIEW( care_v_km_weekbrief, 0)
(
   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_VIEW( care_v_verzorger_km_per_dag, 0)
(
   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_VIEW( care_v_rap_km_per_periode, 0)
(
   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, mld_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_VIEW( care_v_rap_km_per_week, 0)
(
   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, mld_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_VIEW( care_v_rap_km_per_dag, 0)
(
   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, mld_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_VIEW( care_v_rap_my_km_per_dag, 0)
(
   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_VIEW( care_v_km_improd_dag, 0)
(
   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_VIEW( care_v_rap_km_impr_periode, 0)
(
   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_VIEW( care_v_capaciteitsplan, 0)
(
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_VIEW ( care_v_prs_opdrachturen, 0)
(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_VIEW( care_v_rap_prs_planbord, 0)
(
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_VIEW( care_v_rap_prs_team_planbord, 0)
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;




REGISTERRUN('$Id$')

#endif // CARE
