#ifdef  INS
/*  $Revision$
 *  $Id$
 */

CREATE_TABLE(ins_srtdiscipline,0)
(
    ins_srtdiscipline_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_srtdiscipline_key PRIMARY KEY,
    ins_srtdiscipline_module
        VARCHAR2(3)
        DEFAULT 'INS'
        NOT_NULL(ins_srtdiscipline_module, ins_c_ins_srtdisc_module),
    ins_srtdiscipline_omschrijving
        VARCHAR2(30)
        NOT_NULL(ins_srtdiscipline_omschrijving, ins_c_ins_srtdisc_omschr),
    ins_srtdiscipline_opmerking
        VARCHAR(2000 CHAR),
    ins_srtdiscipline_prefix
        VARCHAR2(3),
    ins_srtdiscipline_kostenklant  /* 0 = uit, 1 = aan, 2 = niet tonen */
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_kk CHECK(ins_srtdiscipline_kostenklant IN (0,1,2)),
    ins_srtdiscipline_alg
        NUMBER(3) DEFAULT(1)
        CONSTRAINT ins_c_ins_srtdiscipline_alg CHECK(ins_srtdiscipline_alg IN (0,1,3,5,7)),
    ins_srtdiscipline_ins
        NUMBER(1) DEFAULT(1)
        CONSTRAINT ins_c_ins_srtdiscipline_ins CHECK(ins_srtdiscipline_ins IN (0,1)),
    ins_srtdiscipline_mld
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_mld CHECK(ins_srtdiscipline_mld IN (0,1)),
    ins_srtdiscipline_bes  /* reserved for future use */
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_bes CHECK(ins_srtdiscipline_bes IN (0,1)),
    ins_srtdiscipline_prs  /* reserved for future use */
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_prs CHECK(ins_srtdiscipline_prs IN (0,1)),
    ins_srtdiscipline_res  /* reserved for future use */
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_res CHECK(ins_srtdiscipline_res IN (0,1)),
    ins_srtdiscipline_cnt  /* reserved for future use */
        NUMBER(1) DEFAULT (0)
        CONSTRAINT ins_c_ins_srtdiscipline_cnt CHECK(ins_srtdiscipline_cnt IN (0,1)),
    ins_srtdiscipline_mldgroup
        NUMBER(3)
        DEFAULT 0
        NOT NULL,
    ins_srtdiscipline_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(ins_srtdiscipline_aanmaak, ins_c_ins_srtdisc_aanmaak),
    ins_srtdiscipline_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT ins_u_ins_srtdisc_omschr UNIQUE (ins_srtdiscipline_omschrijving,
                                                ins_srtdiscipline_verwijder,
                                                ins_srtdiscipline_module)
);


CREATE_TABLE(ins_tab_discipline,0)
(
    ins_discipline_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_discipline_key PRIMARY KEY,
    ins_discipline_module
        VARCHAR2(3)
        DEFAULT 'INS'
        NOT_NULL(ins_discipline_module, ins_c_ins_discipline_module),
    ins_discipline_omschrijving
        VARCHAR2(60)
        NOT_NULL(ins_discipline_omschrijving, ins_c_ins_discipline_omschr),
    ins_discipline_opmerking
        VARCHAR(2000 CHAR),
    ins_discipline_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(ins_discipline_aanmaak, ins_c_ins_discipline_aanmaak),
    ins_discipline_verwijder
        DATE
        DEFAULT NULLDATUM,
    ins_discipline_min_level /* 1; Reserveerbaar object; 2; Verbruiksartikel; 3; Ruimte */
        NUMBER(1),
    ins_discipline_kpnverplicht
        NUMBER(1) DEFAULT(0)
        CONSTRAINT ins_c_ins_discipline_kpn CHECK(ins_discipline_kpnverplicht IN (0,1)),
    ins_srtdiscipline_key
        NUMBER(10)
        //NOT_NULL(ins_srtdiscipline_key, ins_c_ins_srtdiscipline_key1)
        CONSTRAINT ins_r_ins_srtdiscipline_key1 REFERENCES ins_srtdiscipline,
    ins_discipline_email
        VARCHAR2(200),
// Note: this column is defined in PRS_TAB.SRC
//    prs_kostensoort_key
//        NUMBER(10)
//        CONSTRAINT ins_r_prs_kostensoort_key1 REFERENCES prs_kostensoort(prs_kostensoort_key),
    ins_discipline_btw   -- 1=Incl. BTW
        NUMBER(1) DEFAULT(1)
        CONSTRAINT ins_c_ins_discipline_btw CHECK(ins_discipline_btw IN (0,1)),
    ins_discipline_ktopercentage /* percentage dat evt. deelneemt aan KTO (klanttevredenheidsonderzoek), voor MLD, RES, BES */
        NUMBER(3)
        CONSTRAINT ins_c_discipline_ktopercentage CHECK(ins_discipline_ktopercentage BETWEEN 0 AND 100),
    ins_discipline_ktodrempel /* minimum aantal dat evt. deelneemt aan KTO */
        NUMBER(3),
    ins_discipline_volgnr
        NUMBER(4),
    CONSTRAINT ins_u_ins_discipline_omschr UNIQUE (ins_discipline_omschrijving,
                                                   ins_srtdiscipline_key,
                                                   ins_discipline_verwijder,
                                                   ins_discipline_module)
);

