#ifdef FIN
/* $Revision$
 * $Id$
 */

CREATE_TABLE(fin_btwtabel, 0)
(
    fin_btwtabel_key
        NUMBER(10)
        CONSTRAINT fin_k_btwtabel_key PRIMARY KEY,
    fin_btwtabel_omschrijving
        VARCHAR(30)
        NOT_NULL(fin_btwtabel_omschrijving, fin_c_btwtabel_omschr),
    fin_btwtabel_default
        NUMBER(1),
    fin_btwtabel_aanmaak
        DATE
        DEFAULT SYSDATE,
    fin_btwtabel_verwijder
        DATE
        DEFAULT NULLDATUM
);

CREATE_TABLE(fin_btwtabelwaarde, 0)
(
    fin_btwtabelwaarde_key
        NUMBER(10)
        CONSTRAINT fin_k_btwtabelwaarde_key PRIMARY KEY,
    fin_btwtabel_key
        NUMBER(10)
        CONSTRAINT fin_r_btwtabel_key1 REFERENCES fin_btwtabel(fin_btwtabel_key) ON DELETE CASCADE
        NOT_NULL(fin_btwtabel_key, fin_c_btwtabel_key1),
    fin_btwtabelwaarde_code
        VARCHAR(10)
        NOT_NULL(fin_btwtabelwaarde_code, fin_c_btwtabelwaarde_code),
    fin_btwtabelwaarde_oms
        VARCHAR(30),
    fin_btwtabelwaarde_perc
        NUMBER(5,3)
        NOT_NULL(fin_btwtabelwaarde_perc, fin_c_btwtabelwaarde_perc),
    fin_btwtabelwaarde_verlegd
        NUMBER(1),
    fin_btwtabelwaarde_van  -- yet unused
        DATE,
    fin_btwtabelwaarde_tot  -- yet unused
        DATE,
    fin_btwtabelwaarde_aanmaak
        DATE
        DEFAULT SYSDATE,
    fin_btwtabelwaarde_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT fin_u_fin_btwtabelwaarde UNIQUE(fin_btwtabel_key, fin_btwtabelwaarde_code, fin_btwtabelwaarde_verwijder)
);

ALTER TABLE prs_kostensoort ADD fin_btwtabelwaarde_key NUMBER(10) CONSTRAINT prs_r_fin_btwtabelwaarde_key REFERENCES fin_btwtabelwaarde (fin_btwtabelwaarde_key);

ALTER TABLE prs_bedrijf
        ADD fin_btwtabel_key NUMBER(10)
 CONSTRAINT prs_r_fin_btwtabel_key1 REFERENCES fin_btwtabel(fin_btwtabel_key);

ALTER TABLE mld_opdr_materiaal
        ADD fin_btwtabelwaarde_key NUMBER(10)
 CONSTRAINT mld_r_fin_btwtabelwaarde1 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key);

// FSN#37318
ALTER TABLE ins_srtcontrole
				ADD fin_btwtabelwaarde_key NUMBER(10)
 CONSTRAINT ins_r_fin_btwtabelwaarde1 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key);

ALTER TABLE prs_bedrijf_bedrijf
        ADD fin_btwtabelwaarde_key NUMBER(10) -- default btw
 CONSTRAINT prs_r_fin_btwtabelwaarde_key2 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key);

