create table dok_dokument_potpis
(
    id                    int4 default nextval('dok_dokument_potpis_id_seq'::regclass) not null
        constraint dok_dokument_potpis_pkey
            primary key,
    vraboten_angazman_id  int4                                                         not null,
    vraboten_funkcija_id  int4,
    generiran_dokument_id int4                                                         not null,
    tip_potpis            varchar(255),
    potpis                text,
    data                  timestamp(6)
);

create table dok_dokument_templejt_atributi
(
    id                   int4 default nextval('dok_dokument_templejt_atributi_id_seq'::regclass) not null
        constraint dok_dokument_templejt_atributi_pkey
            primary key,
    dokument_templejt_id int4                                                                    not null,
    ime_atribut          varchar(255),
    regex                varchar(255),
    tip_atribut_id       int4                                                                    not null,
    zadolzitelen         bool
);

create table dok_dokument_templejti
(
    id                                    int4 default nextval('dok_dokument_templejti_id_seq'::regclass) not null
        constraint dok_dokument_templejti_pkey
            primary key,
    tip_dokument_organizaciona_edinica_id int4                                                            not null,
    templejt                              text,
    aktiven                               bool
);

create table dok_generiran_dokument
(
    id                                    int4 default nextval('dok_generiran_dokument_id_seq'::regclass) not null
        constraint dok_generiran_dokument_pkey
            primary key,
    tip_dokument_organizaciona_edinica_id int4                                                            not null,
    dokument_templejt_id                  int4                                                            not null,
    url                                   varchar(255),
    user_id                               int4                                                            not null
);

create table dok_generiran_dokument_vrednosti
(
    id                            int4 default nextval('dok_generiran_dokument_vrednosti_id_seq'::regclass) not null
        constraint dok_generiran_dokument_vrednosti_pkey
            primary key,
    dokument_templejt_atributi_id int4                                                                      not null,
    generiran_dokument_id         int4                                                                      not null,
    string_vrednost               varchar(255),
    numericka_vrednost            numeric,
    boolean_vrednost              bool
);

create table dok_tip_dokumenti_organizaciona_edinica
(
    id                                   int4 default nextval('dok_tip_dokumenti_organizaciona_edinica_id_seq'::regclass) not null
        constraint dok_tip_dokumenti_organizaciona_edinica_pkey
            primary key,
    dokument_ime                         varchar(255),
    organizaciona_edinica_id             int4                                                                             not null,
    tip_naplata_organizaciona_edinica_id int4                                                                             not null
);

create table drzavi
(
    id         int4 default nextval('drzavi_id_seq'::regclass) not null
        constraint drzavi_pkey
            primary key,
    drzava_kod varchar(255),
    drzava_ime varchar(255)
);

create table ent_entiteti
(
    id          int4 default nextval('ent_entiteti_id_seq'::regclass) not null
        constraint ent_entiteti_pkey
            primary key,
    ime_entitet varchar(255)
        constraint ent_entiteti_ime_entitet_key
            unique,
    user_id     int4                                                  not null
);

create table ent_entiteti_smetki
(
    id                     int4 default nextval('ent_entiteti_smetki_id_seq'::regclass) not null
        constraint ent_entiteti_smetki_pkey
            primary key,
    entitet_id             int4                                                         not null,
    transakciska_smetka_id int4                                                         not null,
    aktivna                bool
);

create table fin_banki
(
    id         int4 default nextval('fin_banki_id_seq'::regclass) not null
        constraint fin_banki_pkey
            primary key,
    ime_banka  varchar(255)                                       not null,
    swift_bic  varchar(255),
    drzava_kod varchar(2)
);

create table fin_finansiska_obvrska
(
    id                                   int4 default nextval('fin_finansiska_obvrska_id_seq'::regclass) not null
        constraint fin_finansiska_obvrska_pkey
            primary key,
    user_id                              int4                                                            not null,
    organizaciona_edinica_id             int4                                                            not null,
    tip_naplata_organizaciona_edinica_id int4                                                            not null,
    tip_naplati_cenovnik_id              int4,
    status_finansiska_obvrska_id         int4                                                            not null,
    dokument_id                          int4,
    datum_kreiranje                      timestamp(6)                                                    not null,
    datum_dospevanje                     date,
    originalna_suma                      numeric(14, 2)                                                  not null,
    otvorena_suma                        numeric(14, 2)                                                  not null,
    vid_valuta_id                        int4                                                            not null,
    opis                                 varchar(255),
    finansiska_obvrska_id                int4
);

create table fin_finansiska_obvrska_stavka
(
    id                    int4           default nextval('fin_finansiska_obvrska_stavka_id_seq'::regclass) not null
        constraint fin_finansiska_obvrska_stavka_pkey
            primary key,
    finansiska_obvrska_id int4                                                                             not null,
    naziv_stavka          varchar(255)                                                                     not null,
    referenca_tip         varchar(255),
    referenca_id          int4,
    kolicina              numeric(12, 2) default 1                                                         not null,
    edinicna_cena         numeric(14, 2)                                                                   not null,
    iznos                 numeric(14, 2)                                                                   not null
);

create table fin_finansiski_dokument
(
    id                         int4 default nextval('fin_finansiski_dokument_id_seq'::regclass) not null
        constraint fin_finansiski_dokument_pkey
            primary key,
    finansiski_dokument_tip_id int4                                                             not null,
    organizaciona_edinica_id   int4                                                             not null,
    user_id                    int4,
    dokument_broj              varchar(255)                                                     not null,
    datum_izdavanje            date                                                             not null,
    status                     varchar(255)                                                     not null,
    vid_valuta_id              int4                                                             not null,
    vkupen_iznos               numeric(14, 2)                                                   not null,
    izvoren_tip                varchar(255)
);

create table fin_finansiski_dokument_tip
(
    id     int4 default nextval('fin_finansiski_dokument_tip_id_seq'::regclass) not null
        constraint fin_finansiski_dokument_tip_pkey
            primary key,
    kod    varchar(255)                                                         not null
        constraint fin_finansiski_dokument_tip_kod_key
            unique,
    ime    varchar(255)                                                         not null,
    nasoka varchar(255)                                                         not null
);

create table fin_finansiski_dokument_vrska
(
    id                 int4 default nextval('fin_finansiski_dokument_vrska_id_seq'::regclass) not null
        constraint fin_finansiski_dokument_vrska_pkey
            primary key,
    parent_dokument_id int4                                                                   not null,
    child_dokument_id  int4                                                                   not null,
    relation_type      varchar(255)                                                           not null
);