ALTER TABLE fac_menu ADD
(
    ins_discipline_key
        NUMBER(10)
        CONSTRAINT fac_r_menu3 REFERENCES ins_tab_discipline (ins_discipline_key)
);
ALTER TABLE fac_menu ADD
(
    ins_srtdiscipline_key
        NUMBER(10)
        CONSTRAINT fac_r_menu4 REFERENCES ins_srtdiscipline (ins_srtdiscipline_key)
);

ALTER TABLE fac_groeprechten
     ADD CONSTRAINT fac_r_groeprechten_disc FOREIGN KEY (ins_discipline_key)
     REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE;

ALTER TABLE fac_profielwaarde ADD
(
    ins_discipline_key
        NUMBER(10)
        REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE
);

ALTER TABLE fac_import_app ADD
(
    ins_discipline_key
        NUMBER(10)
        REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE
);

CREATE_TABLE(ins_srtgroep,0)
(
    ins_srtgroep_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_srtgroep_key PRIMARY KEY,
    ins_discipline_key
        NUMBER(10)
        NOT_NULL(ins_discipline_key, ins_r_ins_discipline_key1)
        CONSTRAINT ins_r_ins_discipline_key2 REFERENCES ins_tab_discipline,
    ins_srtgroep_module
        VARCHAR2(3)
        DEFAULT 'INS'
        NOT_NULL(ins_srtgroep_module, ins_c_ins_srtgroep_module),
    ins_srtgroep_omschrijving
        VARCHAR2(60)
        NOT_NULL(ins_srtgroep_omschrijving, ins_c_ins_srtgroep_omschr),
    ins_srtgroep_upper
        VARCHAR2(60)
        NOT_NULL(ins_srtgroep_upper, ins_c_ins_srtgroep_upper),
    ins_srtgroep_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(ins_srtgroep_aanmaak, ins_c_ins_srtgroep_aanmaak),
    ins_srtgroep_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT ins_u_ins_srtgroep_upper UNIQUE(ins_discipline_key, ins_srtgroep_upper, ins_srtgroep_verwijder, ins_srtgroep_module)
);

CREATE_TABLE(ins_srtdeel,0)
(
    ins_srtdeel_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_srtdeel_key PRIMARY KEY,
    ins_srtgroep_key
        NUMBER(10)
        NOT_NULL(ins_srtgroep_key, ins_r_ins_srtgroep_key1)
        CONSTRAINT ins_r_ins_srtgroep_key2 REFERENCES ins_srtgroep,
    ins_srtdeel_module
        VARCHAR2(3)
        DEFAULT 'INS'
        NOT_NULL(ins_srtdeel_module, ins_c_ins_srtdeel_module),
    ins_srtdeel_code
        VARCHAR2(10)
        NOT_NULL(ins_srtdeel_code, ins_c_ins_srtdeel_code),
    ins_srtdeel_code_upper
        VARCHAR2(10)
        NOT_NULL(ins_srtdeel_code_upper, ins_c_ins_srtdeel_upcode),
    ins_srtdeel_omschrijving
        VARCHAR2(100)
        NOT_NULL(ins_srtdeel_omschrijving, ins_c_ins_srtdeel_omschrijving),
    ins_srtdeel_upper
        VARCHAR2(100)
        NOT_NULL(ins_srtdeel_upper, ins_c_ins_srtdeel_upper),
    ins_srtdeel_opmerking
        VARCHAR(2000 CHAR),
    ins_srtdeel_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(ins_srtdeel_aanmaak, ins_c_ins_srtdeel_aanmaak),
    ins_srtdeel_verwijder
        DATE
        DEFAULT NULLDATUM,
    ins_srtdeel_volgnr
        NUMBER(3),
    ins_srtdeel_prijs
        NUMBER(8,2),
    ins_srtdeel_inkprijs
        NUMBER(8,2),
    ins_srtdeel_btw
        NUMBER(3),
    ins_srtdeel_eenheid
        VARCHAR2(30),
    ins_srtdeel_dimensie
        NUMBER(1),
    ins_srtdeel_acadsymbol /* ACADSYMBOL vanuit INV_TAB veplaatst */
        VARCHAR2(256),
    ins_srtdeel_acad_tagvalue /* TAGVALUE vanuit ACAD */
        VARCHAR2(30),
    ins_srtdeel_cadlayer
        VARCHAR2(256),
    ins_srtdeel_cadlaylinetype
        VARCHAR2(256),
    ins_srtdeel_cadlaycolor
        NUMBER(3)
        CONSTRAINT ins_c_ins_srtdeel_cadlaycolor CHECK(ins_srtdeel_cadlaycolor > 0 AND
                                                       ins_srtdeel_cadlaycolor < 256),
    ins_srtdeel_opmaat    /* INS: niet(0)/wel(1) op maat getekend BES: wel(1)/geen(0) preview tonen voor bestellen */
        NUMBER(1)
        DEFAULT 0,
    ins_srtdeel_binding  /* 32=Kan als onderdeel,16=Kan persoonsgebonden,8=Kan afdelingsgebonden,4=Kan terreingebonden,2=Kan werkplekgebonden,1=Kan ruimtegebonden, 63=alles mag */
        NUMBER(3),
    ins_srtdeel_nr
        VARCHAR2(32),
-- In: PRS_TAB.SRC
--    prs_bedrijf_key
--        NUMBER(10)
--        CONSTRAINT bes_r_prs_bedrijf_key2 REFERENCES prs_bedrijf(prs_bedrijf_key),
    ins_srtdeel_vervaldatum
        DATE,
    ins_srtdeel_image
        VARCHAR2(255),
    ins_srtdeel_veelvoud
        NUMBER(6),
    ins_srtdeel_minimum
        NUMBER(6),
    ins_srtdeel_prsflex    /* kan wel(1) of geen (0)persoonsafhankelijke flexkenmerken bevatten */
        NUMBER(1)
        DEFAULT 0,
    ins_srtdeel_uitleenbaar  /* Objectsoort kan wel(1) of niet(0) uitgeleend worden */
        NUMBER(1)
        DEFAULT 0,
    ins_srtdeel_voorraadmin
        NUMBER(6),
    ins_srtdeel_voorraadmax
        NUMBER(6),
    ins_srtdeel_mjb_grensscore1
        NUMBER(6,2),
     CONSTRAINT ins_c_ins_srtdeel_binding CHECK ((ins_srtdeel_module ='INS' AND ins_srtdeel_binding > 0) OR ins_srtdeel_module <> 'INS')
);


