| 31 | | Скриптата `idontknow_script.sql` дефинира: |
| 32 | | |
| 33 | | * '''119 табели''' — со примарни клучеви и `unique` ограничувања таму каде е потребно (на пр. кодови, кратенки, индекси). |
| 34 | | * '''11 индекси''' — секундарни (B-tree) индекси за чести пребарувања (на пр. `idx_korisnici_username`, `idx_studenti_indeks`, индекси по `user_id` за финансиските табели). |
| 35 | | * '''9 погледи (views)''' — означени со префикс `vw_`. |
| 36 | | * '''9 програмски рутини''' — 3 функции (`fn_`), 3 процедури (`pr_`) и 3 trigger функции (`trgf_`). |
| 37 | | |
| 38 | | '''Забелешка за опфатот на скриптата (важно при обнова на системот):''' |
| 39 | | |
| 40 | | * Скриптата '''не содржи foreign key ограничувања''' — релациите помеѓу табелите се изведени преку колоните `*_id`, но референцијалниот интегритет не е наметнат на ниво на база. |
| 41 | | * Секвенците (`*_id_seq`) се референцирани преку `nextval(...)`, но '''нивните `CREATE SEQUENCE` дефиниции не се дел од оваа скрипта''' (се креираат посебно или од ORM-от). |
| 42 | | * Дефинирани се trigger '''функциите''' (`trgf_`), но '''нема `CREATE TRIGGER` врзувања''' во скриптата — врзувањето на функциите за табелите се прави одделно. |
| 43 | | * Скриптата '''не содржи `INSERT`''' наредби — внесот на податоци е целосно одвоен во DML скриптата (види подолу). |
| 44 | | |
| 45 | | === Модули и табели === |
| 46 | | |
| 47 | | ==== 1. Општи и основни податоци (без префикс) ==== |
| 48 | | Основа на системот, референцирана од сите модули. |
| 49 | | * `lice` — централен регистар на сите физички лица (студенти, кадар, надворешни соработници), спречува дуплирање |
| 50 | | * `korisnici` — кориснички сметки за најава, врзани за `lice` |
| 51 | | * `drzavi`, `gradovi` — географски шифрарници |
| 52 | | * `tip_atribut` — заеднички шифрарник на типови атрибути за сите EAV модули |
| 53 | | |
| 54 | | ==== 2. Организациска структура и инфраструктура (or_) ==== |
| 55 | | * `or_organizaciona_edinica` — рекурзивна хиерархија на институцијата (`oe_id` покажува кон истата табела) |
| 56 | | * `or_tipovi_organizaciona_edinica`, `or_tipovi_organizaciona_edinica_atributi` — типови ОЕ и нивни EAV дефиниции |
| 57 | | * `or_organizaciona_edinica_atributi_vrednosti` — EAV вредности по ОЕ |
| 58 | | * `or_organizaciona_edinica_smetki` — врска ОЕ ↔ трансакциски сметки |
| 59 | | * `or_mapa_objekt`, `or_tip_mapa_objekt` — просторни објекти (просторните податоци се чуваат во `spatial_tekst` од тип `text`) |
| 60 | | * `or_mapa_objekt_organizacija`, `or_tip_objekt_organizacija` — мапирање на згради/простории кон ОЕ |
| 61 | | |
| 62 | | ==== 3. Човечки ресурси и кадар (vr_) ==== |
| 63 | | * `vr_vraboten_angazman` — централен ангажман: лице ↔ ОЕ ↔ позиција ↔ тип ангажман ↔ FTE (можни повеќе паралелни ангажмани) |
| 64 | | * `vr_rabota_pozicija` — работни позиции |
| 65 | | * `vr_pozicija_preduslov_grupa`, `vr_pozicija_preduslov` — логички предуслови за позиција (AND/OR) |
| 66 | | * `vr_lice_kvalifikacija` — квалификации/дипломи на лице |
| 67 | | * `vr_vid_kvalifikacija`, `vr_pole_kvalifikacija`, `vr_akademski_stepen` — шифрарници за квалификации |
| 68 | | * `vr_akademsko_zvanje`, `vr_vraboten_akademsko_zvanje` — академски звања и нивна историја |
| 69 | | * `vr_vraboten_funkcija`, `vr_tip_funkcija` — мандатни функции (Декан, Продекан) |
| 70 | | * `vr_vraboten_organizaciona_uloga`, `vr_tip_organizaciona_uloga` — организациски улоги |
| 71 | | * `vr_vraboten_kompensacija` — основна (бруто/нето) плата по ангажман |
| 72 | | * `vr_status_vrabotenje`, `vr_tip_angazman`, `vr_tip_uloga_nastaven_kadar` — шифрарници |
| 73 | | |
| 74 | | ==== 4. Студентски прашања и академски менаџмент (sm_) ==== |
| 75 | | * `sm_akademska_godina`, `sm_akademski_semestar`, `sm_tip_akademski_semestar`, `sm_period_akademski_semestar` — приспособливо академско време (семестри/триместри/квартали) |
| 76 | | * `sm_akademski_semestar_smer_kvota`, `sm_tip_kvota` — квоти и наплата по семестар/смер |
| 77 | | * `sm_predmet` — апстрактен предмет |
| 78 | | * `sm_akreditacija`, `sm_akreditacija_fond`, `sm_tip_akreditacija`, `sm_status_akreditacija` — законска рамка на предметот (кредити, фонд часови) |
| 79 | | * `sm_akreditacija_predmet_grupa_preduslov`, `sm_akreditacija_predmet_preduslov` — предуслови за слушање предмет |
| 80 | | * `sm_akreditacisko_telo`, `sm_akreditacija_telo_clen`, `sm_tip_akreditacisko_telo`, `sm_tip_uloga_akreditacija_telo` — акредитациски тела и членови |
| 81 | | * `sm_smer`, `sm_smer_verzija`, `sm_tip_smer` — студиски програми (верзионирани) |
| 82 | | * `sm_smer_verzija_semestar`, `sm_smer_verzija_semestar_kurs` — структура на смер по семестри |
| 83 | | * `sm_smer_upis_grupa_preduslov`, `sm_smer_upis_preduslov` — предуслови за упис |
| 84 | | * `sm_smer_diplomiranje_grupa_preduslov`, `sm_smer_diplomiranje_preduslov` — предуслови за дипломирање |
| 85 | | * `sm_studenti`, `sm_studenti_smerovi` — студенти и нивни смерови |
| 86 | | * `sm_organizaciona_edinica_upis_pravilo`, `sm_upis_pravilo_brojac` — автоматско генерирање на индекс |
| 87 | | * `sm_organizaciona_edinica_student_atributi`, `sm_organizaciona_edinica_student_atributi_vrednosti` — EAV за студентски мета-податоци |
| 88 | | * `sm_kurs_realizacija`, `sm_kurs_realizacija_paralelka` — инстанцирање на акредитација во семестар и поделба на паралелки |
| 89 | | * `sm_kurs_realizacija_nastaven_kadar`, `sm_paralelka_nastaven_kadar` — алокација на наставен кадар |
| 90 | | * `sm_student_semestar_upis`, `sm_student_upisan_kurs` — упис на семестар и курсеви |
| 91 | | * `sm_ispitna_sesija`, `sm_student_ispit_prijava` — испитни сесии и пријави |
| 92 | | * `sm_sistem_ocenuvanje`, `sm_sistem_ocenuvanje_vrednost` — приспособлив систем на оценување (A–F, бодови, броен) |
| 93 | | * `sm_student_ocena_zapis` — траен запис на оценка |
| 94 | | * `sm_organizaciona_edinica_dostignuvanja`, `sm_tip_dostignuvanje`, `sm_student_dostignuvanje` — достигнувања (пракса, волонтерска работа, дипломски) |
| 95 | | * `sm_organizaciona_edinica_diplomirani` — евиденција на дипломирани |
| 96 | | * `sm_student_paralelka_raspredelba` — распределба на студент по паралелка |
| 97 | | |
| 98 | | ==== 5. Финансии, сметководство и плати (fin_) ==== |
| 99 | | * `fin_finansiska_obvrska`, `fin_finansiska_obvrska_stavka` — студентски обврски (оригинална/отворена сума, рати, ставки) |
| 100 | | * `fin_status_finansiska_obvrska` — статус на обврска (Izdadena, Delumno platena, Platena) |
| 101 | | * `fin_korisnik_vid_naplati`, `fin_korisnik_vid_naplati_attributi`, `fin_korisnik_naplata_atributi_vrednosti`, `fin_korisnici_naplati` — EAV за начини на наплата (Stripe, PayPal, картичка, трансфер) |
| 102 | | * `fin_naplati`, `fin_naplata_alokacija` — влезни плаќања и нивна алокација кон обврски |
| 103 | | * `fin_isplatna_obvrska`, `fin_tip_isplatna_obvrska`, `fin_status_isplatna_obvrska` — излезни обврски (стипендии, рефундации, хонорари) |
| 104 | | * `fin_korisnici_isplata`, `fin_isplati`, `fin_isplata_alokacija` — исплати преку трансакциски сметки |
| 105 | | * `fin_transakciski_smetki`, `fin_banki` — банкарски сметки (IBAN/SWIFT) |
| 106 | | * `fin_vid_valuta` — валути (ISO код, симбол) |
| 107 | | * `fin_tip_naplati_organizaciona_edinica`, `fin_tip_naplati_cenovnik` — ценовници |
| 108 | | * `fin_status_transakcija` — статус на трансакција (ACCEPTED итн.) |
| 109 | | * `fin_finansiski_dokument`, `fin_finansiski_dokument_tip`, `fin_finansiski_dokument_vrska` — финансиски документи |
| 110 | | * '''Потсистем за плати:''' `fin_plata_period`, `fin_status_plata_period`, `fin_plata_vlez`, `fin_tip_platna_komponenta`, `fin_plata_stavka_vraboten` (исплатно ливче), `fin_plata_komponenta` (атомарни ставки на пресметката) |
| 111 | | |
| 112 | | ==== 6. Управување со документи (dok_) ==== |
| 113 | | * `dok_dokument_templejti`, `dok_tip_dokumenti_organizaciona_edinica` — HTML/URL обрасци за официјални документи |
| 114 | | * `dok_dokument_templejt_atributi` — EAV дефиниции на полиња во образец |
| 115 | | * `dok_generiran_dokument`, `dok_generiran_dokument_vrednosti` — генерирани документи и пополнети вредности |
| 116 | | * `dok_dokument_potpis` — евиденција на авторизација/потпис (кој ангажман и функција го одобрил) |
| 117 | | |
| 118 | | ==== 7. Надворешни ентитети (ent_) ==== |
| 119 | | * `ent_entiteti` — надворешни компании, добавувачи, агенции, партнерски институции |
| 120 | | * `ent_entiteti_smetki` — мапирање на нивните трансакциски сметки кон `fin_transakciski_smetki` |
| 121 | | |
| 122 | | ==== Помошни/привремени табели ==== |
| 123 | | * `tmp_salary_truth` — '''видете ја Забелешката во делот за внес на податоци''' |
| 124 | | |
| 125 | | === Програмски објекти === |
| 126 | | |
| 127 | | ==== Погледи (views) ==== |
| 128 | | * `vw_aktivni_upisani_kursevi` — капацитет, број запишани и слободни места по реализација на курс |
| 129 | | * `vw_ispitni_prijavi` — преглед на пријавите за испит (сесија, индекс, предмет, статус) |
| 130 | | * `vw_istorija_naplati` — историја на наплати (сума, валута, статус, референца, ОЕ) |
| 131 | | * `vw_otvoreni_finansiski_obvrski` — отворени обврски по корисник (вкупно отворено, број, најстаро доспевање) |
| 132 | | * `vw_pregled_plati_period` — преглед на плати по период (бруто/нето/даноци, број вработени, просечна нето) |
| 133 | | * `vw_raspredelba_nastaven_kadar` — оптовареност на наставен кадар (часови, курсеви, паралелки по семестар) |
| 134 | | * `vw_studentski_oceni` — просек, освоени кредити, положени/паднати по студент |
| 135 | | * `vw_vraboteni_karieren_pat` — кариерен пат (академско звање и тековна функција) |
| 136 | | * `vw_vraboteni_prekrsoci_kvalifikacii` — вработени што не ги исполнуваат предусловите за позицијата |
| 137 | | |
| 138 | | ==== Функции (fn_) ==== |
| 139 | | * `fn_otvoren_dolg(user_id, vid_valuta_id)` → `numeric` — вкупен отворен долг на корисник во дадена валута |
| 140 | | * `fn_prosek_student(student_id, sistem_ocenuvanje_id)` → `numeric` — пондериран просек по кредити |
| 141 | | * `fn_slobodni_mesta(kurs_realizacija_id)` → `integer` — преостанати слободни места на реализација |
| 142 | | |
| 143 | | ==== Процедури (pr_) ==== |
| 144 | | * `pr_generiraj_obvrski_za_semestar(akademski_semestar_id)` — масовно генерирање обврски за школарина за сите запишани студенти (со пакетен `COMMIT`) |
| 145 | | * `pr_registriraj_naplata(user_id, suma, valuta, oe_id, referenca, korisnik_naplata_id)` — регистрира наплата и ја алоцира по отворени обврски (по доспевање) |
| 146 | | * `pr_zapisi_student_na_kurs(student_id, kurs_realizacija_id)` — запишува студент на курс со проверка на долг и капацитет |
| 147 | | |
| 148 | | ==== Trigger функции (trgf_) ==== |
| 149 | | * `trgf_azuriraj_otvorena_suma` — при алокација ја намалува отворената сума на обврската и го ажурира статусот (Platena/Delumno platena), со заштита од преалокација |
| 150 | | * `trgf_kapacitet_kurs` — спречува упис над капацитетот на курсот (сериализирано со `FOR UPDATE`) |
| 151 | | * `trgf_validna_ocena` — дозволува оценка само за активен упис, поени 0–100, и датум што не е во иднина |
| 152 | | |
| 153 | | ''(Овие функции мора да се врзат за соодветните табели преку `CREATE TRIGGER`, што не е дел од `idontknow_script.sql`.)'' |
| | 25 | '''Опфат на DDL скриптата (важно):''' |
| | 26 | * Нема `FOREIGN KEY` ограничувања — релациите се изведени преку колоните `*_id`, без наметнат референцијален интегритет на ниво на база. |
| | 27 | * Секвенците (`*_id_seq`) се користат преку `nextval(...)`, но нивните `CREATE SEQUENCE` дефиниции не се дел од скриптата. |
| | 28 | * Дефинирани се trigger функциите (`trgf_`), но нема `CREATE TRIGGER` врзувања за табелите. |
| | 29 | * Скриптата не содржи `INSERT` — внесот на податоци е целосно одвоен во DML скриптата. |
| 159 | | 1. '''Базични шифрарници''' (без зависности) — `tip_atribut`, `drzavi`, `fin_vid_valuta`, `vr_akademski_stepen`, `vr_pole_kvalifikacija`, сите `*_tip_*`, `*_status_*` табели, `sm_period_akademski_semestar`, `fin_finansiski_dokument_tip`, `fin_tip_platna_komponenta` |
| 160 | | 2. '''Географија и идентитети''' — `gradovi` → `lice` → `korisnici` |
| 161 | | 3. '''Организациска структура''' — `or_mapa_objekt` → `or_organizaciona_edinica` (рекурзивно: прво коренот) → EAV дефиниции и вредности |
| 162 | | 4. '''Банкарски и финансиски сметки''' — `fin_banki`, `fin_transakciski_smetki`, `ent_entiteti`, `ent_entiteti_smetki`, `or_organizaciona_edinica_smetki` |
| 163 | | 5. '''Човечки ресурси''' — `vr_rabota_pozicija`, предуслови, `vr_vraboten_angazman`, звања/функции, `vr_lice_kvalifikacija`, `vr_vraboten_kompensacija` |
| 164 | | 6. '''Студиска структура''' — `sm_predmet`, `sm_akreditacisko_telo`, `sm_akreditacija` (+ предуслови), `sm_smer` → `sm_smer_verzija` → семестри, `sm_akademska_godina` → `sm_akademski_semestar`, `sm_sistem_ocenuvanje(_vrednost)` |
| 165 | | 7. '''Студенти и реализации''' — `sm_studenti`, `sm_studenti_smerovi`, `sm_kurs_realizacija` (+ паралелки, кадар), `sm_student_semestar_upis`, `sm_student_upisan_kurs` |
| 166 | | 8. '''Трансакциски/тест податоци''' — испитни сесии и пријави, `sm_student_ocena_zapis`, финансиски обврски и наплати, плати (период → влезови → ставки → компоненти), документи |
| | 35 | 1. '''Шифрарници''' (без зависности) — типови, статуси, валути, држави, академски степени, `tip_atribut` |
| | 36 | 2. '''Основни ентитети''' — `gradovi` → `lice` → `korisnici`, организациски единици, банкарски/трансакциски сметки |
| | 37 | 3. '''Оперативни податоци''' — работни позиции и ангажмани, предмети, акредитации, смерови, академски години и семестри, студенти |
| | 38 | 4. '''Трансакциски/тест податоци''' — уписи, оценки, испити, финансиски обврски, наплати и плати |