#ifdef  MLD // 13-03-96 AH
/*  $Revision$
 *  $Id$
 */

CREATE_TABLE(mld_behandelgroep,0)
(
    mld_behandelgroep_key
        NUMBER(10)
        CONSTRAINT mld_k_behandelgroep_key PRIMARY KEY,
    mld_behandelgroep_naam
        VARCHAR2(30)
        NOT_NULL(mld_behandelgroep_naam, mld_c_behandelgroep_naam),
    mld_behandelgroep_oms
        VARCHAR2(1000),
  CONSTRAINT mld_u_behandelgroep_naam UNIQUE (mld_behandelgroep_naam)
);

/* fac_activiteit_key verwijst optioneel naar een activiteit en daarmee mld_opdr, waarmee
 * aangegeven kan worden dat automatisch na een melding van deze discipline zo'n opdracht moet
 * worden aangemaakt, CONN#3513
 */
CREATE_TABLE(mld_disc_params, 0)
  ( mld_disc_params_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_disc_params_key PRIMARY KEY,
    mld_ins_discipline_key
        NUMBER(10)
        NOT_NULL(mld_ins_discipline_key, mld_c_ins_discipline_key1)
        CONSTRAINT mld_r_ins_discipine_key1 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_disc_params_factuurmarge
        NUMBER(8,2)
        DEFAULT 0,
    mld_disc_params_factuurappr
        NUMBER(1)
        DEFAULT 0,
    mld_disc_params_factuurpct
        NUMBER
        DEFAULT 0,
    mld_disc_params_factuurgrens   -- hieronder vinden we het best (excl btw)
        NUMBER(8),
    mld_disc_params_factmatchmode    -- 2-weg of 3-weg matching?
        NUMBER(1)
        CONSTRAINT mld_c_disc_params1 CHECK(mld_disc_params_factmatchmode IN (2,3)),  -- leeg mag ook
    fac_activiteit_key
        NUMBER(10)
        CONSTRAINT mld_r_fac_activiteit_key1 REFERENCES fac_activiteit(fac_activiteit_key),
    mld_disc_params_notify
        NUMBER(2)       -- valid are 0, 1 and 2
        DEFAULT 1,
    mld_disc_params_noti_dagen
        NUMBER(2),
    mld_disc_params_opdr_kosten  -- bitwise valid are 0, 1, 2 and 4. Opdr kosten verplicht bij (0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden)
        NUMBER(1),
    mld_disc_params_directklaar
        NUMBER(1),
    mld_disc_params_frontendprio
        NUMBER(1),
    mld_disc_params_kanpubliek
        NUMBER(1)       -- valid are 0, 1
        DEFAULT 0
        NOT NULL,
    mld_disc_params_bonotify
        NUMBER(2)       -- BO notificatie accept 0=niet, 1=bof, 2=bo3, 3=bo3 (aanmaak nieuwe melding) en dan bof (accepteren melding)
        DEFAULT 0,
    mld_disc_params_bhgnotify
        NUMBER(1)       -- valid are 0, 1, 2, 3
        DEFAULT 1
        NOT NULL,
    mld_disc_params_benotify
        NUMBER(1)       -- valid are 0, 1
        DEFAULT 0
        NOT NULL,
    mld_disc_params_nobnotify
        NUMBER(1)       -- valid are 0, 1
        DEFAULT 1
        NOT NULL,
    mld_disc_params_offhours
        NUMBER(1)
        DEFAULT 0
        NOT NULL,
    mld_disc_params_fenotes
        NUMBER(2)       -- bitwise valid are 0, 1, 2 and 3 (0,1 = (default) niet/wel + 0,2 = vast/keuze)
        DEFAULT 0,
    mld_disc_params_eigen_kp
        NUMBER(1)       -- valid are 0, 1
        DEFAULT 0,
    mld_disc_params_startdatum -- if null then matches setting mld_stdmelding_startdatum
        NUMBER(1),
    mld_disc_params_bestellimiet
        NUMBER(11,2)
        DEFAULT 100000,
    mld_disc_params_offerteauto  -- Automatische offerteafhandeling Ja/Nee(1/0)
        NUMBER(1)
        DEFAULT 1,
    mld_disc_params_keten -- Call can be assigned to another category {0=no (default) | 1=yes}
        NUMBER(1)
        DEFAULT 0,
    mld_behandelgroep_key
        NUMBER(10)
        CONSTRAINT mld_r_behandelgroep_key1 REFERENCES mld_behandelgroep(mld_behandelgroep_key),
    mld_disc_params_bestellimiet2
        NUMBER(11,2)
        DEFAULT 1000000,
    mld_disc_params_bestellimiet3
        NUMBER(11,2)
        DEFAULT 1000000,
    mld_disc_params_bestellimiet4
        NUMBER(11,2)
        DEFAULT 1000000,
    mld_disc_params_bestellimiet5
        NUMBER(11,2)
        DEFAULT 1000000,
    mld_disc_params_emailnw1
        VARCHAR2(200),
    mld_disc_params_emailnw2
        VARCHAR2(200),
    mld_disc_params_emailnw3
        VARCHAR2(200),
    mld_disc_params_emailnw4
        VARCHAR2(200),
    mld_disc_params_smsnw1
        VARCHAR2(20),
    mld_disc_params_smsnw2
        VARCHAR2(20),
    mld_disc_params_smsnw3
        VARCHAR2(20),
    mld_disc_params_smsnw4
        VARCHAR2(20),
    mld_disc_params_pgb /* 0=Geen van beiden, 1=Alleen pgb, 2=Alleen agb, 3=Beiden, pgb en agb */
        NUMBER(1),
    mld_disc_params_srtgroep /* &1=Primaire vakgroep, &2=Behandelteam, &4=Primair heeft behandelteams (0, 4 en 6 zijn hiermee dus ongeldige/onlogische waarden) */
        NUMBER(1) DEFAULT(1) NOT NULL
        CONSTRAINT mld_c_mld_disc_params_srtgroep CHECK(mld_disc_params_srtgroep IN (1,5,2,3,7)),
    mld_disc_params_primairbeh
        NUMBER(1) DEFAULT(1) NOT NULL,
    mld_disc_params_mldgroup
        NUMBER(3) DEFAULT(0) NOT NULL
);


/* GUI-directives, used to restrict the vervolgmelding of a melding of ins_srtdiscipline_key_1 to ins_srtdiscipline_key_2
 * Optional, no record for ins_srtdiscipline_key_1 = no restrictions for ins_srtdiscipline_key_1
 */
CREATE_TABLE(mld_vervolg_beperking, 0)
(
    mld_vervolg_beperking_key
        NUMBER(10)
        PRIMARY KEY,
    ins_srtdiscipline_key_1
        NUMBER(10) NOT NULL
        CONSTRAINT mld_r_ins_srtdiscipline_key1 REFERENCES ins_srtdiscipline(ins_srtdiscipline_key) ON DELETE CASCADE,
    ins_srtdiscipline_key_2
        NUMBER(10) NOT NULL
        CONSTRAINT mld_r_ins_srtdiscipline_key3 REFERENCES ins_srtdiscipline(ins_srtdiscipline_key) ON DELETE CASCADE,
    mld_vervolg_beperking_aanmaak
        DATE DEFAULT SYSDATE NOT NULL
);

CREATE_TABLE(mld_oorzaak,0)
(
    mld_oorzaak_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_oorzaak_key PRIMARY KEY,
    mld_oorzaak_omschrijving
        VARCHAR2(30)
        NOT_NULL(mld_oorzaak_omschrijving, mld_c_mld_oorzaak_omschrijving),
    mld_oorzaak_upper
        VARCHAR2(30)
        NOT_NULL(mld_oorzaak_upper, mld_c_mld_oorzaak_upper),
    mld_oorzaak_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(mld_oorzaak_aanmaak, mld_c_mld_oorzaak_aanmaak),
    mld_oorzaak_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT mld_u_mld_oorzaak_upper UNIQUE(mld_oorzaak_upper, mld_oorzaak_verwijder)
);

CREATE_TABLE(mld_meldbron,0)
(
    mld_meldbron_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_meldbron_key PRIMARY KEY,
    mld_meldbron_omschrijving
        VARCHAR2(30)
        NOT_NULL(mld_meldbron_omschrijving, mld_c_mld_meldbron_omschr),
    mld_meldbron_upper
        VARCHAR2(30)
        NOT_NULL(mld_meldbron_upper, mld_c_mld_meldbron_upper),
    mld_meldbron_kiesbaar
        NUMBER(1)
        DEFAULT 0
        NOT NULL,
    mld_meldbron_default
        NUMBER(1),
    mld_meldbron_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(mld_meldbron_aanmaak, mld_c_mld_meldbron_aanmaak),
    mld_meldbron_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT mld_u_mld_meldbron_upper UNIQUE(mld_meldbron_upper, mld_meldbron_verwijder)
);

CREATE_TABLE(mld_standaardopdr,0)
(
    mld_standaardopdr_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_standaardopdr_key PRIMARY KEY,
    mld_standaardopdr_omschrijving
        VARCHAR2(320)
        NOT_NULL(mld_standaardopdr_omschrijving, mld_c_mld_standaardopdr_omschr),
    mld_standaardopdr_afk
        VARCHAR2(30)
        NOT_NULL(mld_standaardopdr_afk, mld_c_mld_standaardopdr_afk),
    mld_standaardopdr_afk_upper
        VARCHAR2(30)
        NOT_NULL(mld_standaardopdr_afk_upper, mld_c_mld_stdopdr_afk_upper),
    mld_standaardopdr_uren
        NUMBER(8,2),
    mld_standaardopdr_materiaal
        NUMBER(10,2),
    mld_standaardopdr_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(mld_standaardopdr_aanmaak, mld_c_mld_stdopdr_aanmaak),
    mld_standaardopdr_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT mld_u_mld_stdopdr_afk_upper UNIQUE(mld_standaardopdr_afk_upper, mld_standaardopdr_verwijder)
);