/* New table for relations between object types; designed for key management (formerly SLE)*/
CREATE_TABLE(ins_srtdeel_srtdeel, 0)
(
ins_srtdeel_srtdeel_key NUMBER(10) primary key,
ins_srtdeel_key_1       NUMBER(10) not null references ins_srtdeel,
ins_srtdeel_key_2       NUMBER(10) not null references ins_srtdeel,
ins_module              VARCHAR2(3),
CONSTRAINT ins_u_ins_srtdeel_srtdeel UNIQUE (ins_srtdeel_key_1, ins_srtdeel_key_2)
);


CREATE_TABLE(ins_deel,0)
(
    ins_deel_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_deel_key PRIMARY KEY,
    ins_deel_module
        VARCHAR2(3)
        DEFAULT 'INS'
        NOT_NULL(ins_deel_module, ins_c_ins_deel_module),
    ins_srtdeel_key
        NUMBER(10)
        NOT_NULL(ins_srtdeel_key, ins_r_deel_srtdeel_key1)
        CONSTRAINT ins_r_deel_srtdeel_key2 REFERENCES ins_srtdeel,
    ins_alg_ruimte_key
        NUMBER(10),
    ins_alg_ruimte_type
        VARCHAR2(1),
/*
 * INS_ALG_RUIMTE_TYPE heeft de volgende waarden:
 * 'R' : als INS_ALG_RUIMTE_KEY een ruimte aanduidt.
 * 'T' : als INS_ALG_RUIMTE_KEY een terreinsector aanduidt.
 * 'W' : als INS_ALG_RUIMTE_KEY een werkplek aanduidt.
 * 'A' : als INS_ALG_RUIMTE_KEY een afdeling aanduidt.
 * 'P' : als INS_ALG_RUIMTE_KEY een persoon aanduidt.
 * Dit wordt in de B_IU-trigger gecontroleerd.
 */
    ins_deel_aantal
        NUMBER(8,2)
        DEFAULT 1
        CONSTRAINT ins_c_ins_deel_aantal2 CHECK
          (ins_deel_aantal is not null and ins_deel_aantal > 0),
    ins_deel_omschrijving
        VARCHAR2(60)
        NOT_NULL(ins_deel_omschrijving, ins_c_ins_deel_omschrijving),
    ins_deel_opmerking
        VARCHAR2(320),
    ins_deel_upper
        VARCHAR2(60),
    ins_deel_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(ins_deel_aanmaak, ins_c_ins_deel_aanmaak),
    ins_deel_vervaldatum
        DATE,
    ins_deel_verwijder
        DATE
        DEFAULT NULLDATUM,
    ins_deel_getekend
        DATE
        DEFAULT NULLDATUM,
    ins_discipline_key
        NUMBER(10)
        CONSTRAINT ins_r_ins_deel_discipline2 REFERENCES ins_tab_discipline(ins_discipline_key),
    ins_alg_locatie_key
        NUMBER(10)
        CONSTRAINT ins_r_ins_deel_locatie2 REFERENCES alg_locatie(alg_locatie_key),
    ins_deel_parent_key
        NUMBER(10)
        CONSTRAINT ins_r_ins_deel_key REFERENCES ins_deel(ins_deel_key),
    ins_deel_omtrek
        NUMBER(8,2),
    ins_deel_oppervlak
        NUMBER(8,2),
    ins_deel_dwgx
        NUMBER(16,3),
    ins_deel_dwgy
        NUMBER(16,3),
    ins_deel_dwgz
        NUMBER(16,3),
    ins_deel_dwgrotatie
        NUMBER(5,1),
    ins_deel_dwgschaal
        NUMBER(5,2),
    ins_deel_x
        NUMBER(16,6),
    ins_deel_y
        NUMBER(16,6),
    ins_alg_ruimte_key_org
        NUMBER(10),
    ins_alg_ruimte_type_org
        VARCHAR2(1),
-- In: RES_TAB.SRC
--    res_rsv_deel_key
--        NUMBER(10)
--        CONSTRAINT ins_r_res_rsv_deel_key REFERENCES res_rsv_deel (res_rsv_deel_key),
    ins_deel_state
        VARCHAR2(128),
    ins_deel_statedate
        DATE,
    ins_deel_t_uitvoertijd
        MLD_T_UITVOERTIJD
        CONSTRAINT ins_c_ins_deel_uitvoertijd1 CHECK(ins_deel_t_uitvoertijd.tijdsduur >= 0),
    ins_deel_actief                   -- Object 0=Inactief, 1=Actief.
        NUMBER(1)
        DEFAULT 1 NOT NULL,
     ins_deel_mjb_score1
        NUMBER(6,2), /* nu: laatst gemeten conditiescore; numeriek omdat vergeleken moet worden met ins_srtdeel_mjb_grensscore1 */
     ins_deel_mjb_score2
        NUMBER(6,2), /* nu: laatst bepaalde prioriteit;  */
-- In: PRS_TAB.SRC
--    prs_perslid_key_beh
--        NUMBER(10)
--        CONSTRAINT ins_r_prs_perslid_key_beh REFERENCES prs_perslid (prs_perslid_key),
-- In: BES_TAB.SRC
--     bes_bestelopdr_key
--        NUMBER(10)
--        CONSTRAINT bes_r_bes_bestelopdr_key3 REFERENCES bes_bestelopdr(bes_bestelopdr_key),
    CONSTRAINT ins_u_ins_deel_upper2 UNIQUE(ins_alg_locatie_key,
           ins_deel_parent_key, ins_srtdeel_key, ins_deel_upper,
           ins_deel_verwijder)
);
ALTER TABLE ins_deel MODIFY ins_deel_t_uitvoertijd DEFAULT MLD_T_UITVOERTIJD(NULL, NULL);