create table fin_isplata_alokacija
(
    id                  int4 default nextval('fin_isplata_alokacija_id_seq'::regclass) not null
        constraint fin_isplata_alokacija_pkey
            primary key,
    isplata_id          int4                                                           not null,
    isplatna_obvrska_id int4                                                           not null,
    alocirana_suma      numeric(14, 2)                                                 not null,
    created_at          timestamp(6)                                                   not null
);

create table fin_isplati
(
    id                       int4 default nextval('fin_isplati_id_seq'::regclass) not null
        constraint fin_isplati_pkey
            primary key,
    user_id                  int4                                                 not null,
    korisnik_isplata_id      int4                                                 not null,
    transakciska_smetka_id   int4                                                 not null,
    organizaciona_edinica_id int4                                                 not null,
    naplatena_suma           numeric(14, 2)                                       not null,
    vid_valuta_id            int4                                                 not null,
    status_transakcija_id    int4                                                 not null,
    nadvoresna_referenca     varchar(255),
    pobarana                 timestamp(6),
    izvrsena                 timestamp(6),
    data                     date
);

create table fin_isplatna_obvrska
(
    id                         int4 default nextval('fin_isplatna_obvrska_id_seq'::regclass) not null
        constraint fin_isplatna_obvrska_pkey
            primary key,
    user_id                    int4                                                          not null,
    organizaciona_edinica_id   int4                                                          not null,
    tip_isplatna_obvrska_id    int4                                                          not null,
    status_isplatna_obvrska_id int4                                                          not null,
    dokument_id                int4                                                          not null,
    plata_stavka_vraboten_id   int4,
    izvoren_tip                varchar(255),
    originalna_suma            numeric(14, 2)                                                not null,
    otvorena_suma              numeric(14, 2)                                                not null,
    vid_valuta_id              int4                                                          not null,
    kreirano_na                timestamp(6)                                                  not null,
    odobreno_na                timestamp(6),
    due_date                   date,
    opis                       varchar(255)
);

create table fin_korisnici_isplata
(
    id                     int4 default nextval('fin_korisnici_isplata_id_seq'::regclass) not null
        constraint fin_korisnici_isplata_pkey
            primary key,
    transakciska_smetka_id int4                                                           not null,
    user_id                int4                                                           not null
);

create table fin_korisnici_naplati
(
    id                      int4 default nextval('fin_korisnici_naplati_id_seq'::regclass) not null
        constraint fin_korisnici_naplati_pkey
            primary key,
    korisnik_vid_naplata_id int4                                                           not null,
    user_id                 int4                                                           not null
);

create table fin_korisnik_naplata_atributi_vrednosti
(
    id                              int4 default nextval('fin_korisnik_naplata_atributi_vrednosti_id_seq'::regclass) not null
        constraint fin_korisnik_naplata_atributi_vrednosti_pkey
            primary key,
    korisnici_naplata_id            int4                                                                             not null,
    korisnik_vid_naplata_atribut_id int4                                                                             not null,
    string_vrednost                 varchar(255),
    numericka_vrednost              numeric,
    boolean_vrednost                bool
);

create table fin_korisnik_vid_naplati
(
    id      int4 default nextval('fin_korisnik_vid_naplati_id_seq'::regclass) not null
        constraint fin_korisnik_vid_naplati_pkey
            primary key,
    ime_vid varchar(255)
);

create table fin_korisnik_vid_naplati_attributi
(
    id                      int4 default nextval('fin_korisnik_vid_naplati_attributi_id_seq'::regclass) not null
        constraint fin_korisnik_vid_naplati_attributi_pkey
            primary key,
    korisnik_vid_naplata_id int4                                                                        not null,
    tip_atribut_id          int4                                                                        not null,
    ime_atribut             varchar(255),
    zadolzitelen            bool
);

create table fin_naplata_alokacija
(
    id                           int4 default nextval('fin_naplata_alokacija_id_seq'::regclass) not null
        constraint fin_naplata_alokacija_pkey
            primary key,
    naplata_id                   int4                                                           not null,
    finansiska_obvrska_id        int4                                                           not null,
    finansiska_obvrska_stavka_id int4,
    alocirana_suma               numeric(14, 2),
    created_at                   timestamp(6)                                                   not null
);

create table fin_naplati
(
    id                       int4 default nextval('fin_naplati_id_seq'::regclass) not null
        constraint fin_naplati_pkey
            primary key,
    user_id                  int4                                                 not null,
    korisnik_naplata_id      int4                                                 not null,
    transakciska_smetka_id   int4                                                 not null,
    organizaciona_edinica_id int4                                                 not null,
    naplatena_suma           numeric(14, 2)                                       not null,
    vid_valuta_id            int4                                                 not null,
    status_transakcija_id    int4                                                 not null,
    nadvoresna_referenca     varchar(255),
    provider_transaction_id  varchar(255),
    requested_at             timestamp(6),
    confirmed_at             timestamp(6),
    data                     date
);

create table fin_plata_komponenta
(
    id                       int4 default nextval('fin_plata_komponenta_id_seq'::regclass) not null
        constraint fin_plata_komponenta_pkey
            primary key,
    plata_stavka_vraboten_id int4                                                          not null,
    tip_platna_komponenta_id int4                                                          not null,
    kvantitet                numeric(12, 2),
    stapka                   numeric(14, 2),
    iznos                    numeric(14, 2)                                                not null,
    izvoren_tip              varchar(255),
    opis                     varchar(255)
);

create table fin_plata_period
(
    id                       int4 default nextval('fin_plata_period_id_seq'::regclass) not null
        constraint fin_plata_period_pkey
            primary key,
    organizaciona_edinica_id int4                                                      not null,
    datum_od                 date                                                      not null,
    datum_do                 date                                                      not null,
    status_plata_period_id   int4                                                      not null,
    created_at               timestamp(6)                                              not null,
    approved_at              timestamp(6)
);