CREATE_TABLE(fin_factuur,0)
(
  fin_factuur_key
    NUMBER(10)
    CONSTRAINT fin_k_fin_factuur PRIMARY KEY
, fin_factuur_nr
    VARCHAR2(30)
    NOT_NULL(fin_factuur_nr, fin_c_fin_factuur0)
, fin_factuur_totaal
    NUMBER(12,2)
, fin_factuur_totaal_btw
    NUMBER (14,4)
    NOT_NULL(fin_factuur_totaal_btw, fin_c_fin_factuur1)
, fin_factuur_gbedrag
    NUMBER(14,2)
, mld_opdr_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur1 REFERENCES mld_opdr(mld_opdr_key)
, cnt_contract_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur2 REFERENCES cnt_contract(cnt_contract_key)
, bes_bestelopdr_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur3 REFERENCES bes_bestelopdr(bes_bestelopdr_key)
, bes_bestellevr_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur9 REFERENCES bes_bestellevr(bes_bestellevr_key)
, prs_perslid_key_user
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur4 REFERENCES prs_perslid(prs_perslid_key)
, prs_perslid_key_goedkeur
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur6 REFERENCES prs_perslid(prs_perslid_key)
, fin_factuur_datum
    DATE
    NOT_NULL(fin_factuur_datum, fin_c_fin_factuur3)
, fin_factuur_advies
    DATE
, fin_factuur_boekmaand
    VARCHAR2(7)
, fin_factuur_debiteur_nr
    VARCHAR2(30)
, prs_kostensoort_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur7 REFERENCES prs_kostensoort(prs_kostensoort_key)
, fin_factuur_opmerking
    VARCHAR2(250)
, fin_factuur_statuses_key
    NUMBER(10)
    CONSTRAINT fin_c_fin_status1 CHECK(fin_factuur_statuses_key IN (1,2,3,5,6,7))
    NOT_NULL(fin_factuur_statuses_key, fin_c_fin_factuur5)
, fin_factuur_bron
    NUMBER(3)
    DEFAULT 0
    NOT NULL
, fin_factuur_verwijder
    DATE
, fin_factuur_flag
    NUMBER(1)
, cnt_contract_plaats_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur8 REFERENCES cnt_contract_plaats(cnt_contract_plaats_key)
, fin_factuur_externnr
    VARCHAR2(256)
, fin_factuur_externsyncdate
    DATE
);

CREATE_TABLE(fin_factuurregel,0)
(
  fin_factuurregel_key
    NUMBER(10)
    CONSTRAINT fin_k_fin_regel PRIMARY KEY
, fin_factuur_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuurregel1 REFERENCES fin_factuur(fin_factuur_key) ON DELETE CASCADE
    NOT_NULL(fin_factuur_key, fin_c_fin_factuurregel1)
, fin_factuurregel_nr
    NUMBER
, fin_factuurregel_totaal
    NUMBER(12,2)
    NOT_NULL(fin_factuurregel_totaal, fin_c_fin_factuurregel2)
, fin_factuurregel_btw
    NUMBER(14,4)
    NOT_NULL(fin_factuurregel_btw, fin_c_fin_factuurregel3)
, fin_factuurregel_omschrijving
    VARCHAR2(250)
, fin_factuurregel_referentie
    VARCHAR2(30)
, fin_btwtabelwaarde_key
    NUMBER(10)
    CONSTRAINT fin_r_btwtabelwaarde_key1 REFERENCES fin_btwtabelwaarde(fin_btwtabelwaarde_key)
, prs_kostensoort_key
    NUMBER(10)
    CONSTRAINT fin_r_fin_factuur5 REFERENCES prs_kostensoort(prs_kostensoort_key)
, fin_factuurregel_code
    VARCHAR2(30)
, fin_factuurregel_aantal
    NUMBER(8,2)
, fin_factuurregel_eenheid
    VARCHAR2(30)
, fin_factuurregel_id
    NUMBER(10)
);


/* flexkenmerken zijn hier isomorf aan alg en prs, alleen hebben we geen niveau
   en gebruiken we de juiste naam voor de waarden (niet: fin_kenmerklink)
*/
CREATE_TABLE(fin_kenmerk,0)
    (fin_kenmerk_key
        NUMBER(10)
        CONSTRAINT fin_k_fin_kenmerk_key PRIMARY KEY
    ,fin_kenmerk_volgnr
        NUMBER(3)
        NOT NULL
    ,fin_kenmerk_omschrijving
        VARCHAR2(50)
    ,fin_kenmerk_upper
        VARCHAR2(50)
    ,fin_kenmerk_code
        VARCHAR2(60)
    ,fin_kenmerk_type  -- Factuur of factuurRegel
      VARCHAR2(1)
      CONSTRAINT fin_c_fin_kenmerk_type CHECK (fin_kenmerk_type is not null and (fin_kenmerk_type IN( 'F', 'R')))
    ,fin_kenmerk_hint
        VARCHAR2(255)
    ,fin_kenmerk_default
        VARCHAR2(4000)
    ,fin_kenmerk_show_expr
        VARCHAR2(4000)
    ,fin_kenmerk_dimensie
        VARCHAR2(10)
    ,fin_kenmerk_kenmerktype
        VARCHAR2(1)
        CONSTRAINT fin_c_fin_kenmerk_type1 CHECK(fin_kenmerk_kenmerktype IN ('C','N','D','T','R','X','L','Q','F','M','E','S','l','B','V'))
    ,fin_kenmerk_systeem
        NUMBER(2)
    ,fin_kenmerk_toonbaar
        NUMBER(1)
    ,fin_kenmerk_inlijst
        NUMBER(1)
        DEFAULT 0 NOT NULL
    ,fin_kenmerk_uniek
        NUMBER(1)
    ,fin_kenmerk_regexp
       VARCHAR2(255)
    ,fin_kenmerk_verplicht
        NUMBER(1)
    ,fin_kenmerk_groep
        NUMBER(1)
        DEFAULT 0 NOT NULL
    ,fin_kenmerk_lengte
        NUMBER(4)
    ,fin_kenmerk_dec
        NUMBER(2)
    ,fin_kenmerk_nmin
        NUMBER(10)
    ,fin_kenmerk_nmax
        NUMBER(10)
    ,fac_kenmerkdomein_key
        NUMBER(10)
        CONSTRAINT fin_r_kenmerkdomein_key1 REFERENCES fac_kenmerkdomein(fac_kenmerkdomein_key)
    ,fin_kenmerk_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(fin_kenmerk_aanmaak, fin_c_fin_kenmerk_aanmaak)
    ,fin_kenmerk_verwijder
        DATE
        DEFAULT NULLDATUM
    ,fac_functie_key
        NUMBER(10)
        CONSTRAINT fac_r_fin_kenmerk_functie REFERENCES fac_functie (fac_functie_key)
);