// Track history of ins_deel_states, in principe alleen wijzigende waarden
CREATE_TABLE(ins_deel_state_history, 0)
(
    ins_deel_state_history_key
        NUMBER(10)
        CONSTRAINT ins_k_deel_state_history_key PRIMARY KEY,
    ins_deel_key
        NUMBER(10)
        CONSTRAINT ins_r_ins_deel_key2 REFERENCES ins_deel(ins_deel_key),
    ins_deel_state
        VARCHAR2(128),
    ins_deel_statedate
        DATE,
    ins_deel_state_history_opmerk /* je weet het niet he */
        VARCHAR2(320)
);

CREATE_TABLE(ins_scenario, 0)
(
    ins_scenario_key
        NUMBER(10)
        CONSTRAINT insk_ins_scenario_key PRIMARY KEY,
    ins_scenario_omschrijving
        VARCHAR2(30),
        NOT_NULL(ins_scenario_omschrijving, ins_r_ins_scenario_omschr),
    ins_scenario_status
        NUMBER(3), /* not ietwat ongedefinieerd  */
    ins_scenario_opmerking
        VARCHAR2(4000),
// Note: this column is defined in PRS_TAB.SRC
//    prs_perslid_key
//        NUMBER(10)
//        CONSTRAINT ins_r_prs_perslid_key0 REFERENCES prs_perslid(prs_perslid_key),
    ins_scenario_aanmaak
        DATE
        DEFAULT SYSDATE,
    ins_scenario_verwerkt
        DATE
);

/* welke inspecties, controles etc gelden er voor objecten van deze soorten */
CREATE_TABLE(ins_srtcontrole, 0)
(
    ins_srtcontrole_key
       NUMBER(10)
       PRIMARY KEY,
    ins_srtinstallatie_key
       NUMBER(10),
    ins_srtcontrole_niveau
       VARCHAR2(1)
       CONSTRAINT ins_c_srtcontrole_niveau1 CHECK (ins_srtcontrole_niveau IS NOT NULL AND (ins_srtcontrole_niveau IN( 'D', 'G', 'S'))),
    ins_srtcontrole_omschrijving
        VARCHAR2(60)
        NOT_NULL(ins_srtcontrole_omschrijving, ins_c_srtcontrole_omschrijving),
    ctr_discipline_key NUMBER(10)
        CONSTRAINT ctr_c_ins_srtcontrole_dis_key CHECK(ctr_discipline_key IS NOT NULL)
        CONSTRAINT ctr_c_ins_srtctr_discipline REFERENCES ins_tab_discipline(ins_discipline_key),
    ins_srtcontrole_groep  // vrijblijvende categorisering voor groepering in rapportages
        VARCHAR2(60),
    ins_srtcontrole_info
        VARCHAR2(4000),
    ins_srtcontrole_periode
        NUMBER(6,2)
        NOT_NULL(ins_srtcontrole_periode, ins_c_ins_srtcontrole_periode),
    ins_srtcontrole_eenheid //  0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks, null=niet
        NUMBER(1)
        DEFAULT(1),
    ins_srtcontrole_bits //  details, afhankelijk van de mode (mag best null zijn)
        NUMBER(4),
    ins_srtcontrole_mode //  0=moment-modus of 1=interval-modus
        NUMBER(1)
        DEFAULT(1)
        NOT_NULL(ins_srtcontrole_mode, ins_c_ins_srtcontrole_mode),
    ins_srtcontrole_level //  hierarchy level (relative; lower = more important)
        NUMBER(3)
        DEFAULT(10)
        NOT_NULL(ins_srtcontrole_level, ins_c_ins_srtcontrole_level),
    ins_srtcontrole_uren      // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle) bv tbv capaciteitsplanning
         NUMBER(8,2),
    ins_srtcontrole_materiaal // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle)
         NUMBER(9,2),
    ins_srtcontrole_kosten    // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle) deel 1 (bv BTW hoog)
         NUMBER(11,2),
    ins_srtcontrole_kosten2   // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle) deel 2 (bv BTW laag)
         NUMBER(11,2),
    ins_srtcontrole_kosten3   // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle) deel 3 (spare)
         NUMBER(11,2),
    ins_srtcontrole_percentage // percentage van het aantal delen waarop dit betrekking heeft
        NUMBER(3)
        DEFAULT (100)
        CONSTRAINT ins_c_srtcontrole_percentage CHECK(ins_srtcontrole_percentage BETWEEN 0 AND 100),
    ins_srtcontrole_opmerking
        VARCHAR2(320),
    ins_srtcontrole_eind  // hier eindigt deze
        DATE,
    ins_srtcontrole_options   /* bitwise: 1=(kan)inplannen, 2=(kan)starten, 4=(kan)afmelden, 8=(kan)voltooien */
        NUMBER(3)
        DEFAULT 15
        NOT_NULL(ins_srtcontrole_options, ins_c_ins_srtcontr_options),
    ins_scenario_key
       NUMBER(10)
       DEFAULT 1 NOT NULL
       CONSTRAINT ins_r_ins_scenario_key1 REFERENCES ins_scenario(ins_scenario_key) ON DELETE CASCADE,
/* in fin_tab.src:
    fin_btwtabelwaarde_key
			 NUMBER(10)
 			 CONSTRAINT ins_r_fin_btwtabelwaarde1 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key),
*/
	ins_srtcontrole_afbouwtijd
       NUMBER(6,2)
/* in mld_tab.src:
  mld_stdmelding_key
       NUMBER(10)
       CONSTRAINT mld_r_mld_stdmelding_key7 REFERENCES mld_stdmelding
*/
/* in prs_tab.src:
    ,prs_kostenplaats_key
        NUMBER(10)
        CONSTRAINT ins_r_prs_kostenplaats_key1 REFERENCES prs_kostenplaats(prs_kostenplaats_key)
*/
);