create table fin_plata_stavka_vraboten
(
    id                 int4 default nextval('fin_plata_stavka_vraboten_id_seq'::regclass) not null
        constraint fin_plata_stavka_vraboten_pkey
            primary key,
    plata_period_id    int4                                                               not null,
    vraboten_id        int4                                                               not null,
    vraboteni_plata_id int4                                                               not null,
    bruto_vkupno       numeric(14, 2)                                                     not null,
    neto_vkupno        numeric(14, 2)                                                     not null,
    danoci_vkupno      numeric(14, 2)                                                     not null,
    odbivki_vkupno     numeric(14, 2)                                                     not null,
    vid_valuta_id      int4                                                               not null
);

create table fin_plata_vlez
(
    id                       int4 default nextval('fin_plata_vlez_id_seq'::regclass) not null
        constraint fin_plata_vlez_pkey
            primary key,
    plata_period_id          int4                                                    not null,
    vraboten_id              int4                                                    not null,
    tip_platna_komponenta_id int4                                                    not null,
    kvantitet                numeric(12, 2),
    stapka                   numeric(14, 2),
    amount                   numeric(14, 2),
    izvoren_tip              varchar(255)
);

create table fin_status_finansiska_obvrska
(
    id  int4 default nextval('fin_status_finansiska_obvrska_id_seq'::regclass) not null
        constraint fin_status_finansiska_obvrska_pkey
            primary key,
    kod varchar(255)                                                           not null
        constraint fin_status_finansiska_obvrska_kod_key
            unique,
    ime varchar(255)                                                           not null
);

create table fin_status_isplatna_obvrska
(
    id  int4 default nextval('fin_status_isplatna_obvrska_id_seq'::regclass) not null
        constraint fin_status_isplatna_obvrska_pkey
            primary key,
    kod varchar(255)                                                         not null
        constraint fin_status_isplatna_obvrska_kod_key
            unique,
    ime varchar(255)                                                         not null
);

create table fin_status_plata_period
(
    id  int4 default nextval('fin_status_plata_period_id_seq'::regclass) not null
        constraint fin_status_plata_period_pkey
            primary key,
    kod varchar(255)                                                     not null
        constraint fin_status_plata_period_kod_key
            unique,
    ime varchar(255)                                                     not null
);

create table fin_status_transakcija
(
    id         int4 default nextval('fin_status_transakcija_id_seq'::regclass) not null
        constraint fin_status_transakcija_pkey
            primary key,
    ime_status varchar(255)
        constraint fin_status_transakcija_ime_status_key
            unique
);

create table fin_tip_isplatna_obvrska
(
    id  int4 default nextval('fin_tip_isplatna_obvrska_id_seq'::regclass) not null
        constraint fin_tip_isplatna_obvrska_pkey
            primary key,
    kod varchar(255)                                                      not null
        constraint fin_tip_isplatna_obvrska_kod_key
            unique,
    ime varchar(255)                                                      not null
);

create table fin_tip_naplati_cenovnik
(
    id                                   int4 default nextval('fin_tip_naplati_cenovnik_id_seq'::regclass) not null
        constraint fin_tip_naplati_cenovnik_pkey
            primary key,
    tip_naplata_organizaciona_edinica_id int4                                                              not null,
    vid_valuta_id                        int4                                                              not null,
    iznos                                numeric(14, 2)                                                    not null,
    valid_from                           date                                                              not null,
    valid_to                             date,
    prioritet                            int4 default 1                                                    not null,
    dozvoli_rati                         bool default false                                                not null,
    max_rati                             int4,
    aktivna                              bool default true                                                 not null
);

create table fin_tip_naplati_organizaciona_edinica
(
    id                       int4 default nextval('fin_tip_naplati_organizaciona_edinica_id_seq'::regclass) not null
        constraint fin_tip_naplati_organizaciona_edinica_pkey
            primary key,
    ime_tip_naplata          varchar(255)                                                                   not null,
    organizaciona_edinica_id int4                                                                           not null,
    aktivna                  bool default true                                                              not null
);

create table fin_tip_platna_komponenta
(
    id           int4 default nextval('fin_tip_platna_komponenta_id_seq'::regclass) not null
        constraint fin_tip_platna_komponenta_pkey
            primary key,
    kod          varchar(255)                                                       not null
        constraint fin_tip_platna_komponenta_kod_key
            unique,
    ime          varchar(255)                                                       not null,
    kategorija   varchar(255)                                                       not null,
    default_sign int4                                                               not null
);

create table fin_transakciski_smetki
(
    id                      int4 default nextval('fin_transakciski_smetki_id_seq'::regclass) not null
        constraint fin_transakciski_smetki_pkey
            primary key,
    banka_id                int4,
    account_holder_ime      varchar(255),
    iban                    varchar(255),
    domestic_account_number varchar(255),
    routing_code            varchar(255),
    account_type            varchar(255)                                                     not null,
    vid_valuta_id           int4                                                             not null,
    aktivna                 bool default true                                                not null
);

create table fin_vid_valuta
(
    id                 int4 default nextval('fin_vid_valuta_id_seq'::regclass) not null
        constraint fin_vid_valuta_pkey
            primary key,
    iso_code           varchar(3)                                              not null
        constraint fin_vid_valuta_iso_code_key
            unique,
    ime_valuta         varchar(255)                                            not null,
    simbol             varchar(255),
    decimali_kvantitet int4 default 2                                          not null,
    aktivna            bool default true                                       not null
);

create table gradovi
(
    id        int4 default nextval('gradovi_id_seq'::regclass) not null
        constraint gradovi_pkey
            primary key,
    grad_kod  varchar(255),
    grad_ime  varchar(255),
    drzava_id int4                                             not null
);

create table korisnici
(
    id         int4 default nextval('korisnici_id_seq'::regclass) not null
        constraint korisnici_pkey
            primary key,
    username   varchar(255),
    password   varchar(255),
    lice_id    int4                                               not null,
    created_at timestamp(6),
    updated_at timestamp(6)
);

create table lice
(
    id             int4 default nextval('lice_id_seq'::regclass) not null
        constraint lice_pkey
            primary key,
    ime            varchar(255),
    prezime        varchar(255),
    datum_ragjanje date,
    pol            varchar(255),
    email          varchar(255),
    telefon        varchar(255),
    grad_id        int4                                          not null,
    aktiven        bool
);

create table or_mapa_objekt
(
    id                 int4 default nextval('or_mapa_objekt_id_seq'::regclass) not null
        constraint or_mapa_objekt_pkey
            primary key,
    map_object_type_id int4                                                    not null,
    spatial_tekst      text
);