CREATE_TABLE(mld_typeopdr,0)
(
    mld_typeopdr_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_typeopdr_key PRIMARY KEY,
    mld_typeopdr_omschrijving
        VARCHAR2(30)
        NOT_NULL(mld_typeopdr_omschrijving, mld_c_mld_typeopdr_omschr),
    mld_typeopdr_upper
        VARCHAR2(30)
        NOT_NULL(mld_typeopdr_upper, mld_c_mld_typeopdr_upper),
    mld_typeopdr_module
        VARCHAR2(3)
        NOT_NULL(mld_typeopdr_module, mld_c_mld_typeopdr_module),
    mld_typeopdr_decentraal
        NUMBER(1) DEFAULT(0)
        CONSTRAINT mld_c_mld_typeopdr_decentraal CHECK(mld_typeopdr_decentraal IN (0,1,2)), /*0=centraal, 1=beide, 2=decentraal*/
    mld_typeopdr_afmelden_extern
        NUMBER(1) DEFAULT(0)
        CONSTRAINT mld_c_mld_typeopdr_afm_extern CHECK(mld_typeopdr_afmelden_extern IN (0,1,2)), /* 0=not visible | 1=visible for ORDBO2 | 2=visible and changeble by ORDBO2 */
    mld_typeopdr_kosten
        NUMBER(1) DEFAULT(0)
        CONSTRAINT mld_c_mld_typeopdr_kosten CHECK(mld_typeopdr_kosten IN (0,1)),
    mld_typeopdr_sluitmelding
        NUMBER(1) DEFAULT(0)
        CONSTRAINT mld_c_mld_typeopdr_sluitm CHECK(mld_typeopdr_sluitmelding IN (0,1,2)), /*0=niet, 1=vragen, 2=vanzelf*/
    mld_typeopdr_annuleermelding
        NUMBER(1) DEFAULT(0) NOT NULL
        CONSTRAINT mld_c_mld_typeopdr_annulm CHECK(mld_typeopdr_annuleermelding IN (0,1,2)), /*0=niet, 1=vragen, 2=vanzelf*/
    mld_typeopdr_matchtype
        NUMBER(1) DEFAULT(2)
        CONSTRAINT mld_c_mld_typeopdr_match CHECK(mld_typeopdr_matchtype IN (0,1,2,3,4,5,6,7)), /*0=altijd ok, 1=mld_opdr_totaal, 2=termijnen, 3=mld_opdr_uren(per week), 4=geen kosten, 5=aantal x prijs, 6=mld_opdr_uren(totaal),7=max aantal uren */
    mld_typeopdr_uren
        NUMBER(1)
        DEFAULT 1
        NOT NULL
        CONSTRAINT ins_c_mld_typeopdr_uren CHECK(mld_typeopdr_uren IN (0, 1, 2, 3, 4, 5)),
    mld_typeopdr_materiaal
        NUMBER(1)
        DEFAULT 1
        NOT NULL
        CONSTRAINT ins_c_mld_typeopdr_materiaal CHECK(mld_typeopdr_materiaal IN (0, 1, 2, 3)), /* 0=Geen materiaal, 1=Optioneel totaalbedrag, 2=Materialenlijst, 3=Verplichte materialenlijst */
    mld_typeopdr_totaal
        NUMBER(1)
        DEFAULT 1
        NOT NULL
        CONSTRAINT ins_c_mld_typeopdr_totaal CHECK(mld_typeopdr_totaal IN (0, 1, 2)),
    mld_typeopdr_factuur
        NUMBER(1)
        DEFAULT 3
        NOT NULL
        CONSTRAINT ins_c_mld_typeopdr_factuur CHECK(mld_typeopdr_factuur IN (0, 1, 2, 3, 4)),
    mld_typeopdr_afmeldmarge  /* aantal dagen dat afmeldtijdstip vroeger mag zijn dan sysdate */
        NUMBER(2),
    mld_typeopdr_zichtbaarfe  /* of deze opdrachten zichtbaar zijn voor de melders (1) of niet (0/null) */
        NUMBER(1),
    mld_typeopdr_offertelimiet  /* boven dit bedrag is een offerte vereist (met name voor niet-offerteopdrachten) */
        NUMBER(8),
    mld_typeopdr_isofferte  /* of deze opdrachten een offerte zijn (AAIT#22177) */
        NUMBER(1)
        DEFAULT (0)
        CONSTRAINT mld_c_mld_typeopdr_isofferte CHECK(mld_typeopdr_isofferte IN (0,1)),
    mld_typeopdr_typeopdr_key  /* de mld_typeopdr_key voor vervolgopdracht (indien dit een offerte was) */
        NUMBER(10)
        CONSTRAINT mld_r_typeopdr_key1 REFERENCES mld_typeopdr(mld_typeopdr_key),
    mld_typeopdr_slamode
        NUMBER(1)                                 -- 1: Leverancier-SLA, 2=Melding-SLA
        DEFAULT 1 NOT NULL,
    mld_typeopdr_contract  /* of bij deze opdrachten een contract moet (3), kan (2) of niet kan (0) worden opgegeven */
        NUMBER(1)
        DEFAULT (2)
        CONSTRAINT mld_c_mld_typeopdr_contract CHECK(mld_typeopdr_contract IN (0,2,3)),
    mld_typeopdr_bez
        NUMBER(1)
        DEFAULT(0)
        CONSTRAINT mld_c_mld_typeopdr_bez CHECK(mld_typeopdr_bez IN (0,1)),
    mld_typeopdr_afhandeling  /* Afhandeling verplicht bij afmelden opdracht van dit opdrachttype (0=Nee/1=Ja) */
        NUMBER(1)
        DEFAULT 0,
    mld_typeopdr_confirm_for_send /* Hoe moet de opdrachten verstuurd worden (&1=Vraag opwerpen voor verzending, &2=Markeren voor verzending => 0=Direct versturen (Default), 1=Eerst Vragen, 2=Markeren) */
        NUMBER(1)
        DEFAULT 0,
    mld_typeopdr_gvs
        NUMBER(11,2)
        DEFAULT 1000000,
    mld_typeopdr_fvs
        NUMBER(11,2)
        DEFAULT 0,
    mld_typeopdr_accept
        NUMBER(1)       /* -- valid are 0, 1 */
        DEFAULT 1
        NOT NULL,
    mld_typeopdr_kosten_verplicht  /* bitwise valid are 0, 1, 2 and 4. Opdr kosten verplicht bij (0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden) */
        NUMBER(1),
    mld_typeopdr_sequential  /* Strikte sequentiele opdracht afhandeling en/of Hold (BITAND1 is (kan pauzeren en hervatten) en BITAND2 is strikt sequentieel) */
        NUMBER(1)
        DEFAULT 0 NOT NULL,
    mld_typeopdr_image
        VARCHAR2(255 CHAR),
    mld_typeopdr_code
        VARCHAR2(60)
        CONSTRAINT mld_u_mld_typeopdr_code UNIQUE,
    CONSTRAINT mld_u_mld_typeopdr_upper UNIQUE(mld_typeopdr_upper, mld_typeopdr_module)
);

ALTER TABLE prs_bedrijfadres ADD (
    mld_typeopdr_key
        NUMBER(10)
        CONSTRAINT prs_r_mld_typeopdr_key REFERENCES mld_typeopdr(mld_typeopdr_key) ON DELETE CASCADE
);


/*
-- 0 = ignore mld_opdr_totaal (factuur altijd goed)
-- 1 = match met mld_opdr_totaal (binnen marges, 1 factuur per opdracht)
-- 2 = termijnfacturen (totaal van facturen matchen met mld_opdr_totaal)
-- 3 = match met urenregistratie in mld_opdr_uren (nieuw)
*/

CREATE_TABLE(mld_stdmeldinggroep,0)
(
    mld_stdmeldinggroep_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_stdmeldinggroep_key PRIMARY KEY,
    mld_stdmeldinggroep_naam
        VARCHAR2(30)
        NOT_NULL(mld_stdmeldinggroep_naam, mld_c_mld_stdmeldinggroep_naam),
    mld_stdmeldinggroep_oms
        VARCHAR2(1000),
    mld_stdmeldinggroep_image
        VARCHAR2(255),
    mld_stdmeldinggroep_color
        VARCHAR2 (60),
  CONSTRAINT mld_u_stdmeldinggroep_naam UNIQUE (mld_stdmeldinggroep_naam)
);


CREATE_TABLE(mld_melding_tag,0)  /* generieke opzet voor mld_releases of mld_releasekalender: mijlpalen */
(
    mld_melding_tag_key
        NUMBER(10)
        CONSTRAINT mld_k_melding_tag_key PRIMARY KEY,
    ins_srtdiscipline_key
        NUMBER(10) NOT NULL
        CONSTRAINT mld_r_ins_srtdiscipline_key4 REFERENCES ins_srtdiscipline(ins_srtdiscipline_key) ON DELETE CASCADE,
    mld_melding_tag_naam
        VARCHAR2(30)
        NOT NULL,
    mld_melding_tag_oms                 /* korte omschrijving */
        VARCHAR2(1000),
    mld_stdmeldinggroep_key             /* optional reference to mld_stdmeldinggroep */
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmeldinggroep_key2 REFERENCES mld_stdmeldinggroep(mld_stdmeldinggroep_key),
    mld_melding_tag_datum_van           /* lijkt logisch, maar definieren waarom */
        DATE,
    mld_melding_tag_datum_acc           /* de acceptatiereleasedatum */
        DATE,
    mld_melding_tag_datum_tot           /* de releasedatum */
        DATE NOT NULL,
    mld_melding_tag_actief              /* om te kunnen laten vervallen */
        NUMBER(2) DEFAULT 1 NOT NULL,
    prs_perslid_key                     /* aanmaker of verantwoordelijke */
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key15 REFERENCES prs_perslid(prs_perslid_key),
    mld_melding_tag_aanmaak
        DATE DEFAULT SYSDATE NOT NULL,
    mld_melding_tag_verwijder
        DATE
    /* UNIQUE via index mld_i_mld_melding_tag1 */
);