CREATE_TABLE(ins_controlemode, 0)
(
    ins_controlemode_key
       NUMBER(10)
       PRIMARY KEY,
    ins_controlemode_oms
        VARCHAR(30 CHAR)
        NOT_NULL(ins_controlemode_oms, ins_c_controlemode_oms),
    ins_controlemode_opmerking
        VARCHAR(2000 CHAR),
    ins_controlemode_success        // 1=positive/neutral result, 0=negative result
        NUMBER(1)
        DEFAULT(1)
        CONSTRAINT ins_c_ins_controlemode_success CHECK (ins_controlemode_success IN (0,1)),
    ins_srtcontrole_type  // 1=controle, 2=vervanging, 3=certificering, rest ntb
        NUMBER(1)
        DEFAULT(1),
    CONSTRAINT ins_u_ins_controlemode_oms UNIQUE (ins_srtcontrole_type,ins_controlemode_oms)
);

// Eventuele afwijkingen (xcp=exception) per specifiek deel
// De methodiek (flags) en het level kunnen niet overruled worden; fungeert als COALESCE met ins_srtcontrole
// Het kan ook voor alleen respijt bestaan
CREATE_TABLE(ins_srtcontroledl_xcp, 0)
(
    ins_srtcontroledl_xcp_key
       NUMBER(10)
       PRIMARY KEY,
    ins_deel_key
       NUMBER(10)
       NOT NULL REFERENCES ins_deel ON DELETE CASCADE,
    ins_srtcontrole_key
       NUMBER(10)
       NOT NULL REFERENCES ins_srtcontrole ON DELETE CASCADE,
    ins_srtcontroledl_xcp_periode
        NUMBER(6,2),
    ins_srtcontroledl_xcp_eenheid //  0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks
        NUMBER(3),
    ins_srtcontroledl_xcp_bits    //  details, afhankelijk van de mode (mag best null zijn)
        NUMBER(4),
    ins_srtcontroledl_xcp_aantal  // optionele overrule van het ins_deel_aantal tbv deze controle
        NUMBER(8,2),
    ins_srtcontroledl_xcp_aanteh  // optionele overrule van het ins_srtdeel_eenheid tbv deze controle (_eenheid bestond al)
        VARCHAR2(30),
    ins_srtcontroledl_xcp_uren    // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal of ins_srtcontroledl_xcp_aantal) per controle) bv tbv capaciteitsplanning
         NUMBER(8,2),
    ins_srtcontroledl_xcp_materia // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal of ins_srtcontroledl_xcp_aantal) per controle)
         NUMBER(9,2),
    ins_srtcontroledl_xcp_kosten  // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal of ins_srtcontroledl_xcp_aantal) per controle)
         NUMBER(11,2),
    ins_srtcontroledl_xcp_kosten2 // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal of ins_srtcontroledl_xcp_aantal) per controle) deel 2 (bv BTW laag)
         NUMBER(11,2),
    ins_srtcontroledl_xcp_kosten3 // vervangings- of controlekosten (geldt per stuk (ins_deel_aantal) per controle of ins_srtcontroledl_xcp_aantal) deel 3 (spare)
         NUMBER(11,2),
    ins_srtcontroledl_xcp_perc    // percentage van het aantal delen waarop dit betrekking heeft
        NUMBER(3)
        CONSTRAINT ins_c_srtcontroledl_xcp_perc CHECK(ins_srtcontroledl_xcp_perc BETWEEN 0 AND 100),
    ins_srtcontroledl_xcp_groep   // Vrijblijvende categorisering voor groepering in rapportages
        VARCHAR2(60),
    ins_srtcontroledl_xcp_startdat  // Startdatum eerste inspectie.
        DATE,
    ins_srtcontroledl_xcp_eind    // hier eindigt deze
        DATE,
    ins_scenario_key
       NUMBER(10)
       DEFAULT 1 NOT NULL
         CONSTRAINT ins_r_ins_scenario_key2 REFERENCES ins_scenario(ins_scenario_key)  ON DELETE CASCADE,
		ins_srtcontroledl_xcp_opmerk
        VARCHAR2(320),
    CONSTRAINT ins_u_ins_srtcontroledl_xcp UNIQUE (ins_deel_key, ins_srtcontrole_key, ins_scenario_key)
);