create table or_mapa_objekt_organizacija
(
    id                          int4 default nextval('or_mapa_objekt_organizacija_id_seq'::regclass) not null
        constraint or_mapa_objekt_organizacija_pkey
            primary key,
    tip_objekt_organizacija_id  int4                                                                 not null,
    ime                         varchar(255),
    mapa_objekt_id              int4                                                                 not null,
    organizaciona_edinica_id    int4                                                                 not null,
    mapa_objekt_organizacija_id int4
);

create table or_organizaciona_edinica
(
    id             int4 default nextval('or_organizaciona_edinica_id_seq'::regclass) not null
        constraint or_organizaciona_edinica_pkey
            primary key,
    toe_id         int4                                                              not null,
    oe_id          int4,
    ime            varchar(255),
    mapa_objekt_id int4
);

create table or_organizaciona_edinica_atributi_vrednosti
(
    id                                int4 default nextval('or_organizaciona_edinica_atributi_vrednosti_id_seq'::regclass) not null
        constraint or_organizaciona_edinica_atributi_vrednosti_pkey
            primary key,
    tip_organizaciona_edinica_atribut int4                                                                                 not null,
    organizaciona_edinica             int4                                                                                 not null,
    string_vrednost                   varchar(255),
    numericka_vrednost                numeric,
    boolean_vrednost                  bool
);

create table or_organizaciona_edinica_smetki
(
    id                       int4 default nextval('or_organizaciona_edinica_smetki_id_seq'::regclass) not null
        constraint or_organizaciona_edinica_smetki_pkey
            primary key,
    organizaciona_edinica_id int4                                                                     not null,
    transakciska_smetka_id   int4                                                                     not null,
    aktivna                  bool
);

create table or_tip_mapa_objekt
(
    id   int4 default nextval('or_tip_mapa_objekt_id_seq'::regclass) not null
        constraint or_tip_mapa_objekt_pkey
            primary key,
    name varchar(255)
        constraint or_tip_mapa_objekt_name_key
            unique
);

create table or_tip_objekt_organizacija
(
    id  int4 default nextval('or_tip_objekt_organizacija_id_seq'::regclass) not null
        constraint or_tip_objekt_organizacija_pkey
            primary key,
    ime varchar(255)
);

create table or_tipovi_organizaciona_edinica
(
    id  int4 default nextval('or_tipovi_organizaciona_edinica_id_seq'::regclass) not null
        constraint or_tipovi_organizaciona_edinica_pkey
            primary key,
    ime varchar(255)
);

create table or_tipovi_organizaciona_edinica_atributi
(
    id                           int4 default nextval('or_tipovi_organizaciona_edinica_atributi_id_seq'::regclass) not null
        constraint or_tipovi_organizaciona_edinica_atributi_pkey
            primary key,
    tip_organizaciona_edinica_id int4                                                                              not null,
    ime                          varchar(255),
    regex                        varchar(255),
    tip_atribut_id               int4                                                                              not null,
    zadolzitelen                 bool
);

create table sm_akademska_godina
(
    id                       int4 default nextval('sm_akademska_godina_id_seq'::regclass) not null
        constraint sm_akademska_godina_pkey
            primary key,
    organizaciona_edinica_id int4                                                         not null,
    oznaka                   varchar(255)
        constraint sm_akademska_godina_oznaka_key
            unique,
    datum_od                 date                                                         not null,
    datum_do                 date                                                         not null,
    aktivna                  bool default true
);

create table sm_akademski_semestar
(
    id                                   int4 default nextval('sm_akademski_semestar_id_seq'::regclass) not null
        constraint sm_akademski_semestar_pkey
            primary key,
    organizaciona_edinica_id             int4                                                           not null,
    akademska_godina_id                  int4                                                           not null,
    tip_akademski_semestar_id            int4                                                           not null,
    period_akademski_semestar_id         int4                                                           not null,
    tip_naplata_organizaciona_edinica_id int4                                                           not null,
    name                                 varchar(255)
);

create table sm_akademski_semestar_smer_kvota
(
    id                    int4 default nextval('sm_akademski_semestar_smer_kvota_id_seq'::regclass) not null
        constraint sm_akademski_semestar_smer_kvota_pkey
            primary key,
    akademski_semestar_id int4                                                                      not null,
    smer_verzija_id       int4                                                                      not null,
    tip_kvota_id          int4                                                                      not null,
    tip_naplata_oe_id     int4                                                                      not null,
    aktivna               bool default true
);

create table sm_akreditacija
(
    id                     int4 default nextval('sm_akreditacija_id_seq'::regclass) not null
        constraint sm_akreditacija_pkey
            primary key,
    tip_akreditacija_id    int4                                                     not null,
    predmet_id             int4                                                     not null,
    naziv_verzija          varchar(255),
    opis_sodrzina          text,
    krediti                int4                                                     not null,
    status_akreditacija_id int4                                                     not null,
    akreditacisko_telo_id  int4                                                     not null,
    validen_od             date                                                     not null,
    validen_do             date,
    broj_odluka            varchar(255),
    aktiven                bool default true
);

create table sm_akreditacija_fond
(
    id              int4 default nextval('sm_akreditacija_fond_id_seq'::regclass) not null
        constraint sm_akreditacija_fond_pkey
            primary key,
    tip_fond        varchar(255),
    fond            int4,
    akreditacija_id int4                                                          not null
);

create table sm_akreditacija_predmet_grupa_preduslov
(
    id               int4 default nextval('sm_akreditacija_predmet_grupa_preduslov_id_seq'::regclass) not null
        constraint sm_akreditacija_predmet_grupa_preduslov_pkey
            primary key,
    akreditacija_id  int4                                                                             not null,
    logicki_operator varchar(255)
);

create table sm_akreditacija_predmet_preduslov
(
    id                                      int4 default nextval('sm_akreditacija_predmet_preduslov_id_seq'::regclass) not null
        constraint sm_akreditacija_predmet_preduslov_pkey
            primary key,
    akreditacija_predmet_grupa_preduslov_id int4                                                                       not null,
    predmet_id                              int4,
    krediti_preduslov                       int4
);

create table sm_akreditacija_telo_clen
(
    id                             int4 default nextval('sm_akreditacija_telo_clen_id_seq'::regclass) not null
        constraint sm_akreditacija_telo_clen_pkey
            primary key,
    akreditacisko_telo_id          int4                                                               not null,
    vraboten_angazman_id           int4,
    tip_uloga_akreditacija_telo_id int4                                                               not null,
    datum_od                       date,
    datum_do                       date,
    aktiven                        bool default true                                                  not null
);

