CREATE TABLE RECHTSPERSOON (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    ADRESBINNENLAND VARCHAR(255),
    ADRESBUITENLAND VARCHAR(255),
    ADRESCORRESPONDENTIE VARCHAR(100),
    EMAILADRES VARCHAR(80),
    FAXNUMMER VARCHAR(20),
    IDENTIFICATIE VARCHAR(255),
    KVKNUMMER VARCHAR(20),
    NAAM VARCHAR(200),
    RECHTSVORM VARCHAR(100),
    REKENINGNUMMER VARCHAR(255),
    TELEFOONNUMMER VARCHAR(20)
);

CREATE TABLE CLIENT (
    CLIENT_ID INTEGER PRIMARY KEY,
    CODE VARCHAR(80),
    GEZAGSDRAGERGEKEND BOOLEAN,
    JURIDISCHESTATUS VARCHAR(80),
    WETTELIJKEVERTEGENWOORDIGING VARCHAR(80)
);

CREATE TABLE VROEGSIGNAALZAAK (
    ZAAK_ID INTEGER PRIMARY KEY,
    DATUM_OPGEPAKT DATE,
    EINDDATUM_MATCHINGPERIODE DATE,
    MATCHINGSDATUM DATE,
    OPGEPAKTDOOR_RECHTSPERSOON_ID INTEGER,
    OPGEPAKTNAMENS_GEMEENTE_ID INTEGER,
    RESULTAAT_ENUM_ID INTEGER,
    STARTDATUM_MATCHTINGPERIODE DATE
);

CREATE TABLE KP_GMNT_IS_OVRGGN_IN (
    KP_GMNT_IS_OVRGGN_IN_ID INTEGER PRIMARY KEY,
    IS_OVERGEGAAN_IN_1_ID INTEGER,
    IS_OVERGEGAAN_IN_2_ID INTEGER
);

CREATE TABLE NIETNATUURLIJKPERSOON (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    DATUMAANVANG DATE,
    DATUMEINDE DATE,
    DATUMUITSCHRIJVING DATE,
    DATUMVOORTZETTING DATE,
    FAXNUMMER VARCHAR(20),
    INGESCHREVEN BOOLEAN,
    INOPRICHTING BOOLEAN,
    KVKNUMMER VARCHAR(255),
    NNPID VARCHAR(255),
    RECHTSVORM VARCHAR(255),
    RSINNUMMER VARCHAR(255),
    STATUTAIRENAAM VARCHAR(255),
    STATUTAIREZETEL VARCHAR(255),
    WEBSITEURL VARCHAR(200)
);

CREATE TABLE GEMEENTE (
    GEMEENTE_ID INTEGER PRIMARY KEY,
    BEGINGELDIGHEID DATE,
    DATUMEINDE DATE,
    DATUMINGANG DATE,
    EINDGELDIGHEID DATE,
    GECONSTATEERD BOOLEAN,
    GEMEENTECODE VARCHAR(255),
    GEMEENTENAAM VARCHAR(80),
    GEMEENTENAAM_NEN VARCHAR(255),
    GEOMETRIE GEOMETRY,
    IDENTIFICATIE VARCHAR(255),
    VERSIE INTEGER
);

CREATE TABLE ZAAK (
    ZAAK_ID INTEGER PRIMARY KEY,
    ARCHIEFNOMINATIE VARCHAR(255),
    DATUMEINDE DATE,
    DATUMEINDEGEPLAND DATE,
    DATUMEINDEUITERLIJKEAFDOENING DATE,
    DATUMLAATSTEBETALING DATE,
    DATUMPUBLICATIE DATE,
    DATUMREGISTRATIE DATE,
    DATUMSTART DATE,
    DATUMVERNIETIGINGDOSSIER DATE,
    DUURVERLENGING VARCHAR(255),
    HEEFT_BETREKKING_OP_ANDERE_ZAAK_ID INTEGER,
    INDICATIEBETALING VARCHAR(255),
    INDICATIEDEELZAKEN BOOLEAN,
    INDICATIEOPSCHORTING VARCHAR(255),
    IS_DEELZAAK_VAN_ZAAK_ID INTEGER,
    LEGES VARCHAR(100),
    OMSCHRIJVING VARCHAR(80),
    OMSCHRIJVINGRESULTAAT VARCHAR(80),
    REDENOPSCHORTING VARCHAR(200),
    REDENVERLENGING VARCHAR(200),
    TOELICHTING VARCHAR(255),
    TOELICHTINGRESULTAAT VARCHAR(255),
    VERTROUWELIJKHEID VARCHAR(255),
    ZAAKIDENTIFICATIE VARCHAR(255),
    ZAAKNIVEAU VARCHAR(255)
);