/* de feitelijke inspecties */
CREATE_TABLE(ins_deelsrtcontrole, 0)
(
    ins_deelsrtcontrole_key
       NUMBER(10)
       PRIMARY KEY,
    ins_deel_key
       NUMBER(10)
       NOT NULL REFERENCES ins_deel ON DELETE CASCADE,
    ins_srtcontrole_key
       NUMBER(10)
       NOT NULL REFERENCES ins_srtcontrole ON DELETE CASCADE,
    ins_deelsrtcontrole_datum
       DATE,
    ins_deelsrtcontrole_datum_org
       DATE,
    ins_controlemode_key
       NUMBER(10)
       CONSTRAINT ins_r_ins_controlemode_key REFERENCES ins_controlemode,
    ins_deelsrtcontrole_opmerking
        VARCHAR(4000 CHAR),
    ins_deelsrtcontrole_plandatum
       DATE,
    ins_deelsrtcontrole_status // (vooralsnog 0;Ingepland 2;Gestart/In behandeling 5;Afgemeld/Gereed gemeld; 6;Afgerond)
       NUMBER(1)
       DEFAULT (6)
       CONSTRAINT ins_c_deelsrtcontrole_status NOT NULL,
    ins_scenario_key
       NUMBER(10)
       DEFAULT 1 NOT NULL
       CONSTRAINT ins_r_ins_scenario_key3 REFERENCES ins_scenario(ins_scenario_key)  ON DELETE CASCADE,
    ins_deelsrtcontrole_freezecost
        NUMBER(11,2),
    ins_deelsrtcontrole_freezedate
        DATE,
// Note: this column is defined in PRS_TAB.SRC
//    prs_perslid_key
//        NUMBER(10)
//        CONSTRAINT ins_r_prs_perslid_key REFERENCES prs_perslid(prs_perslid_key) ON DELETE SET NULL
    CONSTRAINT ins_u_ins_deelsrtcontrole UNIQUE (ins_deel_key, ins_srtcontrole_key, ins_scenario_key, ins_deelsrtcontrole_datum_org)
);

CREATE_TABLE(ins_import,0)
(
    ins_import_key
        NUMBER(10)
        CONSTRAINT ins_k_ins_import_key PRIMARY KEY,
    alg_ruimte_acadkey
        VARCHAR2(10),
    ins_srtdeel_acadsymbol
        VARCHAR2(8),
    ins_srtdeel_acad_tagvalue
        VARCHAR2(30),
    ins_import_aanmaak
        DATE
        DEFAULT SYSDATE
        CONSTRAINT ins_c_ins_import_aanmaak NOT NULL,
    ins_import_verwijder
        DATE
        DEFAULT NULLDATUM
);

/* Tabellen voor INS_KENMERK-zaken */

CREATE_TABLE(ins_srtkenmerk, 0)
(
   ins_srtkenmerk_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_srtkenmerk_key PRIMARY KEY,
   ins_srtkenmerk_omschrijving
      VARCHAR2(50)
      NOT_NULL(ins_srtkenmerk_omschrijving, ins_c_ins_srtkenmerk_omschr),
   ins_srtkenmerk_upper
      VARCHAR2(50)
      NOT_NULL(ins_srtkenmerk_upper, ins_c_ins_srtkenmerk_upper),
   ins_srtkenmerk_dimensie
      VARCHAR2(10),
   ins_srtkenmerk_kenmerktype
      VARCHAR2(1)
      CONSTRAINT ins_c_ins_srtkenmerk_kenmtype CHECK(ins_srtkenmerk_kenmerktype IN ('C','N','D','T','R','X','L','Q','F','M','E','S','l','B')),
   ins_srtkenmerk_systeem -- &1 = systeemkm, &2 = primary, show in list
      NUMBER(2)
      DEFAULT 0 NOT NULL,
   ins_srtkenmerk_lengte
      NUMBER(4)
      CONSTRAINT ins_c_ins_srtkenmerk_lengte CHECK(ins_srtkenmerk_lengte >= 1
                                               AND ins_srtkenmerk_lengte <= 4000),
   ins_srtkenmerk_dec
      NUMBER(3),
   ins_srtkenmerk_nmin
      NUMBER(10),
   ins_srtkenmerk_nmax
      NUMBER(10),
   fac_kenmerkdomein_key
        NUMBER(10)
        CONSTRAINT fac_r_kenmerkdomein_key1 REFERENCES fac_kenmerkdomein(fac_kenmerkdomein_key),
   ins_srtkenmerk_aanmaak
      DATE
      DEFAULT SYSDATE
      CONSTRAINT ins_c_ins_srtkenmerk_aanm NOT NULL,
   ins_srtkenmerk_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_u_ins_srtkenmerk_upper UNIQUE (ins_srtkenmerk_upper, ins_srtkenmerk_verwijder),
   CONSTRAINT ins_c_ins_srtkenmerk_max_min CHECK(ins_srtkenmerk_nmax >= ins_srtkenmerk_nmin),
   CONSTRAINT ins_c_ins_srtkenmerk_dec CHECK(ins_srtkenmerk_dec >= 0
                                         AND ins_srtkenmerk_dec <= ins_srtkenmerk_lengte)
);