create table sm_akreditacisko_telo
(
    id                        int4 default nextval('sm_akreditacisko_telo_id_seq'::regclass) not null
        constraint sm_akreditacisko_telo_pkey
            primary key,
    tip_akreditacisko_telo_id int4                                                           not null,
    organizaciona_edinica_id  int4,
    ime                       varchar(255)                                                   not null,
    opis                      varchar(255),
    aktiven                   bool default true                                              not null
);

create table sm_ispitna_sesija
(
    id                    int4 default nextval('sm_ispitna_sesija_id_seq'::regclass) not null
        constraint sm_ispitna_sesija_pkey
            primary key,
    akademski_semestar_id int4                                                       not null,
    naziv                 varchar(255)                                               not null,
    datum_od              date                                                       not null,
    datum_do              date                                                       not null,
    status                varchar(255)
);

create table sm_kurs_realizacija
(
    id                       int4 default nextval('sm_kurs_realizacija_id_seq'::regclass) not null
        constraint sm_kurs_realizacija_pkey
            primary key,
    akreditacija_id          int4                                                         not null,
    akademski_semestar_id    int4                                                         not null,
    organizaciona_edinica_id int4                                                         not null,
    kapacitet_studenti       int4,
    minimalen_broj           int4,
    status                   varchar(255)
);

create table sm_kurs_realizacija_nastaven_kadar
(
    id                          int4 default nextval('sm_kurs_realizacija_nastaven_kadar_id_seq'::regclass) not null
        constraint sm_kurs_realizacija_nastaven_kadar_pkey
            primary key,
    vraboten_angazman_id        int4                                                                        not null,
    tip_uloga_nastaven_kadar_id int4                                                                        not null,
    fond_casovi_nedelno         numeric(5, 2),
    datum_od                    date                                                                        not null,
    datum_do                    date,
    primaren                    bool default false                                                          not null,
    aktiven                     bool default true                                                           not null
);

create table sm_kurs_realizacija_paralelka
(
    id                  int4 default nextval('sm_kurs_realizacija_paralelka_id_seq'::regclass) not null
        constraint sm_kurs_realizacija_paralelka_pkey
            primary key,
    kurs_realizacija_id int4                                                                   not null,
    oznaka              varchar(255)                                                           not null,
    kapacitet_studenti  int4                                                                   not null,
    aktiven             bool default true
);

create table sm_organizaciona_edinica_diplomirani
(
    id                       int4 default nextval('sm_organizaciona_edinica_diplomirani_id_seq'::regclass) not null
        constraint sm_organizaciona_edinica_diplomirani_pkey
            primary key,
    organizaciona_edinica_id int4                                                                          not null,
    student_id               int4                                                                          not null,
    diploma_dokument_id      int4                                                                          not null,
    smer_id                  int4                                                                          not null,
    akademska_godina_id      int4                                                                          not null
);

create table sm_organizaciona_edinica_dostignuvanja
(
    id                       int4 default nextval('sm_organizaciona_edinica_dostignuvanja_id_seq'::regclass) not null
        constraint sm_organizaciona_edinica_dostignuvanja_pkey
            primary key,
    organizaciona_edinica_id int4                                                                            not null,
    tip_dostignuvanje_id     int4                                                                            not null,
    opis                     varchar(255),
    aktiven                  bool
);

create table sm_organizaciona_edinica_student_atributi
(
    id                       int4 default nextval('sm_organizaciona_edinica_student_atributi_id_seq'::regclass) not null
        constraint sm_organizaciona_edinica_student_atributi_pkey
            primary key,
    organizaciona_edinica_id int4                                                                               not null,
    ime                      varchar(255),
    regex                    varchar(255),
    tip_atribut_id           int4                                                                               not null,
    zadolzitelen             bool
);

create table sm_organizaciona_edinica_student_atributi_vrednosti
(
    id                                    int4 default nextval('sm_organizaciona_edinica_student_atributi_vrednosti_id_seq'::regclass) not null
        constraint sm_organizaciona_edinica_student_atributi_vrednosti_pkey
            primary key,
    organizaciona_edinica_student_atribut int4                                                                                         not null,
    student_id                            int4                                                                                         not null,
    string_vrednost                       varchar(255),
    numericka_vrednost                    numeric,
    boolean_vrednost                      bool
);

create table sm_organizaciona_edinica_upis_pravilo
(
    id                       int4 default nextval('sm_organizaciona_edinica_upis_pravilo_id_seq'::regclass) not null
        constraint sm_organizaciona_edinica_upis_pravilo_pkey
            primary key,
    organizaciona_edinica_id int4                                                                           not null,
    templejt                 varchar(255),
    validaciski_regex        varchar(255),
    strategija               varchar(255)
);

create table sm_paralelka_nastaven_kadar
(
    id                            int4 default nextval('sm_paralelka_nastaven_kadar_id_seq'::regclass) not null
        constraint sm_paralelka_nastaven_kadar_pkey
            primary key,
    kurs_realizacija_paralelka_id int4                                                                 not null,
    kurs_realizacija_kadar_id     int4                                                                 not null
);

create table sm_period_akademski_semestar
(
    id         int4 default nextval('sm_period_akademski_semestar_id_seq'::regclass) not null
        constraint sm_period_akademski_semestar_pkey
            primary key,
    ime_period varchar(255)
        constraint sm_period_akademski_semestar_ime_period_key
            unique
);

create table sm_predmet
(
    id                       int4 default nextval('sm_predmet_id_seq'::regclass) not null
        constraint sm_predmet_pkey
            primary key,
    organizaciona_edinica_id int4                                                not null,
    kratenka                 varchar(255)
        constraint sm_predmet_kratenka_key
            unique,
    ime_predmet              varchar(255)                                        not null,
    opis                     text
);

create table sm_sistem_ocenuvanje
(
    id                       int4 default nextval('sm_sistem_ocenuvanje_id_seq'::regclass) not null
        constraint sm_sistem_ocenuvanje_pkey
            primary key,
    organicationa_edinica_id int4                                                          not null,
    ime_sistem               varchar(255)
);