CREATE_TABLE(fin_kenmerkfactuur,0)
    (fin_kenmerkfactuur_key
        NUMBER(10)
        CONSTRAINT fin_k_fin_kenmerkfactuur_key PRIMARY KEY
    ,fin_factuur_key
        NUMBER(10)
        CONSTRAINT fin_r_fin_factuur_key REFERENCES fin_factuur(fin_factuur_key) ON DELETE CASCADE
    ,fin_kenmerk_key
        NUMBER(10)
    ,fin_kenmerkfactuur_waarde
        VARCHAR2(4000)
    ,fin_kenmerkfactuur_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(fin_kenmerkfactuur_aanmaak, fin_c_fin_kenmerkfactuur_aanm)
    ,fin_kenmerkfactuur_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT fin_u_fin_kenmerkfactuur_key UNIQUE(fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_verwijder)
);

CREATE_TABLE(fin_kenmerkfactregel,0)
    (fin_kenmerkfactregel_key
        NUMBER(10)
        CONSTRAINT fin_k_kenmerkfactregel_key PRIMARY KEY
    ,fin_factuurregel_key
        NUMBER(10)
        CONSTRAINT fin_r_fin_factuurregel_key REFERENCES fin_factuurregel(fin_factuurregel_key) ON DELETE CASCADE
    ,fin_kenmerk_key
        NUMBER(10)
        CONSTRAINT fin_r_fin_kenmerk_key2 REFERENCES fin_kenmerk(fin_kenmerk_key)
    ,fin_kenmerkfactregel_waarde
        VARCHAR2(4000)
    ,fin_kenmerkfactregel_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(fin_kenmerkfactregel_aanmaak, fin_c_kenmerkfactregel_aanm)
    ,fin_kenmerkfactregel_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT fin_u_kenmerkfactregel_key UNIQUE(fin_factuurregel_key, fin_kenmerk_key, fin_kenmerkfactregel_verwijder)
);

CREATE_TABLE(fin_factuur_note, 0)
(
   fin_factuur_note_key             NUMBER (10) PRIMARY KEY,
   fin_factuur_key                  NUMBER (10) NOT NULL REFERENCES fin_factuur (fin_factuur_key) ON DELETE CASCADE,
   fin_factuur_note_aanmaak         DATE        DEFAULT SYSDATE,
   prs_perslid_key                  NUMBER (10) REFERENCES prs_perslid (prs_perslid_key) ON DELETE SET NULL,
   fin_factuur_note_omschrijving    VARCHAR2 (4000 CHAR)
);

// Met name om er een model (scaffolding) op te kunnen baseren is een kop-tabel erg wenselijk.
CREATE_TABLE(fin_verkoopfactuurkop, 0)
(
    fin_verkoopfactuurkop_key          NUMBER(10) PRIMARY KEY,
    fin_verkoopfactuurkop_aanmaak      DATE DEFAULT SYSDATE,
    fin_verkoopfactuurkop_id           VARCHAR2(30),   /* het (externe) factuurnummer, vaak wel numeriek */
    CONSTRAINT fin_u_verkoopfactuurkop_id UNIQUE(fin_verkoopfactuurkop_id)
);