CREATE_TABLE(mld_stdmelding,0)
(
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_stdmelding_key PRIMARY KEY,
    mld_ins_discipline_key
        NUMBER(10)
        NOT_NULL(mld_ins_discipline_key, mld_c_ins_discipline_key)
        CONSTRAINT mld_r_ins_discipline_key REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_stdmelding_omschrijving
        VARCHAR2(60)
        NOT_NULL(mld_stdmelding_omschrijving, mld_c_mld_stdmelding_omschr),
    mld_stdmelding_upper
        VARCHAR2(60)
        NOT_NULL(mld_stdmelding_upper, mld_c_mld_stdmelding_upper),
    mld_stdmelding_hint
        VARCHAR2(1000),
    mld_stdmelding_default_disc
        NUMBER(10)
        CONSTRAINT mld_r_ins_discipline_key5 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_stdmelding_t_accepttijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmelding_t_accept CHECK(mld_stdmelding_t_accepttijd.tijdsduur >= 0),
    mld_stdmelding_t_accept_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmelding_t_accept1 CHECK(mld_stdmelding_t_accept_pr1.tijdsduur >= 0),
    mld_stdmelding_t_accept_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmelding_t_accept2 CHECK(mld_stdmelding_t_accept_pr2.tijdsduur >= 0),
    mld_stdmelding_t_accept_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmelding_t_accept4 CHECK(mld_stdmelding_t_accept_pr4.tijdsduur >= 0),
    mld_stdmelding_t_uitvoertijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmeld_t_uitvtijd CHECK(mld_stdmelding_t_uitvoertijd.tijdsduur >= 0),
    mld_stdmelding_t_uitvtijd_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmeld_t_uitvtijd1 CHECK(mld_stdmelding_t_uitvtijd_pr1.tijdsduur >= 0),
    mld_stdmelding_t_uitvtijd_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmeld_t_uitvtijd2 CHECK(mld_stdmelding_t_uitvtijd_pr2.tijdsduur >= 0),
    mld_stdmelding_t_uitvtijd_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmeld_t_uitvtijd4 CHECK(mld_stdmelding_t_uitvtijd_pr4.tijdsduur >= 0),
    mld_stdmelding_planbaar    -- 0: einddatum wordt berekend, 1: de einddatum van de melding is default leeg, 2: veld is verborgen, +4: toon actiedatum
        NUMBER(1)
        DEFAULT 0 NOT NULL,
    mld_stdmelding_planbaarfe          -- 0: niet in te vullen door FE
        NUMBER(1)
        DEFAULT 0 NOT NULL,
    mld_stdmelding_thirdparty          -- 1: external person can be used in call
        NUMBER(1)
        DEFAULT 0 NOT NULL,
    mld_stdmelding_slabewaken
        NUMBER(1)                                 -- 0: overschrijden van SLA is niet erg
        DEFAULT 1 NOT NULL,
    mld_stdmelding_notfrontend
        NUMBER(1)                           -- 1 : niet zichtbaar voor front end webusers
        DEFAULT 0,
    mld_stdmelding_prseigen
        NUMBER(1)
        DEFAULT 0,                              -- 1: alleen op ruimte van eigen afdeling
    mld_stdmelding_notify   -- valid are 0 and 1, only used when mld_disc_params_notify=2
        NUMBER(2)
        DEFAULT 1,
    mld_stdmelding_volgnr
      NUMBER(3),
    mld_stdmeldinggroep_key                           -- reference to mld_stdmeldinggroep
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmeldinggroep_key REFERENCES mld_stdmeldinggroep(mld_stdmeldinggroep_key),
    ins_srtinst_verplichtstatus
        NUMBER(2),
    alg_onrgoed_niveau    -- level of onrgoed of objects to display with new melding and/or required level
        VARCHAR2(1)
        CONSTRAINT mld_c_alg_onrgoed_niveau CHECK (alg_onrgoed_niveau IN ('L','G','V','R','H')),
    alg_onrgoed_obj_niveau    -- level of onrgoed which should be selected before chosing objects
        VARCHAR2(1)
        CONSTRAINT mld_c_alg_onrgoed_obj_niveau CHECK (alg_onrgoed_obj_niveau IN ('A','L','G','V','R')),
    alg_org_obj_niveau    -- level of organisation from which objects can be chosen (-1=alle, 0=bedrijf, ...., 9=geen)
        NUMBER(1)
        DEFAULT -1
        CONSTRAINT mld_c_alg_org_objniveau CHECK (alg_org_obj_niveau IN (-1,0,1,2,3,4,5,8)),
    mld_stdmelding_freetext  -- 0:geen omschrijving, 1:optionele omschrijving, 2:verplichte omschrijving
        NUMBER(1)
        DEFAULT 1,
    mld_stdmelding_afmeldtext  -- bij afmelden 1:optionele opmerking, 2:verplichte opmerking
        NUMBER(1)
        DEFAULT 1,
    mld_stdmelding_doublecheck -- controleer op dubbelen bij invoer/acceptatie 0:niet, 1:FE/FO, 2:BO, 3:FE/FO/BO
        NUMBER(4),
    mld_stdmelding_kopieerbaar --  0/null: een melding kan niet gekopieerd worden, 1: kan wel gekopieerd worden.
        NUMBER(1),
    mld_stdmelding_kto -- 0,1,2,3: 1-bit=niet/wel, 2-bit=vast/aanpasbaar
        NUMBER(1),
    prs_kostensoort_key
        NUMBER(10)
        CONSTRAINT ins_r_prs_kostensoort_key2 REFERENCES prs_kostensoort(prs_kostensoort_key),
    prs_kostenplaats_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_kostenplaats_key3 REFERENCES prs_kostenplaats (prs_kostenplaats_key),
    mld_stdmelding_autoorder -- (1: probeer automatisch opdracht te maken)
        NUMBER(1),
    mld_stdmelding_autoorderamount -- Opdrachtbedrag voor automatisch aangemaakte opdrachten (default 0).
        NUMBER(12,2),
    mld_typeopdr_key -- wat voor een opdrachttype als autoorder of anders default
        NUMBER(10)
        CONSTRAINT mld_r_mld_typeopdr1 REFERENCES mld_typeopdr(mld_typeopdr_key),
    mld_stdmelding_vereisdienst -- (1: mag alleen als binnen scope dienst geleverd wordt)
        NUMBER(1),
    mld_stdmelding_regime -- afhandelingsregime
        NUMBER(2)
        DEFAULT 1
        CONSTRAINT mld_c_stdmelding_regime CHECK (mld_stdmelding_regime IS NOT NULL AND mld_stdmelding_regime IN (1,2,3)), -- 1=kantoortijden, 2=openingstijden, 3=24x7
    mld_stdmelding_malusbasis -- eenmalige boete/korting bij overschrijding
        NUMBER(8,2),
    mld_stdmelding_malus -- boete/korting bij overschrijding [per periode]
        NUMBER(8,2),
    mld_stdmelding_malusmax
        NUMBER(8,2),
    mld_stdmelding_afhankelijk  -- is de uitvoertijd afhankelijk van de ins_deel/alg_srtruimte (1) of niet (0)
        NUMBER(1)
        DEFAULT 0
        CONSTRAINT mld_c_stdmelding_afhankelijk CHECK (mld_stdmelding_afhankelijk IN (0,1)),
    prs_dienst_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_dienst_key1 REFERENCES prs_dienst(prs_dienst_key),
    bes_ins_discipline_key -- verwijzing naar de bes_discipline indien ins_srtdiscipline_bes=1
        NUMBER(10)
        CONSTRAINT mld_r_bes_discipline_key1 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_stdmelding_image
        VARCHAR2(255 CHAR),
    mld_stdmelding_color
        VARCHAR2 (60 CHAR),
    mld_stdmelding_vervaldatum
        DATE,
    mld_stdmelding_aanmaak
        DATE
        DEFAULT SYSDATE,
    mld_stdmelding_verwijder
        DATE,
    mld_stdmelding_opdrtypevast  -- 0: standaard opdrachttype
        NUMBER(1)                -- 1: verplicht opdrachttype
        DEFAULT 0,
    mld_stdmelding_directklaar
        NUMBER(1),
    mld_stdmelding_kanverwijzen --0..127: 0: nee, +1: melding, +2: opdracht, +4: reservering, +8: bestelling, +16: bestelopdr, +32: contract, +64: factuur
        NUMBER(4)
        DEFAULT 0,
    mld_stdmelding_subject  -- 0:geen onderwerp, 1:optionele onderwerp, 2:verplichte onderwerp
        NUMBER(1)
        DEFAULT 1
        NOT_NULL(mld_stdmelding_subject, mld_c_mld_stdmelding_subject),
    mld_stdmelding_externurl
        VARCHAR2(1024),
    mld_stdmelding_enddate_empty  -- Einddatum opdracht leeglaten (0=Nee(Default) | 1=Ja)
        NUMBER(1)
        DEFAULT 0
        CONSTRAINT mld_c_stdmelding_enddate_empty CHECK (mld_stdmelding_enddate_empty IN (0,1))
        CONSTRAINT mld_c_stdmelding_enddate_empt2 CHECK (mld_stdmelding_enddate_empty IS NOT NULL),
    mld_stdmelding_prsafdobj
        NUMBER(1)
        DEFAULT 0
        NOT NULL,
    mld_stdmelding_code
        VARCHAR2(60)
        CONSTRAINT mld_u_mld_stdmelding_code UNIQUE,
    mld_stdmelding_externnr
        VARCHAR2(256),
    mld_stdmelding_externsyncdate
        DATE,
    mld_stdmelding_notes  // 0:geen notities, &1=FE, &2=FOBO, &4=UITV
        NUMBER(1)
        DEFAULT 7
        NOT_NULL(mld_stdmelding_notes, mld_c_mld_stdmelding_notes),
    mld_stdmelding_conceptstatus  // standaard conceptstatus, 0:geen concept, &1, &2, &4 see documentation
        NUMBER(3)
        DEFAULT 0
        NOT NULL,
-- in CAD_TAB.SRC:
--    cad_thema_key
--        NUMBER(10)
--        CONSTRAINT mld_r_cad_thema_key1 REFERENCES cad_thema(cad_thema_key),
    mld_stdmelding_priomatrix  // bepaal meldingprioriteit (mld_melding_spoed) via urgentie x impact
        NUMBER(1)
        DEFAULT 0
        NOT NULL,
    mld_stdmelding_taggable  // mld_melding_tag (mijlpaal) voor indirecte einddatum 0=geen, 1=intern zichtbaar, +2=3=extern zichtbaar
        NUMBER(1)
        DEFAULT 0
        NOT NULL,
    mld_stdmelding_objects_allowed
        NUMBER(1)
        DEFAULT(2)
        NOT NULL,
    CONSTRAINT mld_u_mld_stdmelding UNIQUE(mld_ins_discipline_key, mld_stdmelding_omschrijving, mld_stdmelding_verwijder)
);

ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_accepttijd  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_accept_pr1  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_accept_pr2  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_accept_pr4  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvoertijd DEFAULT MLD_T_UITVOERTIJD(2, 1);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvoertijd NOT_NULL(mld_stdmelding_t_uitvoertijd.tijdsduur, mld_c_stdmelding_t_uitvtijd);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvoertijd NOT_NULL(mld_stdmelding_t_uitvoertijd.eenheid, mld_c_stdmelding_t_eenheid_uit);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvtijd_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvtijd_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmelding MODIFY mld_stdmelding_t_uitvtijd_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE fac_email_setting ADD
(
    mld_stdmelding_key
        NUMBER(10) REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE
);
ALTER TABLE ins_srtdeel ADD
(
    mld_stdmelding_key
        NUMBER(10) REFERENCES mld_stdmelding(mld_stdmelding_key)
);

ALTER TABLE ins_srtcontrole ADD
(
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key7 REFERENCES mld_stdmelding
);

CREATE_TABLE(mld_stdmelding_srtinst, 0)
(
    mld_stdmelding_srtinst_key
        NUMBER(10)
        CONSTRAINT mld_k_stdmelding_srtinst_key PRIMARY KEY,
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key8 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE
        NOT_NULL(mld_stdmelding_key, mld_c_stdmelding_key1),
    ins_srtinstallatie_key     -- optional reference to objecttype (level defined by _niveau)
        NUMBER(10),
    ins_srtinstallatie_niveau    -- level of _srtinst_key
        VARCHAR2(1)
        CONSTRAINT mld_c_mld_srtinst_niveau CHECK (ins_srtinstallatie_niveau IN ('D','G','S')),
    mld_stdmelding_srtinst_aanmaak
        DATE
        DEFAULT SYSDATE,
    CONSTRAINT mld_u_mld_stdmelding_srtinst UNIQUE(mld_stdmelding_key, ins_srtinstallatie_niveau, ins_srtinstallatie_key)
);

// Eventuele afwijkingen per srtruimte van SLA tijden.
// Fungeert als COALESCE met alg_srtruimte.
CREATE_TABLE(mld_stdmsrtruimte, 0)
(
    mld_stdmsrtruimte_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_stdmsrtruimte_key PRIMARY KEY,
    alg_srtruimte_key
        NUMBER(10)
        CONSTRAINT alg_r_alg_srtruimte_key3 REFERENCES alg_srtruimte(alg_srtruimte_key) ON DELETE CASCADE
        NOT_NULL(alg_srtruimte_key, alg_c_srtruimte_key2),
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key5 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE
        NOT_NULL(mld_stdmelding_key, mld_c_stdmelding_key),
    mld_stdmsrtruimte_malusbasis -- eenmalige boete/korting bij overschrijding
        NUMBER(8,2),
    mld_stdmsrtruimte_malus -- boete/korting bij overschrijding [per periode]
        NUMBER(8,2),
    mld_stdmsrtruimte_malusmax
        NUMBER(8,2),
    mld_stdmsrtruimte_t_accepttijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_acc CHECK(mld_stdmsrtruimte_t_accepttijd.tijdsduur >= 0),
    mld_stdmsrtruimte_t_accept_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_acc1 CHECK(mld_stdmsrtruimte_t_accept_pr1.tijdsduur >= 0),
    mld_stdmsrtruimte_t_accept_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_acc2 CHECK(mld_stdmsrtruimte_t_accept_pr2.tijdsduur >= 0),
    mld_stdmsrtruimte_t_accept_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_acc4 CHECK(mld_stdmsrtruimte_t_accept_pr4.tijdsduur >= 0),
    mld_stdmsrtruimte_t_uitvtijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_uitv CHECK(mld_stdmsrtruimte_t_uitvtijd.tijdsduur >= 0),
    mld_stdmsrtruimte_t_uitv_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_uit1 CHECK(mld_stdmsrtruimte_t_uitv_pr1.tijdsduur >= 0),
    mld_stdmsrtruimte_t_uitv_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_uit2 CHECK(mld_stdmsrtruimte_t_uitv_pr2.tijdsduur >= 0),
    mld_stdmsrtruimte_t_uitv_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtruimte_t_uit4 CHECK(mld_stdmsrtruimte_t_uitv_pr4.tijdsduur >= 0),
    mld_stdmsrtruimte_regime -- optioneel afwijkend afhandelingsregime (may be null)
        NUMBER(2)
        CONSTRAINT mld_c_stdmsrtruimte_regime CHECK (mld_stdmsrtruimte_regime IN (1,2,3)), -- 1=kantoortijden, 2=openingstijden, 3=24x7
    CONSTRAINT mld_u_mld_stdmsrtruimte UNIQUE(alg_srtruimte_key, mld_stdmelding_key)
);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_accepttijd  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_accept_pr1  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_accept_pr2  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_accept_pr4  DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_uitvtijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_uitv_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_uitv_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtruimte MODIFY mld_stdmsrtruimte_t_uitv_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);