create table sm_sistem_ocenuvanje_vrednost
(
    id                   int4 default nextval('sm_sistem_ocenuvanje_vrednost_id_seq'::regclass) not null
        constraint sm_sistem_ocenuvanje_vrednost_pkey
            primary key,
    sistem_ocenuvanje_id int4                                                                   not null,
    ocena_labela         varchar(255),
    ocena_vrednost       int4,
    polozitelna          bool
);

create table sm_smer
(
    id                       int4 default nextval('sm_smer_id_seq'::regclass) not null
        constraint sm_smer_pkey
            primary key,
    organizaciona_edinica_id int4                                             not null,
    ime_smer                 varchar(255),
    tip_smer_id              int4                                             not null,
    akademski_stepen_id      int4                                             not null,
    vid_kvalifikacija_id     int4                                             not null,
    pole_kvalifikacija_id    int4                                             not null
);

create table sm_smer_diplomiranje_grupa_preduslov
(
    id               int4 default nextval('sm_smer_diplomiranje_grupa_preduslov_id_seq'::regclass) not null
        constraint sm_smer_diplomiranje_grupa_preduslov_pkey
            primary key,
    smer_verzija_id  int4                                                                          not null,
    logicki_operator varchar(255)
);

create table sm_smer_diplomiranje_preduslov
(
    id                                     int4 default nextval('sm_smer_diplomiranje_preduslov_id_seq'::regclass) not null
        constraint sm_smer_diplomiranje_preduslov_pkey
            primary key,
    smer_diplomiranje_grupa_preduslov_id   int4                                                                    not null,
    krediti                                int4,
    organizaciona_edinica_dostignuvanje_id int4
);

create table sm_smer_upis_grupa_preduslov
(
    id               int4 default nextval('sm_smer_upis_grupa_preduslov_id_seq'::regclass) not null
        constraint sm_smer_upis_grupa_preduslov_pkey
            primary key,
    smer_verzija_id  int4                                                                  not null,
    logicki_operator varchar(255)
);

create table sm_smer_upis_preduslov
(
    id                           int4 default nextval('sm_smer_upis_preduslov_id_seq'::regclass) not null
        constraint sm_smer_upis_preduslov_pkey
            primary key,
    smer_upis_grupa_preduslov_id int4                                                            not null,
    vid_kvalifikacija_id         int4                                                            not null,
    pole_kvalifikacija_id        int4                                                            not null
);

create table sm_smer_verzija
(
    id               int4 default nextval('sm_smer_verzija_id_seq'::regclass) not null
        constraint sm_smer_verzija_pkey
            primary key,
    smer_id          int4                                                     not null,
    ime_smer_verzija varchar(255),
    aktiven          bool default true
);

create table sm_smer_verzija_semestar
(
    id                           int4 default nextval('sm_smer_verzija_semestar_id_seq'::regclass) not null
        constraint sm_smer_verzija_semestar_pkey
            primary key,
    smer_verzija_id              int4                                                              not null,
    reden_broj                   int4                                                              not null,
    period_akademski_semestar_id int4                                                              not null,
    vkupno_ects_potrebni         int4 default 30,
    min_izborni_krediti          int4,
    aktiven                      bool default true
);

create table sm_smer_verzija_semestar_kurs
(
    id                       int4 default nextval('sm_smer_verzija_semestar_kurs_id_seq'::regclass) not null
        constraint sm_smer_verzija_semestar_kurs_pkey
            primary key,
    smer_verzija_semestar_id int4                                                                   not null,
    akreditacija_id          int4                                                                   not null,
    zadolzitelen             bool default true                                                      not null,
    izborna_grupa_kod        varchar(255),
    aktiven                  bool default true
);

create table sm_status_akreditacija
(
    id  int4 default nextval('sm_status_akreditacija_id_seq'::regclass) not null
        constraint sm_status_akreditacija_pkey
            primary key,
    kod varchar(255)                                                    not null
        constraint sm_status_akreditacija_kod_key
            unique,
    ime varchar(255)                                                    not null
);

create table sm_student_dostignuvanje
(
    id                                     int4 default nextval('sm_student_dostignuvanje_id_seq'::regclass) not null
        constraint sm_student_dostignuvanje_pkey
            primary key,
    organizaciona_edinica_dostignuvanje_id int4                                                              not null,
    odobreno_od_vraboten_id                int4                                                              not null,
    student_id                             int4                                                              not null,
    datum_postignato                       timestamp(6)                                                      not null,
    status                                 varchar(255)                                                      not null,
    opis_detali                            varchar(255)
);

create table sm_student_ispit_prijava
(
    id                     int4 default nextval('sm_student_ispit_prijava_id_seq'::regclass) not null
        constraint sm_student_ispit_prijava_pkey
            primary key,
    student_upisan_kurs_id int4                                                              not null,
    ispitna_sesija_id      int4                                                              not null,
    datum_prijava          timestamp(6)                                                      not null,
    status                 varchar(255)                                                      not null
);

create table sm_student_ocena_zapis
(
    id                                 int4 default nextval('sm_student_ocena_zapis_id_seq'::regclass) not null
        constraint sm_student_ocena_zapis_pkey
            primary key,
    student_upisan_kurs_id             int4                                                            not null,
    ispitna_sesija_id                  int4                                                            not null,
    datum_zapis                        timestamp(6)                                                    not null,
    osvoeni_poeni                      numeric(5, 2),
    sistem_ocenuvanje_vrednost_id      int4                                                            not null,
    kurs_realizacija_nastaven_kadar_id int4                                                            not null
);

create table sm_student_paralelka_raspredelba
(
    id                            int4 default nextval('sm_student_paralelka_raspredelba_id_seq'::regclass) not null
        constraint sm_student_paralelka_raspredelba_pkey
            primary key,
    student_upisan_kurs_id        int4                                                                      not null,
    kurs_realizacija_paralelka_id int4                                                                      not null,
    datum_raspredelba             timestamp(6)                                                              not null
);

create table sm_student_semestar_upis
(
    id                       int4 default nextval('sm_student_semestar_upis_id_seq'::regclass) not null
        constraint sm_student_semestar_upis_pkey
            primary key,
    studenti_smerovi_id      int4                                                              not null,
    akademski_semestar_id    int4                                                              not null,
    smer_verzija_semestar_id int4                                                              not null,
    datum_upis               timestamp(6)                                                      not null,
    status                   varchar(255)                                                      not null
);