// Een basistabel waarin verkoopfactuurREGELS kunnen worden bewaard als een soort hardcopy
// Deze tabel wordt (vooralsnog) niet door de core-programmatuur gevuld maar is wel een
// uniforme opslag voor latere referentie; vervangt de diverse cust-tabellen die ontstonden
// Voor verschillende waarden (van bv kostenplaats of btwpercentage) zijn er verschillende regels
// Stamgegevens kunnen later wijzigen en worden hier bevroren, overige gegevens kunnen worden
// teruggevonden via de bijbehorende referentie
// Tevens zijn er plenty extra kolommen voor gebruik naar eigen inzicht
// LET OP: dit is bewust de rand van ons datamodel, hierin verder gaan opent de beerput van de financiele wereld
//         waar we niet vrijwillig in willen vallen.
// LET OP: de verwijzing fin_verkoopfactuurkop_key is optioneel.
//         Indien een cust dit via de GUI wil gebruiken is deze vereist.
CREATE_TABLE(fin_verkoopfactuur, 0)
(
    fin_verkoopfactuur_key          NUMBER(10) PRIMARY KEY,
    fin_verkoopfactuurkop_key       NUMBER(10) REFERENCES fin_verkoopfactuurkop(fin_verkoopfactuurkop_key) ON DELETE CASCADE,
    fin_verkoopfactuur_aanmaak      DATE DEFAULT SYSDATE,
    fin_verkoopfactuur_id           VARCHAR2(30),   /* het (externe) factuurnummer, vaak wel numeriek */
    fin_verkoopfactuur_datum        DATE,           /* de factuurdatum */
    fin_verkoopfactuur_omschr       VARCHAR2(1000),
    fin_verkoopfactuur_xmlnode      VARCHAR2(60),   /* type van waarover deze factuur gaat */
    fin_verkoopfactuur_refkey       NUMBER(10),   /* key van de bijbehorende entiteit van type xmlnode */
    prs_kostenplaats_key            NUMBER(10),
    prs_kostenplaats_nr             VARCHAR2(30),
    prs_kostenplaats_omschrijving   VARCHAR2(60),
    prs_kostenplaatsgrp_oms         VARCHAR2(60),
    prs_kostensoort_oms             VARCHAR2(60),
    prs_kostensoort_opmerking       VARCHAR2(255),
    prs_kostensoort_refcode         VARCHAR2(60),
    prs_bedrijf_key                 NUMBER(10),
    prs_debiteur_naam               VARCHAR2(60),   /* kan prs_bedrijf_naam zijn maar hoeft niet */
    prs_kostensoortgrp_oms          VARCHAR2(60),
    fin_verkoopfactuur_bedrag       NUMBER(12,2),
    fin_verkoopfactuur_btw          NUMBER(12,2),
    fin_btwtabelwaarde_code         VARCHAR2(10),
    fin_btwtabelwaarde_oms          VARCHAR2(30),
    fin_btwtabelwaarde_perc         NUMBER(5,3),
    fin_btwtabelwaarde_verlegd      NUMBER(1),
    fin_verkoopfactuur_maand        VARCHAR2(6),    /* boekmaand, bv 201409 */
    fin_verkoopfactuur_n1           NUMBER(14,4),
    fin_verkoopfactuur_n2           NUMBER(14,4),
    fin_verkoopfactuur_n3           NUMBER(14,4),
    fin_verkoopfactuur_n4           NUMBER(14,4),
    fin_verkoopfactuur_n5           NUMBER(14,4),
    fin_verkoopfactuur_c1           VARCHAR2(200),
    fin_verkoopfactuur_c2           VARCHAR2(200),
    fin_verkoopfactuur_c3           VARCHAR2(200),
    fin_verkoopfactuur_c4           VARCHAR2(200),
    fin_verkoopfactuur_c5           VARCHAR2(200),
    fin_verkoopfactuur_c6           VARCHAR2(500),
    fin_verkoopfactuur_c7           VARCHAR2(1000),
    fin_verkoopfactuur_c8           VARCHAR2(4000),
    fin_verkoopfactuur_d1           DATE,
    fin_verkoopfactuur_d2           DATE,
    fin_verkoopfactuur_d3           DATE,
    fin_verkoopfactuur_d4           DATE,
    fin_verkoopfactuur_d5           DATE
);

REGISTERONCE('$Id$')

#endif // FIN