// Eventuele afwijkingen per srtgebouw van SLA tijden.
// Fungeert als COALESCE met alg_srtgebouw.
CREATE_TABLE(mld_stdmsrtgebouw, 0)
(
    mld_stdmsrtgebouw_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_stdmsrtgebouw_key PRIMARY KEY,
    alg_srtgebouw_key
        NUMBER(10)
        CONSTRAINT alg_r_alg_srtgebouw_key2 REFERENCES alg_srtgebouw(alg_srtgebouw_key) ON DELETE CASCADE
        NOT_NULL(alg_srtgebouw_key, alg_c_srtgebouw_key2),
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key9 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE
        NOT_NULL(mld_stdmelding_key, mld_c_stdmelding_key2),
    mld_stdmsrtgebouw_malusbasis -- eenmalige boete/korting bij overschrijding
        NUMBER(8,2),
    mld_stdmsrtgebouw_malus -- boete/korting bij overschrijding [per dag]
        NUMBER(8,2),
    mld_stdmsrtgebouw_malusmax
        NUMBER(8,2),
    mld_stdmsrtgebouw_t_accepttijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_acc CHECK(mld_stdmsrtgebouw_t_accepttijd.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_accept_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_acc1 CHECK(mld_stdmsrtgebouw_t_accept_pr1.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_accept_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_acc2 CHECK(mld_stdmsrtgebouw_t_accept_pr2.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_accept_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_acc4 CHECK(mld_stdmsrtgebouw_t_accept_pr4.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_uitvtijd  /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_uitv CHECK(mld_stdmsrtgebouw_t_uitvtijd.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_uitv_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_uitv1 CHECK(mld_stdmsrtgebouw_t_uitv_pr1.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_uitv_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_uitv2 CHECK(mld_stdmsrtgebouw_t_uitv_pr2.tijdsduur >= 0),
    mld_stdmsrtgebouw_t_uitv_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtgebouw_t_uitv4 CHECK(mld_stdmsrtgebouw_t_uitv_pr4.tijdsduur >= 0),
    mld_stdmsrtgebouw_regime -- optioneel afwijkend afhandelingsregime (may be null)
        NUMBER(2)
        CONSTRAINT mld_c_stdmsrtgebouw_regime CHECK (mld_stdmsrtgebouw_regime IN (1,2,3)), -- 1=kantoortijden, 2=openingstijden, 3=24x7
    CONSTRAINT mld_u_mld_stdmsrtgebouw UNIQUE(alg_srtgebouw_key, mld_stdmelding_key)
);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_accepttijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_accept_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_accept_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_accept_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_uitvtijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_uitv_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_uitv_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtgebouw MODIFY mld_stdmsrtgebouw_t_uitv_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);

-- Eventuele afwijkingen per srtterreinsector van SLA tijden.
-- Fungeert als COALESCE met alg_srtterreinsector.
CREATE_TABLE(mld_stdmsrtterrein, 0)
(
    mld_stdmsrtterrein_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_stdmsrtterrein_key PRIMARY KEY,
    alg_srtterreinsector_key
        NUMBER(10)
        CONSTRAINT alg_r_alg_srtterreinsec_key REFERENCES alg_srtterreinsector(alg_srtterreinsector_key) ON DELETE CASCADE
        NOT_NULL(alg_srtterreinsector_key, alg_c_srtterreinsector_key2),
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key10 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE
        NOT_NULL(mld_stdmelding_key, mld_c_stdmelding_key3),
    mld_stdmsrtterrein_malusbasis -- eenmalige boete/korting bij overschrijding
        NUMBER(8,2),
    mld_stdmsrtterrein_malus -- boete/korting bij overschrijding [per dag]
        NUMBER(8,2),
    mld_stdmsrtterrein_malusmax
        NUMBER(8,2),
    mld_stdmsrtterrein_t_acctijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_acc CHECK(mld_stdmsrtterrein_t_acctijd.tijdsduur >= 0),
    mld_stdmsrtterrein_t_acc_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ac1 CHECK(mld_stdmsrtterrein_t_acc_pr1.tijdsduur >= 0),
    mld_stdmsrtterrein_t_acc_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ac2 CHECK(mld_stdmsrtterrein_t_acc_pr2.tijdsduur >= 0),
    mld_stdmsrtterrein_t_acc_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ac4 CHECK(mld_stdmsrtterrein_t_acc_pr4.tijdsduur >= 0),
    mld_stdmsrtterrein_t_uitvtijd /* pr3 */
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_uit CHECK(mld_stdmsrtterrein_t_uitvtijd.tijdsduur >= 0),
    mld_stdmsrtterrein_t_uitv_pr1
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ui1 CHECK(mld_stdmsrtterrein_t_uitv_pr1.tijdsduur >= 0),
    mld_stdmsrtterrein_t_uitv_pr2
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ui2 CHECK(mld_stdmsrtterrein_t_uitv_pr2.tijdsduur >= 0),
    mld_stdmsrtterrein_t_uitv_pr4
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_stdmsrtterrein_t_ui4 CHECK(mld_stdmsrtterrein_t_uitv_pr4.tijdsduur >= 0),
    mld_stdmsrtterrein_regime -- optioneel afwijkend afhandelingsregime (may be null)
        NUMBER(2)
        CONSTRAINT mld_c_stdmsrtterrein_regime CHECK (mld_stdmsrtterrein_regime IN (1,2,3)), -- 1=kantoortijden, 2=openingstijden, 3=24x7
    CONSTRAINT mld_u_mld_stdmsrtterrein UNIQUE(alg_srtterreinsector_key, mld_stdmelding_key)
);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_acctijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_acc_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_acc_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_acc_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_uitvtijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_uitv_pr1 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_uitv_pr2 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_stdmsrtterrein MODIFY mld_stdmsrtterrein_t_uitv_pr4 DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);

-- Kruistabel tussen KB(faq) en standaardmeldingen
CREATE_TABLE(mld_stdmeldingfaq, 0)
(
    mld_stdmeldingfaq_key
        NUMBER(10)
        CONSTRAINT mld_k_stdmeldingfaq_key PRIMARY KEY,
    ins_discipline_key
        NUMBER(10)
        NOT_NULL(ins_discipline_key, mld_c_ins_discipline_key3)
        CONSTRAINT mld_r_mld_discipline_key1 REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE,
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key4 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE,
    fac_faq_key
        NUMBER(10)
        NOT_NULL(fac_faq_key, mld_c_fac_faq_key)
        CONSTRAINT mld_r_fac_faq_key1 REFERENCES fac_faq(fac_faq_key) ON DELETE CASCADE
);

-- Kruistabel tussen KB(faq) en opdrachttypen.
CREATE_TABLE(mld_typeopdrfaq, 0)
(
    mld_typeopdrfaq_key
        NUMBER(10)
        CONSTRAINT mld_k_typeopdrfaq_key PRIMARY KEY,
    mld_typeopdr_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_typeopdr_key4 REFERENCES mld_typeopdr(mld_typeopdr_key) ON DELETE CASCADE,
    fac_faq_key
        NUMBER(10)
        NOT_NULL(fac_faq_key, mld_c_fac_faq_key2)
        CONSTRAINT mld_r_fac_faq_key2 REFERENCES fac_faq(fac_faq_key) ON DELETE CASCADE
);

CREATE_TABLE(mld_discipline_discipline, 0)                        -- Kruistabel voor ins_tab_discipline
(
    mld_discipline_discipline_key
        NUMBER (10) PRIMARY KEY NOT NULL,
    mld_discipline_key1 -- Vakgroep
        NUMBER(10)
        CONSTRAINT mld_k_mld_disc_disc_key1
        REFERENCES ins_tab_discipline(ins_discipline_key) NOT NULL,
    mld_discipline_key2 -- Behandelteam
        NUMBER(10)
        CONSTRAINT mld_r_mld_disc_disc_key2
        REFERENCES ins_tab_discipline(ins_discipline_key) NOT NULL
);

CREATE_TABLE(mld_adres, 0)
(
    mld_adres_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_adres_key PRIMARY KEY,
    mld_adres_naam
        VARCHAR2(60)
        NOT_NULL(mld_adres_naam, mld_c_mld_adres_naam),
    mld_adres_upper
        VARCHAR2(60)
        NOT_NULL(mld_adres_upper, mld_c_mld_adres_upper),
    mld_adres_bezoek_adres
        VARCHAR2(50),
    mld_adres_bezoek_postcode
        VARCHAR2(12),
    mld_adres_bezoek_plaats
        VARCHAR2(30),
    mld_adres_bezoek_land
        VARCHAR2(30),
    mld_adres_post_adres
        VARCHAR2(50),
    mld_adres_gebouw_ruimte
        VARCHAR2(30),
    mld_adres_post_postcode
        VARCHAR2(12),
    mld_adres_post_plaats
        VARCHAR2(30),
    mld_adres_post_land
        VARCHAR2(30),
    mld_adres_contactpersoon
        VARCHAR2(30),
    mld_adres_contactpers_telefoon
        VARCHAR2(20),
    mld_adres_contactpers_email
        VARCHAR2(200),
    mld_adres_contactpers_bureau
        VARCHAR2(20),
    mld_adres_telefoon
        VARCHAR2(20),
    mld_adres_email
        VARCHAR2(200),
    alg_locatie_key
        NUMBER(10)
        CONSTRAINT mld_r_alg_locatie_key3 REFERENCES alg_locatie (alg_locatie_key) ON DELETE CASCADE,
    mld_adres_aanmaak
        DATE
        DEFAULT SYSDATE,
    mld_adres_verwijder
        DATE,
    mld_adres_factuuradres
        NUMBER(1)
        CONSTRAINT mld_c_mld_adres_factuuradres CHECK(mld_adres_factuuradres IS NULL
                                                   OR mld_adres_factuuradres = 1),
    mld_adres_opdrachtadres
        NUMBER(1)
        CONSTRAINT mld_c_mld_adres_opdrachtadres CHECK(mld_adres_opdrachtadres IS NULL
                                                    OR mld_adres_opdrachtadres = 1),
    mld_adres_afleveradres
        NUMBER(1)
        CONSTRAINT mld_c_mld_adres_afleveradres CHECK(mld_adres_afleveradres IS NULL
                                                   OR mld_adres_afleveradres = 1),
    CONSTRAINT mld_c_mld_adressen CHECK(mld_adres_factuuradres IS NOT NULL
                                     OR mld_adres_opdrachtadres IS NOT NULL
                                     OR mld_adres_afleveradres IS NOT NULL)
);

ALTER TABLE alg_gebouw ADD
    mld_adres_key NUMBER(10)
        CONSTRAINT alg_r_mld_adres_key1 REFERENCES mld_adres(mld_adres_key);

ALTER TABLE prs_bedrijf ADD
(
    mld_adres_key_lev
        NUMBER(10)
        CONSTRAINT prs_r_mld_adres_key1 REFERENCES mld_adres(mld_adres_key),
    mld_adres_key_fac
        NUMBER(10)
        CONSTRAINT prs_r_mld_adres_key_fac1 REFERENCES mld_adres(mld_adres_key)
);

ALTER TABLE prs_afdeling ADD
    mld_adres_key
        NUMBER(10)
        CONSTRAINT alg_r_mld_adres_key2 REFERENCES mld_adres(mld_adres_key);

ALTER TABLE prs_perslid ADD
    mld_adres_key
        NUMBER(10)
        CONSTRAINT prs_r_mld_adres_key2 REFERENCES mld_adres(mld_adres_key);

ALTER TABLE prs_project ADD
    mld_adres_key
        NUMBER(10)
        CONSTRAINT prs_r_mld_adres_key3 REFERENCES mld_adres(mld_adres_key);

/* Workflow tables */

CREATE_TABLE(mld_workflowstep, 0)
(  mld_workflowstep_key
      NUMBER(10)
   CONSTRAINT mld_k_mld_workflowstep_key PRIMARY KEY,
  mld_workflowstep_start_key
      NUMBER(10)
   CONSTRAINT mld_r_mld_workflowstep_key1 REFERENCES mld_workflowstep(mld_workflowstep_key),
  mld_stdmelding_key
      NUMBER(10)
      NOT_NULL(mld_stdmelding_key, mld_c_mld_stdmelding_key2)
      CONSTRAINT mld_r_mld_stdmelding_key2 REFERENCES mld_stdmelding,
  mld_workflowstep_omschrijving
      VARCHAR2(60),
  mld_workflowstep_jointype
      NUMBER(2) -- 0 = AND, 1 = (X)OR, 2 = SYNC
      DEFAULT 0
      NOT_NULL(mld_workflowstep_jointype, mld_c_mld_wfstep_jointype),
  mld_workflowstep_eindtype
      NUMBER(2) -- 0 = sla van stdmelding, 1 = max einddatum van rootmelding
      DEFAULT 0
      NOT_NULL(mld_workflowstep_eindtype, mld_c_mld_workflowstep_eindtyp),
  mld_workflowstep_attachments NUMBER(3)
      DEFAULT 1 NOT NULL
);


CREATE_TABLE(mld_workflowrule, 0)
(  mld_workflowrule_key
      NUMBER(10)
      CONSTRAINT mld_k_mld_workflowrule_key PRIMARY KEY,
   mld_workflowstep_key
      NUMBER(10)
      NOT_NULL(mld_workflowstep_key, mld_c_mld_workflowstep_key1)
      CONSTRAINT mld_r_mld_workflowstep_key2 REFERENCES mld_workflowstep(mld_workflowstep_key) ON DELETE CASCADE,
   mld_workflowrule_omschrijving
      VARCHAR2(60),
   mld_workflowrule_result
      NUMBER(1)
      CONSTRAINT mld_c_mld_workflowrule_result CHECK(mld_workflowrule_result IN (0,1)),
   mld_workflowstep_next_key
      NUMBER(10)
      NOT_NULL(mld_workflowstep_next_key, mld_c_mld_workflowstep_key2)
      CONSTRAINT mld_r_mld_workflowstep_key3 REFERENCES mld_workflowstep(mld_workflowstep_key) ON DELETE CASCADE,
   mld_workflowrule_condition
      VARCHAR2(4000)  -- should evaluate to TRUE in order to be executed
);

CREATE_TABLE(mld_melding,0)
(
    mld_melding_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_melding_key PRIMARY KEY,
    mld_melding_module
        VARCHAR2(3)
        NOT_NULL(mld_melding_module, mld_c_mld_melding_module),
    mld_ins_srtinst_keys
        NUMBER(10),
    mld_melding_parentkey   --  moedermelding
        NUMBER(10) REFERENCES mld_melding(mld_melding_key),
    mld_melding_mldgroup_key
        NUMBER(10) REFERENCES mld_melding(mld_melding_key),
    mld_meldbron_key
        NUMBER(10)
        NOT_NULL(mld_meldbron_key, mld_r_mld_meldbron_key1)
        CONSTRAINT mld_r_mld_meldbron_key2 REFERENCES mld_meldbron,
    mld_meldbron_nr
        VARCHAR2(30),
    mld_oorzaak_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_oorzaak_key REFERENCES mld_oorzaak,
    mld_alg_locatie_key
        NUMBER(10)
        CONSTRAINT mld_r_alg_locatie_key2 REFERENCES alg_locatie(alg_locatie_key),
    mld_alg_onroerendgoed_keys
        NUMBER(10),
    mld_melding_datum
        DATE
        NOT_NULL(mld_melding_datum, mld_c_mld_melding_datum),
    mld_melding_onderwerp /* optionele korte omschrijving */
        VARCHAR2(200),
    mld_melding_onderwerp_ai /* AI generated onderwerp */
        VARCHAR2(200),
    mld_melding_omschrijving
        CLOB,
    mld_melding_opmerking
        VARCHAR2(4000),
    mld_melding_behandelaar_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key9 REFERENCES prs_perslid(prs_perslid_key),
    mld_melding_behandelaar2_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key12 REFERENCES prs_perslid(prs_perslid_key),
    mld_ins_discipline_key
        NUMBER(10)
        CONSTRAINT mld_r_ins_discipline_key4 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_stdmelding_key
        NUMBER(10)
        NOT_NULL(mld_stdmelding_key, mld_c_mld_stdmelding_key)
        CONSTRAINT mld_r_mld_stdmelding_key REFERENCES mld_stdmelding,
    mld_melding_t_uitvoertijd  -- freeze van stdmelding-uitvoertijd ten tijde van melden
        MLD_T_UITVOERTIJD
        CONSTRAINT mld_c_mld_melding_t_uitvtijd CHECK (mld_melding_t_uitvoertijd.tijdsduur >= 0),
    mld_melding_t_accepttijd
        MLD_T_UITVOERTIJD,
    mld_melding_einddatum  -- geplande einddatum, trigger vult eventueel
        DATE,
    mld_melding_actiedatum  -- optionele datum voor volgende actie
        DATE,
    mld_melding_t_respijt
        MLD_T_UITVOERTIJD,  -- tijdsduur die van de doorlooptijd afgetrokken wordt
    mld_melding_indult
        NUMBER(1)  -- individueel vrijgesteld van SLA-meting/beoordeling (1) of niet (0)
        DEFAULT 0
        CONSTRAINT mld_c_mld_melding_indult1 CHECK(mld_melding_indult IN (0, 1))
        NOT_NULL(mld_melding_indult, mld_c_mld_melding_indult2),
    mld_melding_afgerond
        NUMBER(1)  -- SLA-gegevens bevroren (1) of niet(0)
        DEFAULT 0
        CONSTRAINT mld_c_mld_melding_afgerond1 CHECK(mld_melding_afgerond IN (0, 1))
        NOT_NULL(mld_melding_afgerond, mld_c_mld_melding_afgerond2),
    mld_melding_einddatum_std  -- SLA freeze einddatum,  trigger vult eventueel
        DATE,
    mld_melding_acceptdatum_std  -- sla freeze acceptatie
        DATE,
    mld_melding_tag_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_melding_tag REFERENCES mld_melding_tag(mld_melding_tag_key),
    mld_melding_geprint
        NUMBER(1)
        CONSTRAINT mld_c_mld_melding_geprint CHECK(mld_melding_geprint IS NULL
                                                OR mld_melding_geprint = 1),
    prs_kostenplaats_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_kostenplaats_key1 REFERENCES prs_kostenplaats(prs_kostenplaats_key),
    mld_kosten_klant
        NUMBER(1)
        CONSTRAINT mld_c_mld_kosten_klant CHECK(mld_kosten_klant IS NULL
                                             OR mld_kosten_klant = 1),
    mld_melding_document
        VARCHAR2(512),
    mld_melding_ordernr
        VARCHAR2(30),
    prs_perslid_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key REFERENCES prs_perslid(prs_perslid_key),
    prs_afdeling_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_afdeling_key REFERENCES prs_afdeling(prs_afdeling_key),
    prs_perslid_key_voor
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key1 REFERENCES prs_perslid(prs_perslid_key),
        CONSTRAINT mld_c_prs_perslid_key_voor CHECK(prs_perslid_key_voor IS NOT NULL),
    mld_melding_status
        NUMBER(10)
        CONSTRAINT mld_c_mld_status1 CHECK(mld_melding_status IN (0,1,2,4,5,6,7,99)),
    mld_adres_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_adres_key1 REFERENCES mld_adres(mld_adres_key),
    mld_melding_spoed   /* prioriteit: 1 = kritiek, 2=hoog, 3=normaal, 4=laag, 5=hold(?), matcht mld_stdmelding_uitvoertijd_prX */
        NUMBER(1),
    mld_melding_impact   /* optionele onderbouwing van de prioriteit dimensie 1 */
        NUMBER(2),
    mld_melding_urgentie /* optionele onderbouwing van de prioriteit dimensie 2 */
        NUMBER(2),
    fac_activiteit_key
        NUMBER(10)
        CONSTRAINT fac_r_fac_activiteit1 REFERENCES fac_activiteit(fac_activiteit_key) ON DELETE CASCADE,
    mld_workflowstep_key
      NUMBER(10)
      CONSTRAINT mld_r_mld_workflowstep_key4 REFERENCES mld_workflowstep(mld_workflowstep_key),
    mld_melding_start_key
      NUMBER(10)
      CONSTRAINT mld_r_mld_melding_key4 REFERENCES mld_melding(mld_melding_key),
    mld_melding_kto_type /* M = melding, R = reservering, B = bestelling */
       VARCHAR2(1),
    mld_melding_kto_key /* mld_melding_key, res_rsv_ruimte_key, bes_bestelling_key */
       NUMBER(10),
    mld_melding_kto -- antwoord op de vraag indien mld_stdmelding_kto = 2|3: 0 = nee:niet meedoen, 1 = ja:meedoen
        NUMBER(1),
    mld_melding_kto_verstuurd -- Is er een kto uitnodiging verstuurd, zo ja registreer datum
        DATE,
    mld_melding_externnr    /* voor koppelingen met externe systemen */
        VARCHAR2(1000),
    mld_melding_externsyncdate    /* voor koppelingen met externe systemen */
        DATE,
    mld_melding_flag
        NUMBER(1),
    mld_melding_publiek
        NUMBER(1)
        DEFAULT 0      /* 0=niet publiek, 1=publiek, anderen met gelijkwaardige MLDUSE hebben readrecht hierop */
        NOT NULL,
    mld_melding_actiecode
        NUMBER(3)
        DEFAULT 1 /* actie bij +1=behandelaar, +2=melder, +128=attentie behandelaar, +256=attentie melder */
        NOT NULL,
    mld_melding_satisfaction
        NUMBER(2),
    mld_melding_satisfaction_op
        VARCHAR2(2000),
    prs_project_key  /* future use: groepeer meldingen in een project (release) oid */
      NUMBER(10)
      CONSTRAINT mld_r_prs_project_key1 REFERENCES prs_project(prs_project_key),
/* in RES_TAB.src:
    res_rsv_ruimte_key
      NUMBER(10)
      CONSTRAINT mld_r_res_rsv_ruimte_key REFERENCES res_rsv_ruimte(res_rsv_ruimte_key) */
    mld_melding_locked_user_key
      NUMBER(10),
    mld_melding_locked_date
      DATE,
    mld_melding_naam_ext
      VARCHAR2(60),
    mld_melding_email_ext
      VARCHAR2(100),
    mld_melding_tel_ext
      VARCHAR2(20),
    mld_melding_dwgx
        NUMBER(16,3),
    mld_melding_dwgy
        NUMBER(16,3),
    mld_melding_dwgz
        NUMBER(16,3),
    mld_melding_x
        NUMBER(16,6),
    mld_melding_y
        NUMBER(16,6),
    mld_melding_z
        NUMBER(16,6),
    mld_melding_conceptstatus  // instemmingstatus, 0:geen concept=ingestemd, &1, &2, &4 see documentation
        NUMBER(3)
        DEFAULT 0
        NOT NULL
);

ALTER TABLE mld_melding MODIFY mld_melding_t_uitvoertijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_melding MODIFY mld_melding_t_accepttijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);
ALTER TABLE mld_melding MODIFY mld_melding_t_respijt DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);

COMMENT ON COLUMN mld_workflowrule.mld_workflowrule_result IS '0 is failure/rejection, 1 is success';
COMMENT ON COLUMN mld_melding.mld_workflowstep_key IS 'references the workflow step that this melding corresponds to';
COMMENT ON COLUMN mld_melding.mld_melding_start_key IS 'references the initiating mld_melding if this is a workflow step';

ALTER TABLE fac_nieuws ADD
    mld_melding_key
        NUMBER(10) CONSTRAINT mld_r_mld_melding_key8 REFERENCES mld_melding(mld_melding_key) ON DELETE SET NULL;


CREATE_TABLE(mld_opdr,0)
(
    mld_opdr_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_opdr_key PRIMARY KEY,
    mld_opdr_module
        VARCHAR2(3)
        NOT_NULL(mld_opdr_module, mld_c_mld_opdr_module),
    mld_melding_key
        NUMBER(10)
        NOT_NULL(mld_melding_key, mld_r_mld_melding_key1)
        CONSTRAINT mld_r_mld_melding_key2 REFERENCES mld_melding ON DELETE CASCADE,
    mld_opdr_id         /* optionele alternatieve referentie indien afwijkend van meldingkey/volgnr */
        VARCHAR2(30),
    mld_alg_locatie_key
        NUMBER(10)
        CONSTRAINT mld_r_alg_locatie_key4 REFERENCES alg_locatie(alg_locatie_key),
    mld_alg_onroerendgoed_keys
        NUMBER(10),
    mld_uitvoerende_keys
        NUMBER(10)
        NOT_NULL(mld_uitvoerende_keys, mld_c_mld_uitvoerende_keys),
    mld_typeopdr_key
        NUMBER(10)
        NOT_NULL(mld_typeopdr_key, mld_r_mld_typeopdr_key1)
        CONSTRAINT mld_r_mld_typeopdr_key2 REFERENCES mld_typeopdr,
    mld_statusopdr_key
        NUMBER(10)
        CONSTRAINT mld_c_mld_statusopdr_key2 CHECK (mld_statusopdr_key BETWEEN 1 AND 10),
    mld_standaardopdr_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_standaardopdr_key REFERENCES mld_standaardopdr,
    mld_opdr_omschrijving
        VARCHAR2(4000),
    mld_opdr_datumbegin
        DATE
        NOT_NULL(mld_opdr_datumbegin, mld_c_mld_opdr_datumbegin),
    mld_opdr_dagen        /* deprecated DB7 */
        NUMBER(4),
    mld_opdr_einddatum    /* wordt op termijn vervanger van mld-opdr_dagen */
        DATE,
    mld_opdr_plandatum    /* (beoogd) tijdstip van feitelijke start-uitvoering */
        DATE,
    mld_opdr_plandatum2   /* (beoogd) tijdstip van einddatum uitvoering */
        DATE,
    mld_opdr_discipline_key
        NUMBER(10)
        NOT_NULL(mld_opdr_discipline_key, mld_c_mld_opdr_discipline_key1)
        CONSTRAINT mld_r_opdr_discipline_key1 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_opdr_werkzaamheden
        VARCHAR2(80),
    mld_opdr_uren
        NUMBER(7,2)
        DEFAULT 0
        CONSTRAINT mld_c_mld_opdr_uren CHECK(mld_opdr_uren >= 0),
    mld_opdr_materiaal
        NUMBER(10,2)
        DEFAULT 0,
    mld_opdr_kosten       /* excl BTW */
        NUMBER(12,2)
        DEFAULT 0,
    mld_opdr_kosten_btw
        NUMBER(12,2)
        DEFAULT 0,
    mld_opdr_fiatbedrag /* Tot zover gefiatteerd */
        NUMBER(11,2),
    prs_kostenplaats_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_kostenplaats_key2 REFERENCES prs_kostenplaats(prs_kostenplaats_key),
    prs_kostensoort_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_kostensoort_key1 REFERENCES prs_kostensoort (prs_kostensoort_key),
    mld_opdr_ordernr
        VARCHAR2(30),
    mld_opdr_contactpersoon
        VARCHAR2(30),
    mld_opdr_geprint
        NUMBER(1)
        CONSTRAINT mld_c_mld_opdr_geprint CHECK(mld_opdr_geprint IS NULL
                                             OR mld_opdr_geprint = 1),
    mld_opdr_teverzenden
        NUMBER(1)
        CONSTRAINT mld_c_mld_opdr_teverz CHECK(mld_opdr_teverzenden IS NULL
                                             OR mld_opdr_teverzenden = 1
                                             OR mld_opdr_teverzenden = 2),  /* NULL=niet verzenden, 1=verzenden bij status 4 en 5, 2=altijd verzenden */
    mld_opdr_teverzenden_datum
        DATE
        DEFAULT NULLDATUM,
    mld_opdr_verzonden
        DATE,
    mld_opdr_bedrijfopdr_volgnr
        NUMBER(10),
    mld_opdr_uurloon
        NUMBER(6,2),
    prs_perslid_key             -- Internal contactperson
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key2 REFERENCES prs_perslid(prs_perslid_key),
    prs_contactpersoon_key          -- External contactperson
        NUMBER(10)
        CONSTRAINT mld_r_prs_contactpersoon_key REFERENCES prs_contactpersoon(prs_contactpersoon_key) ON DELETE SET NULL,
    mld_opdr_opmerking_fiat
        VARCHAR2(4000),
    fac_activiteit_key
        NUMBER(10)
        CONSTRAINT fac_r_fac_activiteit2 REFERENCES fac_activiteit(fac_activiteit_key) ON DELETE CASCADE,
    mld_opdr_opmerking
        VARCHAR2(4000),
    mld_opdr_flag
        NUMBER(1),
    mld_opdr_approved
        NUMBER(11,2),
    mld_opdr_uren_refiat
        NUMBER(7,2)
        CONSTRAINT mld_c_mld_opdr_uren_refiat CHECK(mld_opdr_uren_refiat IS NULL OR mld_opdr_uren_refiat >= 0),
    mld_opdr_uurloon_refiat
        NUMBER(6,2),
    mld_opdr_materiaal_refiat
        NUMBER(8,2)
        CONSTRAINT mld_c_mld_opdr_mat_refiat CHECK(mld_opdr_materiaal_refiat IS NULL OR mld_opdr_materiaal_refiat >= 0),
    mld_opdr_kosten_refiat
        NUMBER(12,2),
        CONSTRAINT mld_c_mld_opdr_kosten_refiat CHECK(mld_opdr_kosten_refiat IS NULL OR mld_opdr_kosten_refiat >= 0),
    mld_statusopdr_key_refiat
        NUMBER(10)
        CONSTRAINT mld_c_mld_statusopdr_refiat CHECK (mld_statusopdr_key_refiat IN (5,6,8,9)),
    mld_opdr_approved_refiat
        NUMBER(11,2),
    mld_opdr_handfiat /* handmatig fiatteren verzocht (overrule-t evt limieten) */
        NUMBER(1)
        CONSTRAINT mld_c_mld_opdr_handfiat CHECK(mld_opdr_handfiat IS NULL
                                             OR mld_opdr_handfiat = 1),
    mld_opdr_halted  -- is de opdracht onderbroken {0=nee (default) | 1=ja}
        NUMBER(1)
        DEFAULT (0)
        NOT NULL
        CONSTRAINT mld_c_mld_opdr_halted CHECK(mld_opdr_halted IN (0, 1)),
    mld_opdr_meerwerk
        NUMBER(1)
        DEFAULT (0)
        CONSTRAINT mld_c_mld_opdr_meerwerk CHECK(mld_opdr_meerwerk IN (0, 1)),
    mld_opdr_externnr    /* voor koppelingen met externe systemen */
        VARCHAR2(1000),
    mld_opdr_externsyncdate    /* voor koppelingen met externe systemen */
        DATE,
    mld_opdr_laatstgezien
        DATE
        DEFAULT SYSDATE
        NOT NULL,
    mld_opdr_parent_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_opdr_key4 REFERENCES mld_opdr(mld_opdr_key),
    mld_opdr_actiecode
        NUMBER(3)
        DEFAULT 1 /* actie bij +1=FOBO behandelaar, +2=melder, +4=uitvoerende, +128=attentie FOBO, +512=attentie uitvoerende */
        NOT NULL
);

CREATE_TABLE(mld_vrije_dagen, 0)
(
   mld_vrije_dagen_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_vrije_dagen_key PRIMARY KEY,
   mld_vrije_dagen_datum
        DATE
        NOT_NULL(mld_vrije_dagen_datum, mld_c_mld_vrije_dagen_datum),
   mld_vrije_dagen_id VARCHAR2(50)
        DEFAULT ('Default') NOT NULL,

   CONSTRAINT mld_u_mld_vrije_dagen_datum UNIQUE(mld_vrije_dagen_datum, mld_vrije_dagen_id)
);

CREATE_TABLE(mld_melding_object, 0)
(
    mld_melding_object_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_object_key PRIMARY KEY,
    mld_melding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_melding_key5 REFERENCES mld_melding(mld_melding_key) ON DELETE CASCADE
        NOT_NULL(mld_melding_key, mld_c_mld_melding_key),
    ins_deel_key
        NUMBER(10)
        CONSTRAINT mld_r_ins_deel_key1 REFERENCES ins_deel(ins_deel_key),
    mld_melding_object_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(mld_melding_object_aanmaak, mld_c_mld_object_aanmaak),
    mld_melding_object_verwijder
        DATE
        DEFAULT NULLDATUM,
    ins_deelsrtcontrole_key
        NUMBER(10)
        CONSTRAINT mld_r_ins_deelsrtcontrole_key REFERENCES ins_deelsrtcontrole(ins_deelsrtcontrole_key)
);


CREATE_TABLE(mld_srtkenmerk, 0)
(  mld_srtkenmerk_key
      NUMBER(10)
   CONSTRAINT mld_k_mld_srtkenmerk_key PRIMARY KEY
,  mld_srtkenmerk_omschrijving
      VARCHAR2(50)
,  mld_srtkenmerk_upper
      VARCHAR2(50)
,  mld_srtkenmerk_dimensie
      VARCHAR2(10)
,  mld_srtkenmerk_kenmerktype
      VARCHAR2(1)
,  mld_srtkenmerk_systeem -- &1 = systeemkm, &4 = confidential, &8 = anonimiseren
      NUMBER(2)
      DEFAULT 0
      NOT NULL
,  mld_srtkenmerk_lengte
      NUMBER(4)
,  mld_srtkenmerk_dec
      NUMBER(3)
,  mld_srtkenmerk_nmin
      NUMBER(10)
,  mld_srtkenmerk_nmax
      NUMBER(10)
,  fac_kenmerkdomein_key
      NUMBER(10)
      CONSTRAINT mld_r_kenmerkdomein_key1 REFERENCES fac_kenmerkdomein(fac_kenmerkdomein_key)
,  mld_srtkenmerk_aanmaak
      DATE
      DEFAULT SYSDATE
,  mld_srtkenmerk_verwijder
      DATE
      DEFAULT NULLDATUM
,  mld_srtkenmerk_code
      VARCHAR2(60)
,  CONSTRAINT mld_c_mld_srtkenmerk_omschr    CHECK(mld_srtkenmerk_omschrijving IS NOT NULL)
,  CONSTRAINT mld_srtkenmerk_omschrijving    CHECK(mld_srtkenmerk_omschrijving IS NOT NULL)
,  CONSTRAINT mld_u_mld_srtkenmerk_upper    UNIQUE(mld_srtkenmerk_upper, mld_srtkenmerk_verwijder)
,  CONSTRAINT mld_c_mld_srtkenmerk_lengte    CHECK(mld_srtkenmerk_lengte >= 1
                                               AND mld_srtkenmerk_lengte <= 4000)
,  CONSTRAINT mld_c_mld_srtkenmerk_max_min   CHECK(mld_srtkenmerk_nmax >= mld_srtkenmerk_nmin)
,  CONSTRAINT mld_c_mld_srtkenmerk_dec       CHECK(mld_srtkenmerk_dec >= 0
                                               AND mld_srtkenmerk_dec <= mld_srtkenmerk_lengte)
,  CONSTRAINT mld_c_mld_srtkenmerk_aanm      CHECK(mld_srtkenmerk_aanmaak IS NOT NULL)
);

CREATE_TABLE(mld_kenmerk, 0)
(  mld_kenmerk_key
      NUMBER(10)
   CONSTRAINT mld_k_mld_kenmerk_key PRIMARY KEY
,  mld_srtkenmerk_key
      NUMBER(10)
,   mld_stdmelding_key
      NUMBER(10)
,  mld_typeopdr_key
      NUMBER(10)
,  mld_kenmerk_niveau  -- T=srTdiscipline, D=Discipline, S=Stdmelding, O=Opdrachttype, A=Alle meldingen en P=alle oPdrachten.
      VARCHAR2(1)
,  mld_kenmerk_omschrijving
      VARCHAR2(50)  /* optionele overrule van srtkenmerk_omschrijving */
,  mld_kenmerk_code
      VARCHAR2(60)
,  mld_kenmerk_verplicht
      NUMBER(1)
,  mld_kenmerk_groep    /* voor groepsverplichting als mld_kenmerk_verplicht=2 */
      NUMBER(1)
      DEFAULT 0 NOT NULL
,  mld_kenmerk_toonbaar
      NUMBER(1)
,  mld_kenmerk_inlijst
      NUMBER(1)
      DEFAULT 0 NOT NULL
,  mld_kenmerk_volgnummer
      NUMBER(3)
      NOT NULL
,  mld_kenmerk_rolcode  /* voor welke rol(len) is dit kenmerk */
      NUMBER(4)
      DEFAULT 7 /* default alles */
      NOT NULL
,  mld_kenmerk_uniek
      NUMBER(1)
,  mld_kenmerk_regexp
     VARCHAR2(255)
,  mld_kenmerk_hint
     VARCHAR2(255 CHAR)
,  mld_kenmerk_aanmaak
      DATE
      DEFAULT SYSDATE
,  mld_kenmerk_default
      VARCHAR2(4000)
,  mld_kenmerk_show_expr
      VARCHAR2(4000)
,  mld_kenmerk_verwijder
      DATE
      DEFAULT NULLDATUM
,  mld_kenmerk_verplicht_status
      NUMBER(2)
,   mld_kenmerk_obligation_fill  /* 0=Altijd in te vullen, 1=Alleen invulbaar bij verplichting */
      NUMBER(1)
      DEFAULT 0
      NOT NULL
,  mld_kenmerk_onderbreken -- 0=Nee (default), 1=Ja, 2=Ja, wissen bij hervatten.
      NUMBER(1)
      DEFAULT 0
      NOT NULL
,  mld_kenmerk_wissen
      NUMBER(1)
      DEFAULT 0
      NOT NULL
,  fac_functie_key
      NUMBER(10)
      CONSTRAINT fac_r_mld_kenmerk_functie REFERENCES fac_functie (fac_functie_key)
,  ins_discipline_key
      NUMBER (10)
      CONSTRAINT mld_r_ins_discipline_key7 REFERENCES ins_tab_discipline(ins_discipline_key) -- default blokbehandelteam
//,  CONSTRAINT mld_r_mld_srtkenmerk_keys       CHECK((mld_typeopdr_key IS NULL AND mld_stdmelding_key IS NOT NULL)
//                                                 OR (mld_typeopdr_key IS NOT NULL AND mld_stdmelding_key IS NULL))
,  CONSTRAINT mld_r_mld_srtkenmerk_key2 FOREIGN KEY(mld_srtkenmerk_key) REFERENCES mld_srtkenmerk(mld_srtkenmerk_key)
,  CONSTRAINT mld_c_mld_kenmerk_niveau1       CHECK(mld_kenmerk_niveau IS NOT NULL)
,  CONSTRAINT mld_c_mld_kenmerk_niveau2       CHECK(mld_kenmerk_niveau IN ('T','D','S','O','A','P'))
,  CONSTRAINT mld_c_mld_kenmerk_toonbaar      CHECK(mld_kenmerk_toonbaar IS NULL
                                                 OR mld_kenmerk_toonbaar = 1)
,  CONSTRAINT mld_c_mld_kenmerk_aanmaak       CHECK(mld_kenmerk_aanmaak IS NOT NULL)
,  CONSTRAINT mld_u_mld_kenmerk              UNIQUE(mld_srtkenmerk_key, mld_stdmelding_key, mld_typeopdr_key, mld_kenmerk_niveau, mld_kenmerk_omschrijving, mld_kenmerk_groep, mld_kenmerk_verwijder)
,  CONSTRAINT mld_r_mld_srtkenmerk_key3 FOREIGN KEY(mld_typeopdr_key) REFERENCES mld_typeopdr(mld_typeopdr_key) ON DELETE CASCADE
);

CREATE_TABLE(mld_kenmerkmelding, 0)
(  mld_kenmerkmelding_key
      NUMBER(10)
   CONSTRAINT mld_k_mld_kenmerkmelding_key PRIMARY KEY
,  mld_melding_key
      NUMBER(10)
,  mld_kenmerk_key
      NUMBER(10)
,  mld_kenmerkmelding_waarde
      VARCHAR2(4000)
,  mld_kenmerkmelding_aanmaak
      DATE
      DEFAULT SYSDATE
,  mld_kenmerkmelding_verwijder
      DATE
      DEFAULT NULLDATUM
,  CONSTRAINT mld_r_mld_kenmerk_melding_key1     CHECK(mld_melding_key IS NOT NULL)
,  CONSTRAINT mld_r_mld_kenmerk_key1             CHECK(mld_kenmerk_key IS NOT NULL)
,  CONSTRAINT mld_r_mld_kenmerk_key2       FOREIGN KEY(mld_kenmerk_key) REFERENCES mld_kenmerk(mld_kenmerk_key)
,  CONSTRAINT mld_c_mld_kenmerkmelding_aanm      CHECK(mld_kenmerkmelding_aanmaak IS NOT NULL)
,  CONSTRAINT mld_u_mld_kenmerkmelding          UNIQUE(mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_verwijder)
,  CONSTRAINT mld_r_kenmerk_melding FOREIGN KEY (mld_melding_key) REFERENCES mld_melding(mld_melding_key) ON DELETE CASCADE
);

CREATE_TABLE(mld_kenmerkopdr, 0)
(  mld_kenmerkopdr_key
      NUMBER(10)
      CONSTRAINT mld_k_mld_kenmerkopdr_key PRIMARY KEY,
   mld_opdr_key
      NUMBER(10),
   mld_kenmerk_key
      NUMBER(10),
   mld_kenmerkopdr_waarde
      VARCHAR2(4000),
   mld_kenmerkopdr_aanmaak
      DATE
      DEFAULT SYSDATE,
   mld_kenmerkopdr_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT mld_r_mld_kenmerk_opdr_key1     CHECK(mld_opdr_key IS NOT NULL),
   CONSTRAINT mld_r_mld_kenmerk_key3             CHECK(mld_kenmerk_key IS NOT NULL),
   CONSTRAINT mld_r_mld_kenmerk_key4       FOREIGN KEY(mld_kenmerk_key) REFERENCES mld_kenmerk(mld_kenmerk_key),
   CONSTRAINT mld_c_mld_kenmerkopdr_aanm      CHECK(mld_kenmerkopdr_aanmaak IS NOT NULL),
   CONSTRAINT mld_u_mld_kenmerkopdr          UNIQUE(mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_verwijder),
   CONSTRAINT mld_r_kenmerk_opdr       FOREIGN KEY (mld_opdr_key) REFERENCES mld_opdr(mld_opdr_key) ON DELETE CASCADE
);

CREATE TABLE mld_kenmerkblokmelding
(  mld_kenmerkblokmelding_key
      NUMBER(10)
      CONSTRAINT mld_k_mld_kenmerkblokmelding_key PRIMARY KEY,
   mld_melding_key
      NUMBER(10)
      CONSTRAINT mld_r_mld_melding_key7 REFERENCES mld_melding(mld_melding_key) ON DELETE CASCADE,
   mld_kenmerk_key -- verwijzing naar het labelkenmerk
      NUMBER(10)
      CONSTRAINT mld_r_mld_kenmerk_key5 REFERENCES mld_kenmerk(mld_kenmerk_key) ON DELETE CASCADE,
   ins_discipline_key
      NUMBER (10)
      CONSTRAINT mld_r_ins_discipline_key6 REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE, -- blokbehandelteam
   prs_perslid_key
      NUMBER (10)
      CONSTRAINT mld_r_prs_perslid_key14 REFERENCES prs_perslid(prs_perslid_key) ON DELETE SET NULL, -- blokbehandelteambehandelaar
   mld_kenmerkblokmelding_afmelddatum
      DATE,
   mld_kenmerkblokmelding_aanmaak
      DATE
      DEFAULT SYSDATE,
   CONSTRAINT mld_u_mld_kenmerkblokmelding UNIQUE(mld_melding_key, mld_kenmerk_key)
);


/* Used to restrict the mld_typeopdr values for a ins_srtdiscipline or even ins_discipline
 * Voorwaarde was (MLD) dat srtdiscipline minstens gevuld was, en eventueel ins_discipline.
 * Voor CNT moet srtdiscipline leeg kunnen zijn. Ik wil er dus naartoe dat de specifiekste
 * geldt en de globalere dan dummy is (dont care)
 */
    CREATE_TABLE(mld_typeopdr_srtdiscipline, 0)
    (
        mld_typeopdr_srtdisc_key
            NUMBER(10)
            PRIMARY KEY,
        mld_typeopdr_key
            NUMBER(10)
            NOT_NULL(mld_typeopdr_key, mld_c_mld_typeopdr_key1)
            CONSTRAINT mld_r_mld_typeopdr_key3 REFERENCES mld_typeopdr(mld_typeopdr_key) ON DELETE CASCADE,
        ins_srtdiscipline_key
            NUMBER(10)
            CONSTRAINT mld_r_ins_srtdiscipline_key2 REFERENCES ins_srtdiscipline(ins_srtdiscipline_key) ON DELETE CASCADE,
        ins_discipline_key
            NUMBER(10)
            CONSTRAINT mld_r_ins_discipline_key3 REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE
    );

CREATE_TABLE(mld_deelwerk, 0)
(
  mld_deelwerk_key               NUMBER(10) PRIMARY KEY,
  prs_perslid_key                NUMBER(10) REFERENCES prs_perslid(prs_perslid_key) ON DELETE CASCADE,
  mld_deelwerk_datum             DATE,
  mld_deelwerk_duur              NUMBER(6),
  ins_deel_key                   NUMBER(10) REFERENCES ins_deel(ins_deel_key) ON DELETE CASCADE,
  fac_usrdata_key_activiteit     NUMBER(10) REFERENCES fac_usrdata(fac_usrdata_key),
  fac_usrdata_key_opdrachtgever  NUMBER(10) REFERENCES fac_usrdata(fac_usrdata_key),
  mld_deelwerk_km                NUMBER(4),
  mld_deelwerk_opmerking         VARCHAR2(100)
);


CREATE_TABLE(mld_deelwerkmateriaal, 0)
(
  mld_deelwerkmateriaal_key     NUMBER(10) PRIMARY KEY,
  mld_deelwerk_key              NUMBER(10) REFERENCES mld_deelwerk(mld_deelwerk_key) ON DELETE CASCADE,
  fac_usrdata_key_materiaal     NUMBER(10) REFERENCES fac_usrdata(fac_usrdata_key),
  mld_deelwerkmateriaal_aantal  NUMBER(6)
);

CREATE_TABLE(mld_melding_note, 0)
(
   mld_melding_note_key             NUMBER (10) PRIMARY KEY,
   mld_melding_key                  NUMBER (10) NOT NULL REFERENCES mld_melding (mld_melding_key) ON DELETE CASCADE,
   mld_melding_note_aanmaak         DATE        DEFAULT SYSDATE,
   mld_melding_note_wijzigdatum     DATE,
   prs_perslid_key                  NUMBER (10) REFERENCES prs_perslid (prs_perslid_key) ON DELETE SET NULL,
   fac_note_group_key               NUMBER (10) REFERENCES fac_note_group(fac_note_group_key) ON DELETE SET NULL,
   mld_melding_note_omschrijving    VARCHAR2 (4000 CHAR),
   mld_melding_note_flag            NUMBER (2) DEFAULT 0, // &1=FE, &2= unused (Altijd zichtbaar voor FOBO) +64=gemailde notitie
   mld_melding_note_parent_key      NUMBER (10) DEFAULT NULL REFERENCES mld_melding_note (mld_melding_note_key) ON DELETE CASCADE,
   fac_tracking_key                 NUMBER (10) REFERENCES fac_tracking (fac_tracking_key) ON DELETE SET NULL /* optionally related to a specific event */
);

CREATE_TABLE(mld_opdr_note, 0)
(
   mld_opdr_note_key                NUMBER (10) PRIMARY KEY,
   mld_opdr_key                     NUMBER (10) NOT NULL REFERENCES mld_opdr (mld_opdr_key) ON DELETE CASCADE,
   mld_opdr_note_aanmaak            DATE        DEFAULT SYSDATE,
   mld_opdr_note_wijzigdatum        DATE,
   prs_perslid_key                  NUMBER (10) REFERENCES prs_perslid (prs_perslid_key) ON DELETE SET NULL,
   fac_note_group_key               NUMBER (10) REFERENCES fac_note_group(fac_note_group_key) ON DELETE SET NULL,
   mld_opdr_note_omschrijving       VARCHAR2 (4000 CHAR),
   mld_opdr_note_flag               NUMBER (2) DEFAULT 4, // &1=FE, &2= unused (Altijd zichtbaar voor FOBO), +4=UITV, +32=onbeantwoorde vraag aan FE, +64=gemailde notitie
   mld_opdr_note_parent_key         NUMBER (10) DEFAULT NULL REFERENCES mld_opdr_note (mld_opdr_note_key) ON DELETE CASCADE,
   fac_tracking_key                 NUMBER (10) REFERENCES fac_tracking (fac_tracking_key) ON DELETE SET NULL /* optionally related to a specific event */
);

-- Improductieve opdrachten, alternatief van mld_opdr om uren op te registreren
CREATE_TABLE(mld_impropdr, 0)
(
   mld_impropdr_key
        NUMBER (10) PRIMARY KEY,
   mld_impropdr_omschrijving
        VARCHAR2 (60) NOT NULL,
   mld_impropdr_code
        VARCHAR2 (10),
   mld_impropdr_onkosten
        NUMBER (1),  -- 1=mag onkosten bij worden geboekt
   mld_impropdr_aanmaak
        DATE
        DEFAULT SYSDATE,
   mld_impropdr_verwijder
        DATE
);

CREATE_TABLE(mld_opdr_uren, 0)
(
    mld_opdr_uren_key
        NUMBER(10) PRIMARY KEY NOT NULL,
    mld_opdr_uren_datum
        DATE NOT NULL,
    mld_opdr_key
        NUMBER(10) CONSTRAINT mld_r_mld_opdr_key1 REFERENCES mld_opdr(mld_opdr_key) ON DELETE CASCADE,
    mld_impropdr_key
        NUMBER(10) CONSTRAINT mld_r_mld_impropdr_key1 REFERENCES mld_impropdr(mld_impropdr_key),
    prs_perslid_key
        NUMBER(10) NOT NULL CONSTRAINT mld_r_prs_perslid_key10 REFERENCES prs_perslid(prs_perslid_key),
    mld_opdr_uren_besteed
        NUMBER(7,4) NOT NULL,
    mld_opdr_uren_status
        NUMBER(1) NOT NULL, --1=Ingevoerd 2=Ter goedkeuring 3=Goedgekeurd 4=Verwerkt
     mld_opdr_uren_opmerking
        VARCHAR2(100),
    mld_opdr_uren_wijzigdatum
        DATE
        DEFAULT SYSDATE,
    mld_opdr_uren_wijziguser_key
        NUMBER(10) CONSTRAINT mld_r_prs_perslid_key13 REFERENCES prs_perslid(prs_perslid_key) ON DELETE SET NULL,
    CONSTRAINT mld_c_mld_opdr_uren1 CHECK ((mld_opdr_key IS NULL AND mld_impropdr_key IS NOT NULL) OR (mld_opdr_key IS NOT NULL AND mld_impropdr_key IS NULL))
);


CREATE_TABLE(mld_kosten, 0)
(
   mld_kosten_key
        NUMBER (10) PRIMARY KEY,
   mld_kosten_omschrijving
        VARCHAR2 (60) NOT NULL,
   mld_kosten_code
        VARCHAR2 (10),
   mld_kosten_type
        NUMBER (1) NOT NULL,   -- 1=boolean, 2=aantalveld, 3=float
   mld_kosten_eenheid
        VARCHAR2 (15),
   mld_kosten_kosten
        NUMBER (8,2),  -- prijs per eenheid, optioneel
   mld_kosten_aanmaak
        DATE
        DEFAULT SYSDATE,
   mld_kosten_verwijder
        DATE
);

-- Onkosten gepaard met de bestede uren, kent zelf geen status
CREATE_TABLE(mld_opdruren_kosten, 0)
(
   mld_opdruren_kosten_key
        NUMBER (10) PRIMARY KEY,
    mld_opdr_uren_key
        NUMBER(10) NOT NULL CONSTRAINT mld_r_mld_opdr_uren_key1 REFERENCES mld_opdr_uren(mld_opdr_uren_key) ON DELETE CASCADE,
   mld_kosten_key
        NUMBER(10) NOT NULL CONSTRAINT mld_r_mld_kosten_key1 REFERENCES mld_kosten(mld_kosten_key),
    mld_opdruren_kosten_besteed
        NUMBER(5,2) NOT NULL
);

-- Dagtotalen voor bepaalde kosten, bijvoorbeeld het totaal aantal kilometers op basis
-- van de kortste route voor de dagen waarbij kilometerkosten zijn aangegeven
CREATE_TABLE(mld_opdruren_dagkosten, 0)
(
    mld_opdruren_dagkosten_key
        NUMBER(10)
        CONSTRAINT mld_k_opdruren_dagkosten_key PRIMARY KEY,
    prs_perslid_key
        NUMBER(10)
        CONSTRAINT mld_r_prs_perslid_key11 REFERENCES prs_perslid(prs_perslid_key),
    mld_opdruren_dagkosten_datum
        DATE
        CONSTRAINT mld_c_opdruren_dagkosten_datum NOT NULL,
    mld_opdruren_dagkosten_aantal
        NUMBER(3),
    mld_opdruren_dagkosten_totaal
        NUMBER(10),
    mld_opdruren_dagkosten_opm
        VARCHAR2(4000),
    mld_opdruren_dagkosten_aanmaak
        DATE
        DEFAULT SYSDATE
);

CREATE_TABLE(mld_dienstniveau, 0)
(
  mld_dienstniveau_key
    NUMBER(10)
    CONSTRAINT mld_k_dienstniveau_key PRIMARY KEY,
  mld_dienstniveau_omschr
    VARCHAR2(60)
    NOT_NULL(mld_dienstniveau_omschr, mld_c_dienstniveau_omschr),
  mld_dienstniveau_opmerking
    VARCHAR2(2000),
  CONSTRAINT mld_u_dienstniveau_omschr UNIQUE (mld_dienstniveau_omschr)
);

CREATE_TABLE(mld_dienstpakket, 0)
(
  mld_dienstpakket_key
    NUMBER(10) PRIMARY KEY,
  mld_dienstniveau_key
    NUMBER(10) REFERENCES mld_dienstniveau(mld_dienstniveau_key),
  mld_stdmelding_key
    NUMBER(10) REFERENCES  mld_stdmelding(mld_stdmelding_key)
);

CREATE_TABLE(mld_stdmelding_srtruimte, 0)
(
    mld_stdmelding_srtruimte_key
        NUMBER(10)
        PRIMARY KEY,
    mld_stdmelding_key
        NUMBER(10)
        NOT_NULL(mld_stdmelding_key, mld_c_mld_stdmelding_key3)
        CONSTRAINT mld_r_mld_stdmelding_key11 REFERENCES mld_stdmelding(mld_stdmelding_key) ON DELETE CASCADE,
    alg_srtruimte_key
        NUMBER(10)
        NOT_NULL(alg_srtruimte_key, ins_c_ins_srtruimte_key)
        CONSTRAINT mld_r_ins_srtruimte_key REFERENCES alg_srtruimte(alg_srtruimte_key) ON DELETE CASCADE,
    CONSTRAINT mld_u_mld_stdmelding_srtruimte UNIQUE(mld_stdmelding_key, alg_srtruimte_key)
);

CREATE_TABLE(mld_opdr_uitvoeren, 0)
(
    mld_opdr_uitvoeren_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_opdr_uitvoeren_key PRIMARY KEY,
    mld_opdr_key
        NUMBER(10)
        NOT_NULL(mld_opdr_key, mld_c_mld_opdr_key)
        CONSTRAINT mld_r_mld_opdr_key2 REFERENCES mld_opdr(mld_opdr_key) ON DELETE CASCADE,
    mld_opdr_uitvoeren_van
        NUMBER(4)
        NOT_NULL(mld_opdr_uitvoeren_van, mld_c_opdr_inzetbaar_van)
        CONSTRAINT mld_c_opdr_inzetbaar_van2 CHECK(mld_opdr_uitvoeren_van>=0 AND mld_opdr_uitvoeren_van<1440),
    mld_opdr_uitvoeren_tot
        NUMBER(4)
        NOT_NULL(mld_opdr_uitvoeren_tot, mld_c_opdr_inzetbaar_tot)
        CONSTRAINT mld_c_opdr_inzetbaar_tot2 CHECK(mld_opdr_uitvoeren_tot>=0 AND mld_opdr_uitvoeren_tot<1440),
    mld_opdr_uitvoeren_dag  -- 0=zondag, 1=maandag, 2=dinsdag, 3=woensdag, 4=donderdag, 5=vrijdag, 6=zaterdag
        NUMBER(1)
        NOT_NULL(mld_opdr_uitvoeren_dag, mld_c_mld_opdr_uitvoeren_dag),
    mld_opdr_uitvoeren_infrequent
        NUMBER(1)
);

CREATE_TABLE(mld_opdr_materiaal, 0)
(
    mld_opdr_materiaal_key
        NUMBER(10)
        CONSTRAINT mld_k_mld_opdr_materiaal_key PRIMARY KEY,
    mld_opdr_key
        NUMBER(10)
        NOT_NULL(mld_opdr_key, mld_c_mld_opdr_key2)
        CONSTRAINT mld_r_mld_opdr_key3 REFERENCES mld_opdr(mld_opdr_key) ON DELETE CASCADE,
    fac_usrdata_key
        NUMBER(10)
        CONSTRAINT fac_r_fac_usrdata_key REFERENCES fac_usrdata(fac_usrdata_key),
    mld_opdr_materiaal_aantal
        NUMBER(8,2)
        NOT_NULL(mld_opdr_materiaal_aantal, mld_c_mld_opdr_mat_aantal),
    mld_opdr_materiaal_eenheidcode
        VARCHAR2(10),
    mld_opdr_materiaal_eenheid
        VARCHAR2(30),
    mld_opdr_materiaal_prijs
       NUMBER(15,7)
       CONSTRAINT mld_c_mld_opdr_mat_prijs CHECK((mld_opdr_materiaal_prijs >= 0) or (mld_opdr_materiaal_prijs IS NULL)),
/* in fin_tab.src:
    fin_btwtabelwaarde_key
        NUMBER(10)
        CONSTRAINT mld_r_fin_btwtabelwaarde1 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key),
*/
    mld_opdr_materiaal_code
        VARCHAR2(30),
    mld_opdr_materiaal_omschr
        VARCHAR2(255),
    mld_opdr_materiaal_info
        VARCHAR2(4000),
    mld_opdr_materiaal_groep
        VARCHAR2(60),
    mld_opdr_materiaal_id
        NUMBER(10),
    mld_opdr_materiaal_extra1
        VARCHAR2(60),
    mld_opdr_materiaal_extra2
        VARCHAR2(60),
    mld_opdr_materiaal_extra3
        VARCHAR2(4000),
    mld_opdr_materiaal_extra4
        VARCHAR2(4000),
    mld_opdr_materiaal_externnr
        VARCHAR2(256),
    mld_opdr_materiaal_extsyncdate
        DATE,
    CONSTRAINT mld_c_mld_opdr_mat_omschr CHECK((mld_opdr_materiaal_omschr IS NULL AND fac_usrdata_key IS NOT NULL) OR (mld_opdr_materiaal_omschr IS NOT NULL AND fac_usrdata_key IS NULL))
);

CREATE_TABLE(mld_afmeldtekst, 0)
(
    mld_afmeldtekst_key
        NUMBER(10)
        CONSTRAINT mld_k_afmeldtekst_key PRIMARY KEY,
    mld_afmeldtekst_naam
        VARCHAR2(60)
        NOT_NULL(mld_afmeldtekst_naam, mld_c_afmeldtekst_naam),
    mld_afmeldtekst_omschrijving
        VARCHAR2(4000)
        NOT_NULL(mld_afmeldtekst_omschrijving, mld_c_mld_afmeldtekst_omschr),
    mld_stdmelding_key
        NUMBER(10)
        CONSTRAINT mld_r_mld_stdmelding_key3 REFERENCES mld_stdmelding (mld_stdmelding_key),
    mld_ins_discipline_key
        NUMBER(10)
        CONSTRAINT mld_r_ins_discipine_key2 REFERENCES ins_tab_discipline(ins_discipline_key),
    mld_afmeldtekst_usefor /* Bitwise 1=Afmeldtekst, 2=Afwijstekst, 4=Opdracht, 8=Reactie-melding*/
        NUMBER(2)
        DEFAULT 1 NOT NULL,
  CONSTRAINT mld_u_afmeldtekst_naam UNIQUE (mld_afmeldtekst_naam)
);

ALTER TABLE alg_ruimte
    ADD mld_dienstniveau_key NUMBER(10)
    REFERENCES mld_dienstniveau(mld_dienstniveau_key) ON DELETE SET NULL;
ALTER TABLE alg_verdieping
    ADD mld_dienstniveau_key NUMBER(10)
    REFERENCES mld_dienstniveau(mld_dienstniveau_key) ON DELETE SET NULL;
ALTER TABLE alg_gebouw
    ADD mld_dienstniveau_key NUMBER(10)
    REFERENCES mld_dienstniveau(mld_dienstniveau_key) ON DELETE SET NULL;
ALTER TABLE alg_locatie
    ADD mld_dienstniveau_key NUMBER(10)
    REFERENCES mld_dienstniveau(mld_dienstniveau_key) ON DELETE SET NULL;

REGISTERONCE('$Id$')

#endif  // MLD