create table sm_student_upisan_kurs
(
    id                       int4 default nextval('sm_student_upisan_kurs_id_seq'::regclass) not null
        constraint sm_student_upisan_kurs_pkey
            primary key,
    student_semestar_upis_id int4                                                            not null,
    kurs_realizacija_id      int4                                                            not null,
    status_slushanje         varchar(255)                                                    not null
);

create table sm_studenti
(
    id                       int4 default nextval('sm_studenti_id_seq'::regclass) not null
        constraint sm_studenti_pkey
            primary key,
    user_id                  int4                                                 not null,
    organizaciona_edinica_id int4                                                 not null,
    indeks                   varchar(255),
    aktiven                  bool default true
);

create table sm_studenti_smerovi
(
    id              int4 default nextval('sm_studenti_smerovi_id_seq'::regclass) not null
        constraint sm_studenti_smerovi_pkey
            primary key,
    student_id      int4                                                         not null,
    smer_verzija_id int4                                                         not null,
    kvota_id        int4                                                         not null,
    primaren        bool default true,
    aktiven         bool default true
);

create table sm_tip_akademski_semestar
(
    id      int4 default nextval('sm_tip_akademski_semestar_id_seq'::regclass) not null
        constraint sm_tip_akademski_semestar_pkey
            primary key,
    ime_tip varchar(255)
        constraint sm_tip_akademski_semestar_ime_tip_key
            unique
);

create table sm_tip_akreditacija
(
    id  int4 default nextval('sm_tip_akreditacija_id_seq'::regclass) not null
        constraint sm_tip_akreditacija_pkey
            primary key,
    kod varchar(255)                                                 not null
        constraint sm_tip_akreditacija_kod_key
            unique,
    ime varchar(255)                                                 not null
);

create table sm_tip_akreditacisko_telo
(
    id  int4 default nextval('sm_tip_akreditacisko_telo_id_seq'::regclass) not null
        constraint sm_tip_akreditacisko_telo_pkey
            primary key,
    kod varchar(255)                                                       not null
        constraint sm_tip_akreditacisko_telo_kod_key
            unique,
    ime varchar(255)                                                       not null
);

create table sm_tip_dostignuvanje
(
    id                       int4 default nextval('sm_tip_dostignuvanje_id_seq'::regclass) not null
        constraint sm_tip_dostignuvanje_pkey
            primary key,
    kod                      varchar(255)
        constraint sm_tip_dostignuvanje_kod_key
            unique,
    ime                      varchar(255)                                                  not null,
    organizaciona_edinica_id int4                                                          not null
);

create table sm_tip_kvota
(
    id                       int4 default nextval('sm_tip_kvota_id_seq'::regclass) not null
        constraint sm_tip_kvota_pkey
            primary key,
    kod                      varchar(255)
        constraint sm_tip_kvota_kod_key
            unique,
    organizaciona_edinica_id int4                                                  not null,
    ime                      varchar(255)
);

create table sm_tip_smer
(
    id      int4 default nextval('sm_tip_smer_id_seq'::regclass) not null
        constraint sm_tip_smer_pkey
            primary key,
    ime_tip varchar(255)
        constraint sm_tip_smer_ime_tip_key
            unique
);

create table sm_tip_uloga_akreditacija_telo
(
    id  int4 default nextval('sm_tip_uloga_akreditacija_telo_id_seq'::regclass) not null
        constraint sm_tip_uloga_akreditacija_telo_pkey
            primary key,
    kod varchar(255)                                                            not null
        constraint sm_tip_uloga_akreditacija_telo_kod_key
            unique,
    ime varchar(255)                                                            not null
);

create table sm_upis_pravilo_brojac
(
    id                int4 default nextval('sm_upis_pravilo_brojac_id_seq'::regclass) not null
        constraint sm_upis_pravilo_brojac_pkey
            primary key,
    pravilo_id        int4                                                            not null,
    opseg_vrednost    varchar(255),
    posledna_sekvenca int4 default 0                                                  not null,
    updated_at        timestamp(6)
);

create table tip_atribut
(
    id  int4 default nextval('tip_atribut_id_seq'::regclass) not null
        constraint tip_atribut_pkey
            primary key,
    ime varchar(255)
        constraint tip_atribut_ime_key
            unique
);

create table tmp_salary_truth
(
    plata_period_id int4,
    vraboten_id     int4,
    true_bruto      numeric,
    true_odbivki    numeric,
    true_danok      numeric
);

create index idx_truth_mapping
    on tmp_salary_truth (plata_period_id, vraboten_id);

create table vr_akademski_stepen
(
    id  int4 default nextval('vr_akademski_stepen_id_seq'::regclass) not null
        constraint vr_akademski_stepen_pkey
            primary key,
    ime varchar(255)
        constraint vr_akademski_stepen_ime_key
            unique
);

create table vr_akademsko_zvanje
(
    id       int4 default nextval('vr_akademsko_zvanje_id_seq'::regclass) not null
        constraint vr_akademsko_zvanje_pkey
            primary key,
    kod      varchar(255)                                                 not null
        constraint vr_akademsko_zvanje_kod_key
            unique,
    ime      varchar(255)                                                 not null,
    redosled int4,
    aktivno  bool default true                                            not null
);

create table vr_lice_kvalifikacija
(
    id                    int4 default nextval('vr_lice_kvalifikacija_id_seq'::regclass) not null
        constraint vr_lice_kvalifikacija_pkey
            primary key,
    lice_id               int4                                                           not null,
    vid_kvalifikacija_id  int4                                                           not null,
    pole_kvalifikacija_id int4,
    naziv_kvalifikacija   varchar(255)                                                   not null,
    institucija_izdavac   varchar(255),
    drzava_id             int4                                                           not null,
    datum_izdavanje       date,
    dokument_url          varchar(255)
);

create table vr_pole_kvalifikacija
(
    id  int4 default nextval('vr_pole_kvalifikacija_id_seq'::regclass) not null
        constraint vr_pole_kvalifikacija_pkey
            primary key,
    kod varchar(255)                                                   not null
        constraint vr_pole_kvalifikacija_kod_key
            unique,
    ime varchar(255)                                                   not null
);