CREATE TABLE KP_NTNTRLJKPRSN_RCHTSPRSN (
    KP_NTNTRLJKPRSN_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    NIETNATUURLIJKPERSOON_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

CREATE TABLE CONTACTPOGING (
    CONTACTPOGING_ID INTEGER PRIMARY KEY,
    BEREIKT BOOLEAN,
    DAGDEEL_ENUM_ID INTEGER,
    DATUM DATE,
    HEEFT_ZAAK_ID INTEGER,
    SOORT_ENUM_ID INTEGER
);

CREATE TABLE CONTACTPERSOON (
    CONTACTPERSOON_ID INTEGER PRIMARY KEY,
    CONTACTPERSONEN_AANLEVERENDEORGANISATIE_ID INTEGER,
    EMAIL VARCHAR(255),
    FUNCTIETITEL VARCHAR(200),
    NAAM VARCHAR(200),
    TELEFOONNUMMER VARCHAR(200)
);

CREATE TABLE ENUMCONTACTSOORT_ENUM (
    ENUMCONTACTSOORT_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMCONTACTSOORT_ENUM (ENUMCONTACTSOORT_ENUM_ID, VALUE) VALUES
    (1, 'ADMINISTRATIEF'),
    (2, 'AFSPRAAK_OP_LOCATIE'),
    (3, 'BRIEF'),
    (4, 'HUISBEZOEK'),
    (5, 'KAARTJE'),
    (6, 'MAIL'),
    (7, 'SMS_WHATSAPP'),
    (8, 'TELEFOON');

CREATE TABLE KP_VRGSGNLZK_ZK (
    KP_VRGSGNLZK_ZK_ID INTEGER PRIMARY KEY,
    VROEGSIGNAALZAAK_ID INTEGER,
    ZAAK_ID INTEGER
);

CREATE TABLE VROEGSIGNAAL (
    VROEGSIGNAAL_ID INTEGER PRIMARY KEY,
    BEDRAG DECIMAL(10,2),
    BETREFT_CLIENT_ID INTEGER,
    CRISISSIGNAAL BOOLEAN,
    ONTSTAANSDATUM DATE,
    OPGEPAKTIN_ZAAK_ID INTEGER,
    SIGNAALDATUM DATE,
    STATUS VARCHAR(255),
    VERZONDENDOOR_RECHTSPERSOON_ID INTEGER,
    WARMEOVERDRACHT BOOLEAN
);

CREATE TABLE KP_SGNLPRTNR_RCHTSPRSN (
    KP_SGNLPRTNR_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    SIGNAALPARTNER_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

CREATE TABLE ENUMDAGDEEL_ENUM (
    ENUMDAGDEEL_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMDAGDEEL_ENUM (ENUMDAGDEEL_ENUM_ID, VALUE) VALUES
    (1, 'AVOND'),
    (2, 'MIDDAG'),
    (3, 'OCHTEND');

CREATE TABLE ENUMEINDRESULTAAT_ENUM (
    ENUMEINDRESULTAAT_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMEINDRESULTAAT_ENUM (ENUMEINDRESULTAAT_ENUM_ID, VALUE) VALUES
    (1, 'DEFINITIEF_GEEN_CONTACT_KUNNEN_KRIJGEN'),
    (2, 'GEEN_REACTIE_NA_EERDER_CONTACT'),
    (3, 'INWONER_AL_BEKEND_BIJ_SCHULDHULPVERLENING'),
    (4, 'INWONER_HEEFT_AL_EEN_ANDER_LOPEND_TRAJECT'),
    (5, 'INWONER_HEEFT_ZELF_AL_BETAALD_BETALINGSREGELING_GETROFFEN'),
    (6, 'INWONER_HOEFT_GEEN_HULP_VANUIT_VROEGSIGNALERING'),
    (7, 'INWONER_IS_OVERLEDEN'),
    (8, 'NIET_OPGEPAKT_ANDERE_REDEN'),
    (9, 'NIET_OPGEPAKT_HERHAALDE_MELDING'),
    (10, 'NIET_OPGEPAKT_ONTERECHT_SIGNAAL'),
    (11, 'PERSOON_IS_GEEN_INWONER_MEER_IN_DE_GEMEENTE'),
    (12, 'VERVOLGHULP_EN_OF_VERWIJZING_FINANCIEEL'),
    (13, 'VERVOLGHULP_EN_OF_VERWIJZING_NIET_FINANCIEEL'),
    (14, 'VERWIJZING_ZONDER_CONTACT'),
    (15, '_BUDGET_ADVIES_EN_OF_QUICK_FIX');

CREATE TABLE ENUMSIGNAALPARTNER_ENUM (
    ENUMSIGNAALPARTNER_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMSIGNAALPARTNER_ENUM (ENUMSIGNAALPARTNER_ENUM_ID, VALUE) VALUES
    (1, 'BELASTINGDIENST'),
    (2, 'CAK_EIGEN_BIJDRAGE'),
    (3, 'CAK_ZORGVERZEKERINGEN'),
    (4, 'DIENST_TOESLAGEN'),
    (5, 'DUO'),
    (6, 'ENERGIE'),
    (7, 'HUUR'),
    (8, 'HYPOTHEEK'),
    (9, 'OVERIGE'),
    (10, 'WATER'),
    (11, 'ZORG');

CREATE TABLE AANLEVERENDEORGANISATIE (
    AANLEVERENDEORGANISATIE_ID INTEGER PRIMARY KEY,
    KVK_NUMMER VARCHAR(80),
    NAAM VARCHAR(200)
);

CREATE TABLE SIGNAALPARTNER (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    TYPE_ENUM_ID INTEGER
);

ALTER TABLE VROEGSIGNAALZAAK ADD CONSTRAINT FK_VROEGSIGNAALZAAK_GEN_ZAAK FOREIGN KEY (ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- Generalization to ZAAK

ALTER TABLE SIGNAALPARTNER ADD CONSTRAINT FK_SIGNAALPARTNER_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE NIETNATUURLIJKPERSOON ADD CONSTRAINT FK_NIETNATUURLIJKPERSOON_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE KP_VRGSGNLZK_ZK ADD CONSTRAINT FK_KP_VRGSGNLZK_ZK_1 FOREIGN KEY (VROEGSIGNAALZAAK_ID) REFERENCES VROEGSIGNAALZAAK (ZAAK_ID);
-- VROEGSIGNAALZAAK (many-to-many junction, Connector_ID: 1510)

ALTER TABLE KP_VRGSGNLZK_ZK ADD CONSTRAINT FK_KP_VRGSGNLZK_ZK_2 FOREIGN KEY (ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- ZAAK (many-to-many junction, Connector_ID: 1510)

ALTER TABLE KP_SGNLPRTNR_RCHTSPRSN ADD CONSTRAINT FK_KP_SGNLPRTNR_RCHTSPRSN_1 FOREIGN KEY (SIGNAALPARTNER_ID) REFERENCES SIGNAALPARTNER (RECHTSPERSOON_ID);
-- SIGNAALPARTNER (many-to-many junction, Connector_ID: 1531)

ALTER TABLE KP_SGNLPRTNR_RCHTSPRSN ADD CONSTRAINT FK_KP_SGNLPRTNR_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 1531)

ALTER TABLE KP_NTNTRLJKPRSN_RCHTSPRSN ADD CONSTRAINT FK_KP_NTNTRLJKPRSN_RCHTSPRSN_1 FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (RECHTSPERSOON_ID);
-- NIETNATUURLIJKPERSOON (many-to-many junction, Connector_ID: 1971)

ALTER TABLE KP_NTNTRLJKPRSN_RCHTSPRSN ADD CONSTRAINT FK_KP_NTNTRLJKPRSN_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 1971)

ALTER TABLE KP_GMNT_IS_OVRGGN_IN ADD CONSTRAINT FK_KP_GMNT_IS_OVRGGN_IN_1 FOREIGN KEY (IS_OVERGEGAAN_IN_1_ID) REFERENCES GEMEENTE (GEMEENTE_ID);
-- GEMEENTE (many-to-many junction, Connector_ID: 2233)

ALTER TABLE KP_GMNT_IS_OVRGGN_IN ADD CONSTRAINT FK_KP_GMNT_IS_OVRGGN_IN_2 FOREIGN KEY (IS_OVERGEGAAN_IN_2_ID) REFERENCES GEMEENTE (GEMEENTE_ID);
-- GEMEENTE (many-to-many junction, Connector_ID: 2233)

ALTER TABLE VROEGSIGNAAL ADD CONSTRAINT FK_VROEGSIGNAAL_BETREFT FOREIGN KEY (BETREFT_CLIENT_ID) REFERENCES CLIENT (CLIENT_ID);
-- BETREFT (0..* to 1, Connector_ID: 1504)

ALTER TABLE VROEGSIGNAAL ADD CONSTRAINT FK_VROEGSIGNAAL_OPGEPAKTIN FOREIGN KEY (OPGEPAKTIN_ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- OPGEPAKTIN (1..* to 0..1, Connector_ID: 1505)

ALTER TABLE CONTACTPOGING ADD CONSTRAINT FK_CONTACTPOGING_HEEFT FOREIGN KEY (HEEFT_ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- HEEFT (1 to 0..*, Connector_ID: 1506)

ALTER TABLE VROEGSIGNAAL ADD CONSTRAINT FK_VROEGSIGNAAL_VERZONDENDOOR FOREIGN KEY (VERZONDENDOOR_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- VERZONDENDOOR (0..* to 1, Connector_ID: 1507)

ALTER TABLE VROEGSIGNAALZAAK ADD CONSTRAINT FK_VROEGSIGNAALZAAK_OPGEPAKTNAMENS FOREIGN KEY (OPGEPAKTNAMENS_GEMEENTE_ID) REFERENCES GEMEENTE (GEMEENTE_ID);
-- OPGEPAKTNAMENS (0..* to 1, Connector_ID: 1509)

ALTER TABLE VROEGSIGNAALZAAK ADD CONSTRAINT FK_VROEGSIGNAALZAAK_OPGEPAKTDOOR FOREIGN KEY (OPGEPAKTDOOR_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- OPGEPAKTDOOR (0..* to 1, Connector_ID: 1532)

ALTER TABLE CONTACTPERSOON ADD CONSTRAINT FK_CONTACTPERSOON_CONTACTPERSONEN FOREIGN KEY (CONTACTPERSONEN_AANLEVERENDEORGANISATIE_ID) REFERENCES AANLEVERENDEORGANISATIE (AANLEVERENDEORGANISATIE_ID);
-- CONTACTPERSONEN (1 to 1..*, Connector_ID: 1534)

ALTER TABLE ZAAK ADD CONSTRAINT FK_ZAAK_HEEFT_BETREKKING_OP_ANDERE FOREIGN KEY (HEEFT_BETREKKING_OP_ANDERE_ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- HEEFT_BETREKKING_OP_ANDERE (1 to 0..*, Connector_ID: 2108)

ALTER TABLE ZAAK ADD CONSTRAINT FK_ZAAK_IS_DEELZAAK_VAN FOREIGN KEY (IS_DEELZAAK_VAN_ZAAK_ID) REFERENCES ZAAK (ZAAK_ID);
-- IS_DEELZAAK_VAN (1 to 0..1, Connector_ID: 2121)

ALTER TABLE VROEGSIGNAALZAAK ADD CONSTRAINT FK_VROEGSIGNAALZAAK_RESULTAAT_ENUM_ID FOREIGN KEY (RESULTAAT_ENUM_ID_ENUMEINDRESULTAAT_ENUM_ID) REFERENCES ENUMEINDRESULTAAT_ENUM (ENUMEINDRESULTAAT_ENUM_ID);
-- RESULTAAT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE CONTACTPOGING ADD CONSTRAINT FK_CONTACTPOGING_SOORT_ENUM_ID FOREIGN KEY (SOORT_ENUM_ID_ENUMCONTACTSOORT_ENUM_ID) REFERENCES ENUMCONTACTSOORT_ENUM (ENUMCONTACTSOORT_ENUM_ID);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE CONTACTPOGING ADD CONSTRAINT FK_CONTACTPOGING_DAGDEEL_ENUM_ID FOREIGN KEY (DAGDEEL_ENUM_ID_ENUMDAGDEEL_ENUM_ID) REFERENCES ENUMDAGDEEL_ENUM (ENUMDAGDEEL_ENUM_ID);
-- DAGDEEL_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE SIGNAALPARTNER ADD CONSTRAINT FK_SIGNAALPARTNER_TYPE_ENUM_ID FOREIGN KEY (TYPE_ENUM_ID_ENUMSIGNAALPARTNER_ENUM_ID) REFERENCES ENUMSIGNAALPARTNER_ENUM (ENUMSIGNAALPARTNER_ENUM_ID);
-- TYPE_ENUM_ID (1 to 1, Connector_ID: enum_ref)