CREATE_TABLE(ins_kenmerk, 0)
(
   ins_kenmerk_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_kenmerk_key PRIMARY KEY,
   ins_srtkenmerk_key
      NUMBER(10)
      NOT_NULL(ins_srtkenmerk_key, ins_r_ins_srtkenmerk_key1)
      CONSTRAINT ins_r_ins_srtkenmerk_key2 REFERENCES ins_srtkenmerk(ins_srtkenmerk_key),
   ins_srtinstallatie_key
      NUMBER(10),
   ins_kenmerk_niveau
      VARCHAR2(1)
      CONSTRAINT ins_c_ins_kenmerk_niveau2 CHECK
            (ins_kenmerk_niveau IS NOT NULL AND (ins_kenmerk_niveau IN('D', 'G', 'S', 'C'))),  /* C=srtcontrole */
   ins_kenmerk_bewerkniveau /* Kenmerk behoort bij individueel Deel of algemeen Srtdeel */
        VARCHAR2(1) DEFAULT 'D' NOT NULL
        CONSTRAINT ins_c_ins_kenmerk_bewerk CHECK(ins_kenmerk_bewerkniveau IN ('D', 'S')),
   ins_kenmerk_verplicht
      NUMBER(1),
   ins_kenmerk_groep
      NUMBER(1)
      DEFAULT 0 NOT NULL,
   ins_kenmerk_toonbaar
      NUMBER(1)
      CONSTRAINT ins_c_ins_kenmerk_toonbaar CHECK(ins_kenmerk_toonbaar IS NULL
                                               OR ins_kenmerk_toonbaar = 1),
   ins_kenmerk_meetwaarde
      NUMBER(1)
      CONSTRAINT ins_c_ins_kenmerk_meetwaarde CHECK(ins_kenmerk_meetwaarde IS NULL
                                               OR ins_kenmerk_meetwaarde = 1),
   ins_kenmerk_wissen
      NUMBER(1)
      DEFAULT 0 NOT NULL
      CONSTRAINT ins_c_ins_kenmerk_wissen CHECK(ins_kenmerk_wissen IN (0,1,2)),
   ins_kenmerk_volgnummer
      NUMBER(3)
      NOT NULL,
   ins_kenmerk_locatiekolom
      VARCHAR2(30),
   ins_kenmerk_uniek
      NUMBER(1),
   ins_kenmerk_regexp
      VARCHAR2(255),
   ins_kenmerk_default
      VARCHAR2(4000),
   ins_kenmerk_hint
      VARCHAR2(255 CHAR),
   ins_kenmerk_aanmaak
      DATE
      DEFAULT SYSDATE
      CONSTRAINT ins_c_ins_kenmerk_aanmaak NOT NULL,
   ins_kenmerk_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_r_ins_srtinstallatie_key1 CHECK(ins_srtinstallatie_key IS NOT NULL OR ins_kenmerk_niveau = 'D'),
   CONSTRAINT ins_u_ins_kenmerk UNIQUE(ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_groep, ins_kenmerk_verwijder)
);

/* De waarde mag in de tabel NULL zijn, maar om de database niet
 * overbodig te vullen worden de NULL-records after-statement weer verwijderd.
 */
CREATE_TABLE(ins_kenmerkdeel,0)
( ins_kenmerkdeel_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_kenmerkdeel_key PRIMARY KEY,
  ins_deel_key // Kan ook naar ins_srtdeel wijzen
      NUMBER(10)
      NOT_NULL(ins_deel_key, ins_r_ins_kenmerk_deel_key1),
   ins_kenmerk_key
      NUMBER(10)
      NOT_NULL(ins_kenmerk_key, ins_r_ins_kenmerk_key1)
      CONSTRAINT ins_r_ins_kenmerk_key2 REFERENCES ins_kenmerk(ins_kenmerk_key),
   ins_kenmerkdeel_waarde
      VARCHAR2(4000),
   ins_kenmerkdeel_aanmaak
      DATE
      DEFAULT SYSDATE
      CONSTRAINT ins_c_ins_kenmerkdeel_aanmaak NOT NULL,
   ins_kenmerkdeel_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_u_ins_kenmerkdeel UNIQUE(ins_kenmerk_key, ins_deel_key, ins_kenmerkdeel_verwijder)
   //  Kan ook naar ins_srtdeel wijzen CONSTRAINT ins_r_kenmerk_deel FOREIGN KEY (ins_deel_key) REFERENCES ins_deel(ins_deel_key) ON DELETE CASCADE
);

-- FSN#28732
// Kenmerken bij inspecties; gebruikt dezelfde kenmerkdefinities als ins, wel eigen waardentabel
CREATE_TABLE(ins_kmdeelsrtcontr,0)
( ins_kmdeelsrtcontr_key
      NUMBER(10)
      CONSTRAINT ins_k_kmdeelsrtcontr_key PRIMARY KEY,
  ins_deelsrtcontrole_key
      NUMBER(10)
      NOT NULL REFERENCES ins_deelsrtcontrole (ins_deelsrtcontrole_key) ON DELETE CASCADE,
   ins_kenmerk_key
      NUMBER(10)
      NOT_NULL(ins_kenmerk_key, ins_c_ins_kenmerk_key1)
      CONSTRAINT ins_r_ins_kenmerk_key3 REFERENCES ins_kenmerk(ins_kenmerk_key),
   ins_kmdeelsrtcontr_waarde
      VARCHAR2(4000),
   ins_kmdeelsrtcontr_aanmaak
      DATE
      DEFAULT SYSDATE
      NOT_NULL(ins_kmdeelsrtcontr_aanmaak,ins_c_kmdeelsrtcontr_aanmaak),
   ins_kmdeelsrtcontr_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_u_ins_kmdeelsrtcontr UNIQUE(ins_kenmerk_key, ins_deelsrtcontrole_key, ins_kmdeelsrtcontr_verwijder)
);