create table vr_pozicija_preduslov
(
    id                            int4 default nextval('vr_pozicija_preduslov_id_seq'::regclass) not null
        constraint vr_pozicija_preduslov_pkey
            primary key,
    pozicija_preduslov_grupa_id   int4                                                           not null,
    tip_preduslov                 varchar(255)                                                   not null,
    minimalen_akademski_stepen_id int4,
    vid_kvalifikacija_id          int4,
    pole_kvalifikacija_id         int4,
    min_godini_iskustvo           int4,
    obvrzna_verifikacija          bool default false                                             not null,
    zadolzitelen                  bool default true                                              not null
);

create table vr_pozicija_preduslov_grupa
(
    id                 int4 default nextval('vr_pozicija_preduslov_grupa_id_seq'::regclass) not null
        constraint vr_pozicija_preduslov_grupa_pkey
            primary key,
    rabota_pozicija_id int4                                                                 not null,
    logicki_operator   varchar(255)                                                         not null
);

create table vr_rabota_pozicija
(
    id                           int4 default nextval('vr_rabota_pozicija_id_seq'::regclass) not null
        constraint vr_rabota_pozicija_pkey
            primary key,
    tip_organizaciona_edinica_id int4                                                        not null,
    kod_pozicija                 varchar(255)                                                not null,
    ime_pozicija                 varchar(255)                                                not null,
    kategorija                   varchar(255),
    aktivna                      bool default true                                           not null
);

create table vr_status_vrabotenje
(
    id  int4 default nextval('vr_status_vrabotenje_id_seq'::regclass) not null
        constraint vr_status_vrabotenje_pkey
            primary key,
    kod varchar(255)                                                  not null
        constraint vr_status_vrabotenje_kod_key
            unique,
    ime varchar(255)                                                  not null
);

create table vr_tip_angazman
(
    id  int4 default nextval('vr_tip_angazman_id_seq'::regclass) not null
        constraint vr_tip_angazman_pkey
            primary key,
    kod varchar(255)                                             not null
        constraint vr_tip_angazman_kod_key
            unique,
    ime varchar(255)                                             not null
);

create table vr_tip_funkcija
(
    id       int4 default nextval('vr_tip_funkcija_id_seq'::regclass) not null
        constraint vr_tip_funkcija_pkey
            primary key,
    kod      varchar(255)                                             not null
        constraint vr_tip_funkcija_kod_key
            unique,
    ime      varchar(255)                                             not null,
    mandatna bool default false                                       not null
);

create table vr_tip_organizaciona_uloga
(
    id   int4 default nextval('vr_tip_organizaciona_uloga_id_seq'::regclass) not null
        constraint vr_tip_organizaciona_uloga_pkey
            primary key,
    kod  varchar(255)                                                        not null
        constraint vr_tip_organizaciona_uloga_kod_key
            unique,
    ime  varchar(255)                                                        not null,
    opis varchar(255)
);

create table vr_tip_uloga_nastaven_kadar
(
    id  int4 default nextval('vr_tip_uloga_nastaven_kadar_id_seq'::regclass) not null
        constraint vr_tip_uloga_nastaven_kadar_pkey
            primary key,
    kod varchar(255)                                                         not null
        constraint vr_tip_uloga_nastaven_kadar_kod_key
            unique,
    ime varchar(255)                                                         not null
);

create table vr_vid_kvalifikacija
(
    id                  int4 default nextval('vr_vid_kvalifikacija_id_seq'::regclass) not null
        constraint vr_vid_kvalifikacija_pkey
            primary key,
    kod                 varchar(255)                                                  not null
        constraint vr_vid_kvalifikacija_kod_key
            unique,
    ime                 varchar(255)                                                  not null,
    akademski_stepen_id int4                                                          not null
);

create table vr_vraboten_akademsko_zvanje
(
    id                   int4 default nextval('vr_vraboten_akademsko_zvanje_id_seq'::regclass) not null
        constraint vr_vraboten_akademsko_zvanje_pkey
            primary key,
    vraboten_angazman_id int4                                                                  not null,
    akademsko_zvanje_id  int4                                                                  not null,
    datum_od             date                                                                  not null,
    datum_do             date,
    dokument_id          int4,
    aktivno              bool default true                                                     not null
);

create table vr_vraboten_angazman
(
    id                       int4 default nextval('vr_vraboten_angazman_id_seq'::regclass) not null
        constraint vr_vraboten_angazman_pkey
            primary key,
    lice_id                  int4                                                          not null,
    organizaciona_edinica_id int4                                                          not null,
    rabota_pozicija_id       int4                                                          not null,
    status_vrabotenje_id     int4                                                          not null,
    tip_angazman_id          int4                                                          not null,
    datum_od                 date                                                          not null,
    datum_do                 date,
    primaren                 bool default true                                             not null,
    fte                      numeric(5, 2),
    nadreden_angazman_id     int4,
    aktiven                  bool default true                                             not null
);

create table vr_vraboten_funkcija
(
    id                       int4 default nextval('vr_vraboten_funkcija_id_seq'::regclass) not null
        constraint vr_vraboten_funkcija_pkey
            primary key,
    vraboten_angazman_id     int4                                                          not null,
    tip_funkcija_id          int4                                                          not null,
    organizaciona_edinica_id int4                                                          not null,
    datum_od                 date                                                          not null,
    datum_do                 date,
    dokument_id              int4,
    aktivna                  bool default true                                             not null
);

create table vr_vraboten_kompensacija
(
    id                   int4 default nextval('vr_vraboten_kompensacija_id_seq'::regclass) not null
        constraint vr_vraboten_kompensacija_pkey
            primary key,
    vraboten_angazman_id int4                                                              not null,
    valid_from           date                                                              not null,
    valid_to             date,
    tip_osnova           varchar(255)                                                      not null,
    bruto_osnova         numeric(14, 2),
    neto_osnova          numeric(14, 2),
    vid_valuta_id        int4                                                              not null,
    fond_casovi          numeric(10, 2),
    aktivna              bool default true                                                 not null
);

create table vr_vraboten_organizaciona_uloga
(
    id                         int4 default nextval('vr_vraboten_organizaciona_uloga_id_seq'::regclass) not null
        constraint vr_vraboten_organizaciona_uloga_pkey
            primary key,
    vraboten_angazman_id       int4                                                                     not null,
    tip_organizaciona_uloga_id int4                                                                     not null,
    organizaciona_edinica_id   int4                                                                     not null,
    datum_od                   date                                                                     not null,
    datum_do                   date,
    aktivna                    bool default true                                                        not null
);