/* De velden aanmaak en verwijder zijn hier toegevoegd om het mechanisme van
 * CASCADE verwijderen in triggers op te kunnen lossen. In de after-statement-trigger
 * van INS_DEELKOPPELING worden de logisch-verwijderde deelkoppelingen echt verwijderd.
 */
CREATE_TABLE(ins_deelkoppeling,0)
(
   ins_deelkoppeling_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_deelkoppeling_key PRIMARY KEY,
   ins_deelkoppeling_van_key
      NUMBER(10)
      NOT_NULL(ins_deelkoppeling_van_key, ins_r_deelkoppeling_van_key1)
      CONSTRAINT ins_r_deelkoppeling_van_key2 REFERENCES ins_deel(ins_deel_key),
   ins_deelkoppeling_naar_key
      NUMBER(10)
      NOT_NULL(ins_deelkoppeling_naar_key, ins_r_deelkoppeling_naar_key1)
      CONSTRAINT ins_r_deelkoppeling_naar_key2 REFERENCES ins_deel(ins_deel_key),
   ins_deelkoppeling_omschrijving
      VARCHAR2(50 CHAR),
   ins_deelkoppeling_aanmaak
      DATE
      DEFAULT SYSDATE
      NOT_NULL(ins_deelkoppeling_aanmaak, ins_c_deelkoppeling_aanmaak),
   ins_deelkoppeling_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_c_deelkoppeling_van_naar CHECK(ins_deelkoppeling_van_key <> ins_deelkoppeling_naar_key),
   CONSTRAINT ins_u_deelkoppeling_van_naar UNIQUE(ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key)
);


CREATE_TABLE(ins_compositie, 0)
(
   ins_compositie_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_compositie_key PRIMARY KEY,
   ins_compositie_naam
      VARCHAR2(10)
      NOT_NULL(ins_compositie_naam, ins_c_ins_compositie_naam),
   ins_compositie_upper
      VARCHAR2(10)
      NOT_NULL(ins_compositie_upper, ins_c_ins_compositie_upper),
   ins_compositie_omschrijving
      VARCHAR2(255),
   ins_compositie_aanmaak
      DATE
      DEFAULT SYSDATE
      NOT_NULL(ins_compositie_aanmaak, ins_c_ins_compositie_aanmaak),
   ins_compositie_verwijder
      DATE
      DEFAULT NULLDATUM,
   CONSTRAINT ins_u_ins_compositie_upper UNIQUE(ins_compositie_upper, ins_compositie_verwijder)
);


CREATE_TABLE(ins_srtdeel_compositie,0)
(
   ins_srtdeel_comp_key
      NUMBER(10)
      CONSTRAINT ins_k_ins_srtdeel_comp_key PRIMARY KEY,
   ins_srtdeel_key
      NUMBER(10)
      NOT_NULL(ins_srtdeel_key, ins_r_ins_srtdeel_key1)
      CONSTRAINT ins_r_ins_srtdeel_key2 REFERENCES ins_srtdeel(ins_srtdeel_key),
   ins_compositie_key
      NUMBER(10)
      NOT_NULL(ins_compositie_key, ins_r_ins_compositie_key)
      CONSTRAINT ins_r_ins_compositie_key2 REFERENCES ins_compositie(ins_compositie_key),
   ins_srtdeel_comp_offsetX
      NUMBER(6,2)
      DEFAULT 0,
   ins_srtdeel_comp_offsetY
      NUMBER(6,2)
      DEFAULT 0,
   ins_srtdeel_comp_offsetR
      NUMBER(6,2)
      DEFAULT 0,
   ins_srtdeel_comp_aanmaak
      DATE
      DEFAULT SYSDATE
      NOT_NULL(ins_srtdeel_comp_aanmaak, ins_c_ins_srtdeel_comp_aanmaak),
   ins_srtdeel_comp_verwijder
      DATE
      DEFAULT NULLDATUM
);

CREATE_TABLE(ins_verbinding,0)
(
  ins_verbinding_sessionid
      NUMBER(10),
  ins_deel_key
      NUMBER(10),
  ins_verbinding_level
      NUMBER(3),
  CONSTRAINT ins_u_ins_verbinding_key UNIQUE(ins_verbinding_sessionid, ins_deel_key)

);

CREATE_TABLE(ins_disc_params,0)
(
  ins_disc_params_key          NUMBER(10),
  ins_discipline_key           NUMBER(10),
  ins_disc_params_cadlayers    VARCHAR2(500),
  ins_disc_params_type         NUMBER(2) DEFAULT 0,   /* bitwise: 1=binnen, 2=buiten 1+2=binnen en buiten */
  ins_disc_params_autonum      NUMBER(2) DEFAULT 3,   /* bitwise: 0=niet automatisch, +1=automatisch, +2=wijzigbaar  (1,2,3 zijn zinvol)*/
  CONSTRAINT ins_c_ins_discipline_key CHECK (ins_discipline_key IS NOT NULL),
  CONSTRAINT ins_k_res_disc_params_key PRIMARY KEY (ins_disc_params_key),
  CONSTRAINT ins_r_ins_discipine_key FOREIGN KEY (ins_discipline_key)
    REFERENCES ins_tab_discipline (ins_discipline_key)
);

REGISTERONCE('$Id$')

#endif  // INS
