Changeset 48d2bed for sql/ddl.sql


Ignore:
Timestamp:
09/24/26 12:09:29 (11 hours ago)
Author:
MBK <marija.karapandzova@…>
Branches:
master
Parents:
ae6cd79
Message:

Remote database setup, fixed models and application properties

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sql/ddl.sql

    rae6cd79 r48d2bed  
    1 
    21BEGIN;
    32
    … …  
    1110DROP TABLE IF EXISTS prescription_medical_records CASCADE;
    1211DROP TABLE IF EXISTS diagnosis_medical_records CASCADE;
    13 DROP TABLE IF EXISTS doctor_medical_records CASCADE;
    1412DROP TABLE IF EXISTS billing_lab_tests CASCADE;
    1513DROP TABLE IF EXISTS billing_procedures CASCADE;
    1614DROP TABLE IF EXISTS department_procedures CASCADE;
    17 DROP TABLE IF EXISTS diagnosis_procedures CASCADE;
    1815DROP TABLE IF EXISTS specialization_procedures CASCADE;
    1916DROP TABLE IF EXISTS diagnosis_symptoms CASCADE;
    … …  
    4340DROP TABLE IF EXISTS doctor_specialization CASCADE;
    4441DROP TABLE IF EXISTS doctor_level CASCADE;
    45 
    46 
    47 
     42DROP TABLE IF EXISTS users CASCADE;
     43
     44
     45-- USERS & ROLES ---------------------------------------------------------
     46
     47CREATE TABLE users (
     48    user_id SERIAL PRIMARY KEY,
     49    username VARCHAR(255) NOT NULL UNIQUE,
     50    password VARCHAR(255) NOT NULL,
     51    role VARCHAR(50) NOT NULL,
     52    first_name VARCHAR(100),
     53    last_name VARCHAR(100),
     54    is_active BOOLEAN DEFAULT true
     55);
     56
     57
     58-- STAFF -------------------------------------------------------------------
    4859
    4960CREATE TABLE doctor_level (
    50                               level_id BIGINT,
    51                               level TEXT NOT NULL,
    52 
    53                               CONSTRAINT doctor_level_PK
    54                                   PRIMARY KEY (level_id),
    55 
    56                               CONSTRAINT doctor_level_level_UQ
    57                                   UNIQUE (level)
     61    level_id BIGINT,
     62    level TEXT NOT NULL,
     63
     64    CONSTRAINT doctor_level_PK
     65        PRIMARY KEY (level_id),
     66
     67    CONSTRAINT doctor_level_level_UQ
     68        UNIQUE (level)
    5869);
    5970
    6071CREATE TABLE doctor_specialization (
    61                                        specialization_id BIGINT,
    62                                        specialization_name TEXT NOT NULL,
    63 
    64                                        CONSTRAINT doctor_specialization_PK
    65                                            PRIMARY KEY (specialization_id),
    66 
    67                                        CONSTRAINT doctor_specialization_name_UQ
    68                                            UNIQUE (specialization_name)
     72    specialization_id BIGINT,
     73    specialization_name TEXT NOT NULL,
     74
     75    CONSTRAINT doctor_specialization_PK
     76        PRIMARY KEY (specialization_id),
     77
     78    CONSTRAINT doctor_specialization_name_UQ
     79        UNIQUE (specialization_name)
    6980);
    7081
    7182
    7283CREATE TABLE departments (
    73                              department_id BIGINT,
    74                              department_name TEXT NOT NULL,
    75 
    76                              CONSTRAINT departments_PK
    77                                  PRIMARY KEY (department_id),
    78 
    79                              CONSTRAINT departments_name_UQ
    80                                  UNIQUE (department_name)
     84    department_id BIGINT,
     85    department_name TEXT NOT NULL,
     86
     87    CONSTRAINT departments_PK
     88        PRIMARY KEY (department_id),
     89
     90    CONSTRAINT departments_name_UQ
     91        UNIQUE (department_name)
    8192);
    8293
    8394CREATE TABLE doctors (
    84                          doctor_id BIGINT,
    85 
    86                          first_name TEXT NOT NULL,
    87                          last_name TEXT NOT NULL,
    88 
    89                          email_address TEXT NOT NULL,
    90 
    91                          level_id BIGINT NOT NULL,
    92                          specialization_id BIGINT NOT NULL,
    93                          department_id BIGINT NOT NULL,
    94 
    95                          CONSTRAINT doctors_PK
    96                              PRIMARY KEY (doctor_id),
    97 
    98                          CONSTRAINT doctors_email_UQ
    99                              UNIQUE (email_address),
    100 
    101                          CONSTRAINT doctors_email_chk
    102                              CHECK (email_address LIKE '%@%'),
    103 
    104                          CONSTRAINT doctors_level_FK
    105                              FOREIGN KEY (level_id)
    106                                  REFERENCES doctor_level(level_id)
    107                                  ON DELETE RESTRICT,
    108 
    109                          CONSTRAINT doctors_specialization_FK
    110                              FOREIGN KEY (specialization_id)
    111                                  REFERENCES doctor_specialization(specialization_id)
    112                                  ON DELETE RESTRICT,
    113 
    114                          CONSTRAINT doctors_department_FK
    115                              FOREIGN KEY (department_id)
    116                                  REFERENCES departments(department_id)
    117                                  ON DELETE RESTRICT
    118 );
    119 
    120 
     95    doctor_id BIGINT,
     96
     97    first_name TEXT NOT NULL,
     98    last_name TEXT NOT NULL,
     99
     100    email_address TEXT NOT NULL,
     101
     102    level_id BIGINT NOT NULL,
     103    specialization_id BIGINT NOT NULL,
     104    department_id BIGINT NOT NULL,
     105
     106    user_id BIGINT NOT NULL,
     107
     108    CONSTRAINT doctors_PK
     109        PRIMARY KEY (doctor_id),
     110
     111    CONSTRAINT doctors_email_UQ
     112        UNIQUE (email_address),
     113
     114    CONSTRAINT doctors_email_chk
     115        CHECK (email_address LIKE '%@%'),
     116
     117    CONSTRAINT doctors_user_UQ
     118        UNIQUE (user_id),
     119
     120    CONSTRAINT doctors_level_FK
     121        FOREIGN KEY (level_id)
     122            REFERENCES doctor_level(level_id)
     123            ON DELETE RESTRICT,
     124
     125    CONSTRAINT doctors_specialization_FK
     126        FOREIGN KEY (specialization_id)
     127            REFERENCES doctor_specialization(specialization_id)
     128            ON DELETE RESTRICT,
     129
     130    CONSTRAINT doctors_department_FK
     131        FOREIGN KEY (department_id)
     132            REFERENCES departments(department_id)
     133            ON DELETE RESTRICT,
     134
     135    CONSTRAINT doctors_user_FK
     136        FOREIGN KEY (user_id)
     137            REFERENCES users(user_id)
     138            ON DELETE RESTRICT
     139);
     140
     141CREATE TABLE admin (
     142    admin_id BIGINT,
     143
     144    username TEXT NOT NULL,
     145    name TEXT NOT NULL,
     146    lastname TEXT NOT NULL,
     147
     148    email TEXT NOT NULL,
     149
     150    user_id BIGINT NOT NULL,
     151
     152    CONSTRAINT admin_PK
     153        PRIMARY KEY (admin_id),
     154
     155    CONSTRAINT admin_username_UQ
     156        UNIQUE (username),
     157
     158    CONSTRAINT admin_email_UQ
     159        UNIQUE (email),
     160
     161    CONSTRAINT admin_email_chk
     162        CHECK (email LIKE '%@adminmedora%'),
     163
     164    CONSTRAINT admin_user_UQ
     165        UNIQUE (user_id),
     166
     167    CONSTRAINT admin_user_FK
     168        FOREIGN KEY (user_id)
     169            REFERENCES users(user_id)
     170            ON DELETE RESTRICT
     171);
     172
     173CREATE TABLE lab_technician (
     174    technician_id BIGINT,
     175
     176    username TEXT NOT NULL,
     177    name TEXT NOT NULL,
     178    lastname TEXT NOT NULL,
     179
     180    email TEXT NOT NULL,
     181
     182    user_id BIGINT NOT NULL,
     183
     184    CONSTRAINT lab_technician_PK
     185        PRIMARY KEY (technician_id),
     186
     187    CONSTRAINT lab_technician_username_UQ
     188        UNIQUE (username),
     189
     190    CONSTRAINT lab_technician_email_UQ
     191        UNIQUE (email),
     192
     193    CONSTRAINT lab_technician_email_chk
     194        CHECK (email LIKE '%@labmedora%'),
     195
     196    CONSTRAINT lab_technician_user_UQ
     197        UNIQUE (user_id),
     198
     199    CONSTRAINT lab_technician_user_FK
     200        FOREIGN KEY (user_id)
     201            REFERENCES users(user_id)
     202            ON DELETE RESTRICT
     203);
     204
     205
     206-- PATIENTS ------------------------------------------------------------------
    121207
    122208CREATE TABLE patients (
    123                           patient_id BIGINT,
    124 
    125                           first_name TEXT NOT NULL,
    126                           last_name TEXT NOT NULL,
    127 
    128                           email_address TEXT,
    129                           date_of_birth DATE NOT NULL,
    130 
    131                           blood_type TEXT,
    132                           gender TEXT,
    133 
    134                           phone_number TEXT,
    135                           embg TEXT NOT NULL,
    136 
    137                           CONSTRAINT patients_PK
    138                               PRIMARY KEY (patient_id),
    139 
    140                           CONSTRAINT patients_email_UQ
    141                               UNIQUE (email_address),
    142 
    143                           CONSTRAINT patients_embg_UQ
    144                               UNIQUE (embg),
    145 
    146                           CONSTRAINT patients_gender_chk
    147                               CHECK (gender IN ('MALE', 'FEMALE')),
    148 
    149                           CONSTRAINT patients_blood_type_chk
    150                               CHECK (
    151                                   blood_type IN (
    152                                                  'A+', 'A-',
    153                                                  'B+', 'B-',
    154                                                  'AB+', 'AB-',
    155                                                  'O+', 'O-'
    156                                       )
    157                                   )
    158 );
    159 
    160 CREATE TABLE admin (
    161                        admin_id BIGINT,
    162 
    163                        username TEXT NOT NULL,
    164                        name TEXT NOT NULL,
    165                        lastname TEXT NOT NULL,
    166 
    167                        email TEXT NOT NULL,
    168 
    169                        CONSTRAINT admin_PK
    170                            PRIMARY KEY (admin_id),
    171 
    172                        CONSTRAINT admin_username_UQ
    173                            UNIQUE (username),
    174 
    175                        CONSTRAINT admin_email_UQ
    176                            UNIQUE (email),
    177 
    178                        CONSTRAINT admin_email_chk
    179                            CHECK (email LIKE '%@adminmedora%')
    180 );
    181 
    182 CREATE TABLE lab_technician (
    183                                 technician_id BIGINT,
    184 
    185                                 username TEXT NOT NULL,
    186                                 name TEXT NOT NULL,
    187                                 lastname TEXT NOT NULL,
    188 
    189                                 email TEXT NOT NULL,
    190 
    191                                 CONSTRAINT lab_technician_PK
    192                                     PRIMARY KEY (technician_id),
    193 
    194                                 CONSTRAINT lab_technician_username_UQ
    195                                     UNIQUE (username),
    196 
    197                                 CONSTRAINT lab_technician_email_UQ
    198                                     UNIQUE (email),
    199 
    200                                 CONSTRAINT lab_technician_email_chk
    201                                     CHECK (email LIKE '%@labmedora%')
    202 );
    203 
    204 
     209    patient_id BIGINT,
     210
     211    first_name TEXT NOT NULL,
     212    last_name TEXT NOT NULL,
     213
     214    email_address TEXT,
     215    date_of_birth DATE NOT NULL,
     216
     217    blood_type TEXT,
     218    gender TEXT,
     219
     220    phone_number TEXT,
     221    embg TEXT NOT NULL,
     222
     223    user_id BIGINT NOT NULL,
     224
     225    CONSTRAINT patients_PK
     226        PRIMARY KEY (patient_id),
     227
     228    CONSTRAINT patients_email_UQ
     229        UNIQUE (email_address),
     230
     231    CONSTRAINT patients_embg_UQ
     232        UNIQUE (embg),
     233
     234    CONSTRAINT patients_embg_format_chk
     235        CHECK (embg ~ '^[0-9]{13}$'),
     236
     237    CONSTRAINT patients_gender_chk
     238        CHECK (gender IN ('MALE', 'FEMALE')),
     239
     240    CONSTRAINT patients_blood_type_chk
     241        CHECK (
     242            blood_type IN (
     243                           'A+', 'A-',
     244                           'B+', 'B-',
     245                           'AB+', 'AB-',
     246                           'O+', 'O-'
     247                )
     248            ),
     249
     250    CONSTRAINT patients_user_UQ
     251        UNIQUE (user_id),
     252
     253    CONSTRAINT patients_user_FK
     254        FOREIGN KEY (user_id)
     255            REFERENCES users(user_id)
     256            ON DELETE RESTRICT
     257);
     258
     259
     260-- APPOINTMENTS --------------------------------------------------------------
    205261
    206262CREATE TABLE appointments (
    207                               appointment_id BIGINT,
    208 
    209                               appointment_date DATE NOT NULL,
    210                               appointment_time TIME NOT NULL,
    211 
    212                               status TEXT NOT NULL,
    213 
    214                               patient_id BIGINT NOT NULL,
    215                               doctor_id BIGINT NOT NULL,
    216 
    217                               CONSTRAINT appointments_PK
    218                                   PRIMARY KEY (appointment_id),
    219 
    220                               CONSTRAINT appointments_status_chk
    221                                   CHECK (
    222                                       status IN (
    223                                                  'SCHEDULED',
    224                                                  'COMPLETED',
    225                                                  'CANCELLED',
    226                                                  'IN_PROGRESS'
    227                                           )
    228                                       ),
    229 
    230                               CONSTRAINT appointments_patient_FK
    231                                   FOREIGN KEY (patient_id)
    232                                       REFERENCES patients(patient_id)
    233                                       ON DELETE RESTRICT,
    234 
    235                               CONSTRAINT appointments_doctor_FK
    236                                   FOREIGN KEY (doctor_id)
    237                                       REFERENCES doctors(doctor_id)
    238                                       ON DELETE RESTRICT
     263    appointment_id BIGINT,
     264
     265    appointment_date DATE NOT NULL,
     266    appointment_time TIME NOT NULL,
     267
     268    status TEXT NOT NULL,
     269
     270    patient_id BIGINT NOT NULL,
     271    doctor_id BIGINT NOT NULL,
     272
     273    CONSTRAINT appointments_PK
     274        PRIMARY KEY (appointment_id),
     275
     276    CONSTRAINT appointments_status_chk
     277        CHECK (
     278            status IN (
     279                       'SCHEDULED',
     280                       'COMPLETED',
     281                       'CANCELLED',
     282                       'IN_PROGRESS'
     283                )
     284            ),
     285
     286    CONSTRAINT appointments_patient_FK
     287        FOREIGN KEY (patient_id)
     288            REFERENCES patients(patient_id)
     289            ON DELETE RESTRICT,
     290
     291    CONSTRAINT appointments_doctor_FK
     292        FOREIGN KEY (doctor_id)
     293            REFERENCES doctors(doctor_id)
     294            ON DELETE RESTRICT
     295);
     296
     297
     298-- CLINICAL ENTITIES -----------------------------------------------------
     299
     300CREATE TABLE allergies (
     301    allergy_id BIGINT,
     302
     303    name TEXT NOT NULL,
     304    allergy_severity TEXT NOT NULL,
     305
     306    CONSTRAINT allergies_PK
     307        PRIMARY KEY (allergy_id),
     308
     309    CONSTRAINT allergies_name_UQ
     310        UNIQUE (name),
     311
     312    CONSTRAINT allergies_name_chk
     313        CHECK (length(trim(name)) > 0),
     314
     315    CONSTRAINT allergies_severity_chk
     316        CHECK (allergy_severity IN ('LOW', 'MEDIUM', 'HIGH', 'CRITICAL'))
     317);
     318
     319CREATE TABLE symptoms (
     320    symptom_id BIGINT,
     321
     322    name TEXT NOT NULL,
     323    description TEXT,
     324
     325    CONSTRAINT symptoms_PK
     326        PRIMARY KEY (symptom_id),
     327
     328    CONSTRAINT symptoms_name_UQ
     329        UNIQUE (name),
     330
     331    CONSTRAINT symptoms_name_chk
     332        CHECK (length(trim(name)) > 0),
     333
     334    CONSTRAINT symptoms_description_chk
     335        CHECK (
     336            description IS NULL
     337                OR length(trim(description)) > 0
     338            )
    239339);
    240340
    241341CREATE TABLE diagnosis (
    242                            diagnosis_id BIGINT,
    243 
    244                            name TEXT NOT NULL,
    245                            description TEXT,
    246 
    247                            patient_id BIGINT NOT NULL,
    248                            doctor_id BIGINT NOT NULL,
    249 
    250                            CONSTRAINT diagnosis_PK
    251                                PRIMARY KEY (diagnosis_id),
    252 
    253                            CONSTRAINT diagnosis_patient_FK
    254                                FOREIGN KEY (patient_id)
    255                                    REFERENCES patients(patient_id)
    256                                    ON DELETE RESTRICT,
    257 
    258                            CONSTRAINT diagnosis_doctor_FK
    259                                FOREIGN KEY (doctor_id)
    260                                    REFERENCES doctors(doctor_id)
    261                                    ON DELETE RESTRICT
    262 );
    263 
    264 
    265 
     342    diagnosis_id BIGINT,
     343
     344    name TEXT NOT NULL,
     345    description TEXT,
     346
     347    patient_id BIGINT NOT NULL,
     348    doctor_id BIGINT NOT NULL,
     349
     350    CONSTRAINT diagnosis_PK
     351        PRIMARY KEY (diagnosis_id),
     352
     353    CONSTRAINT diagnosis_patient_FK
     354        FOREIGN KEY (patient_id)
     355            REFERENCES patients(patient_id)
     356            ON DELETE RESTRICT,
     357
     358    CONSTRAINT diagnosis_doctor_FK
     359        FOREIGN KEY (doctor_id)
     360            REFERENCES doctors(doctor_id)
     361            ON DELETE RESTRICT
     362);
     363
     364CREATE TABLE diagnosis_symptoms (
     365    diagnosis_id BIGINT NOT NULL,
     366    symptom_id BIGINT NOT NULL,
     367
     368    CONSTRAINT diagnosis_symptoms_PK
     369        PRIMARY KEY (diagnosis_id, symptom_id),
     370
     371    CONSTRAINT diagnosis_symptoms_diagnosis_FK
     372        FOREIGN KEY (diagnosis_id)
     373            REFERENCES diagnosis(diagnosis_id)
     374            ON DELETE RESTRICT,
     375
     376    CONSTRAINT diagnosis_symptoms_symptom_FK
     377        FOREIGN KEY (symptom_id)
     378            REFERENCES symptoms(symptom_id)
     379            ON DELETE RESTRICT
     380);
     381
     382
     383-- PROCEDURES --------------------------------------------------------------
    266384
    267385CREATE TABLE procedures (
    268                             procedure_id BIGINT,
    269 
    270                             procedure_type TEXT NOT NULL,
    271                             procedure_date DATE NOT NULL,
    272 
    273                             description TEXT,
    274                             cost DECIMAL NOT NULL,
    275 
    276                             doctor_id BIGINT NOT NULL,
    277                             diagnosis_id BIGINT NOT NULL,
    278 
    279                             CONSTRAINT procedures_PK
    280                                 PRIMARY KEY (procedure_id),
    281 
    282                             CONSTRAINT procedures_cost_chk
    283                                 CHECK (cost >= 0),
    284 
    285                             CONSTRAINT procedures_type_chk
    286                                 CHECK (length(trim(procedure_type)) > 0),
    287 
    288                             CONSTRAINT procedures_doctor_FK
    289                                 FOREIGN KEY (doctor_id)
    290                                     REFERENCES doctors(doctor_id)
    291                                     ON DELETE RESTRICT,
    292 
    293                             CONSTRAINT procedures_diagnosis_FK
    294                                 FOREIGN KEY (diagnosis_id)
    295                                     REFERENCES diagnosis(diagnosis_id)
    296                                     ON DELETE RESTRICT
    297 );
    298 
    299 
    300 
     386    procedure_id BIGINT,
     387
     388    procedure_type TEXT NOT NULL,
     389    procedure_date DATE NOT NULL,
     390
     391    description TEXT,
     392    cost DECIMAL NOT NULL,
     393
     394    doctor_id BIGINT NOT NULL,
     395
     396    CONSTRAINT procedures_PK
     397        PRIMARY KEY (procedure_id),
     398
     399    CONSTRAINT procedures_cost_chk
     400        CHECK (cost >= 0),
     401
     402    CONSTRAINT procedures_type_chk
     403        CHECK (length(trim(procedure_type)) > 0),
     404
     405    CONSTRAINT procedures_doctor_FK
     406        FOREIGN KEY (doctor_id)
     407            REFERENCES doctors(doctor_id)
     408            ON DELETE RESTRICT
     409);
    301410
    302411CREATE TABLE procedure_results (
    303                                    result_id BIGINT,
    304 
    305                                    result_description TEXT,
    306                                    result_date DATE NOT NULL,
    307 
    308                                    procedure_id BIGINT NOT NULL,
    309 
    310                                    CONSTRAINT procedure_results_PK
    311                                        PRIMARY KEY (result_id),
    312 
    313                                    CONSTRAINT procedure_results_description_chk
    314                                        CHECK (
    315                                            result_description IS NULL
    316                                                OR length(trim(result_description)) > 0
    317                                            ),
    318 
    319                                    CONSTRAINT procedure_results_procedure_FK
    320                                        FOREIGN KEY (procedure_id)
    321                                            REFERENCES procedures(procedure_id)
    322                                            ON DELETE RESTRICT
    323 );
     412    result_id BIGINT,
     413
     414    result_description TEXT,
     415    result_date DATE NOT NULL,
     416
     417    procedure_id BIGINT NOT NULL,
     418
     419    CONSTRAINT procedure_results_PK
     420        PRIMARY KEY (result_id),
     421
     422    CONSTRAINT procedure_results_description_chk
     423        CHECK (
     424            result_description IS NULL
     425                OR length(trim(result_description)) > 0
     426            ),
     427
     428    CONSTRAINT procedure_results_procedure_FK
     429        FOREIGN KEY (procedure_id)
     430            REFERENCES procedures(procedure_id)
     431            ON DELETE RESTRICT
     432);
     433
     434CREATE TABLE specialization_procedures (
     435    specialization_id BIGINT NOT NULL,
     436    procedure_id BIGINT NOT NULL,
     437
     438    CONSTRAINT specialization_procedures_PK
     439        PRIMARY KEY (specialization_id, procedure_id),
     440
     441    CONSTRAINT specialization_procedures_specialization_FK
     442        FOREIGN KEY (specialization_id)
     443            REFERENCES doctor_specialization(specialization_id)
     444            ON DELETE RESTRICT,
     445
     446    CONSTRAINT specialization_procedures_procedure_FK
     447        FOREIGN KEY (procedure_id)
     448            REFERENCES procedures(procedure_id)
     449            ON DELETE RESTRICT
     450);
     451
     452CREATE TABLE department_procedures (
     453    department_id BIGINT NOT NULL,
     454    procedure_id BIGINT NOT NULL,
     455
     456    CONSTRAINT department_procedures_PK
     457        PRIMARY KEY (department_id, procedure_id),
     458
     459    CONSTRAINT department_procedures_department_FK
     460        FOREIGN KEY (department_id)
     461            REFERENCES departments(department_id)
     462            ON DELETE RESTRICT,
     463
     464    CONSTRAINT department_procedures_procedure_FK
     465        FOREIGN KEY (procedure_id)
     466            REFERENCES procedures(procedure_id)
     467            ON DELETE RESTRICT
     468);
     469
     470
     471-- LAB TESTS -----------------------------------------------------------------
     472
     473CREATE TABLE lab_tests (
     474    test_id BIGINT,
     475
     476    test_name TEXT NOT NULL,
     477    description TEXT,
     478    cost DECIMAL NOT NULL,
     479
     480    CONSTRAINT lab_tests_PK
     481        PRIMARY KEY (test_id),
     482
     483    CONSTRAINT lab_tests_cost_chk
     484        CHECK (cost >= 0),
     485
     486    CONSTRAINT lab_tests_name_chk
     487        CHECK (length(trim(test_name)) > 0)
     488);
     489
     490CREATE TABLE lab_results (
     491    result_id BIGINT,
     492
     493    results TEXT NOT NULL,
     494    result_date DATE NOT NULL,
     495
     496    test_id BIGINT NOT NULL,
     497
     498    CONSTRAINT lab_results_PK
     499        PRIMARY KEY (result_id),
     500
     501    CONSTRAINT lab_results_results_chk
     502        CHECK (length(trim(results)) > 0),
     503
     504    CONSTRAINT lab_results_date_chk
     505        CHECK (result_date <= CURRENT_DATE),
     506
     507    CONSTRAINT lab_results_test_FK
     508        FOREIGN KEY (test_id)
     509            REFERENCES lab_tests(test_id)
     510            ON DELETE RESTRICT
     511);
     512
     513
     514-- PRESCRIPTIONS ---------------------------------------------------------
    324515
    325516CREATE TABLE prescriptions (
    326                                prescription_id BIGINT,
    327 
    328                                medication_name TEXT NOT NULL,
    329 
    330                                CONSTRAINT prescriptions_PK
    331                                    PRIMARY KEY (prescription_id)
     517    prescription_id BIGINT,
     518
     519    medication_name TEXT NOT NULL,
     520
     521    CONSTRAINT prescriptions_PK
     522        PRIMARY KEY (prescription_id)
    332523);
    333524
    334525CREATE TABLE prescription_restriction (
    335                                           restriction_id BIGINT,
    336 
    337                                           description TEXT NOT NULL,
    338 
    339                                           prescription_id BIGINT NOT NULL,
    340 
    341                                           CONSTRAINT prescription_restriction_PK
    342                                               PRIMARY KEY (restriction_id),
    343 
    344                                           CONSTRAINT prescription_restriction_desc_chk
    345                                               CHECK (length(trim(description)) > 0),
    346 
    347                                           CONSTRAINT prescription_restriction_prescription_FK
    348                                               FOREIGN KEY (prescription_id)
    349                                                   REFERENCES prescriptions(prescription_id)
    350                                                   ON DELETE RESTRICT
    351 );
    352 
    353 
    354 CREATE TABLE lab_tests (
    355                            test_id BIGINT,
    356 
    357                            test_name TEXT NOT NULL,
    358                            description TEXT,
    359                            cost DECIMAL NOT NULL,
    360 
    361                            CONSTRAINT lab_tests_PK
    362                                PRIMARY KEY (test_id),
    363 
    364                            CONSTRAINT lab_tests_cost_chk
    365                                CHECK (cost >= 0),
    366 
    367                            CONSTRAINT lab_tests_name_chk
    368                                CHECK (length(trim(test_name)) > 0)
    369 );
    370 
    371 
    372 CREATE TABLE lab_results (
    373                              result_id BIGINT,
    374 
    375                              results TEXT NOT NULL,
    376                              result_date DATE NOT NULL,
    377 
    378                              test_id BIGINT NOT NULL,
    379 
    380                              CONSTRAINT lab_results_PK
    381                                  PRIMARY KEY (result_id),
    382 
    383                              CONSTRAINT lab_results_results_chk
    384                                  CHECK (length(trim(results)) > 0),
    385 
    386                              CONSTRAINT lab_results_date_chk
    387                                  CHECK (result_date <= CURRENT_DATE),
    388 
    389                              CONSTRAINT lab_results_test_FK
    390                                  FOREIGN KEY (test_id)
    391                                      REFERENCES lab_tests(test_id)
    392                                      ON DELETE RESTRICT
    393 );
     526    restriction_id BIGINT,
     527
     528    description TEXT NOT NULL,
     529
     530    prescription_id BIGINT NOT NULL,
     531
     532    CONSTRAINT prescription_restriction_PK
     533        PRIMARY KEY (restriction_id),
     534
     535    CONSTRAINT prescription_restriction_desc_chk
     536        CHECK (length(trim(description)) > 0),
     537
     538    CONSTRAINT prescription_restriction_prescription_FK
     539        FOREIGN KEY (prescription_id)
     540            REFERENCES prescriptions(prescription_id)
     541            ON DELETE RESTRICT
     542);
     543
     544CREATE TABLE allergy_prescription_restrictions (
     545    allergy_id BIGINT NOT NULL,
     546    restriction_id BIGINT NOT NULL,
     547
     548    CONSTRAINT allergy_prescription_restrictions_PK
     549        PRIMARY KEY (allergy_id, restriction_id),
     550
     551    CONSTRAINT allergy_prescription_restrictions_allergy_FK
     552        FOREIGN KEY (allergy_id)
     553            REFERENCES allergies(allergy_id)
     554            ON DELETE RESTRICT,
     555
     556    CONSTRAINT allergy_prescription_restrictions_restriction_FK
     557        FOREIGN KEY (restriction_id)
     558            REFERENCES prescription_restriction(restriction_id)
     559            ON DELETE RESTRICT
     560);
     561
     562
     563-- PATIENTS <-> ALLERGIES / SYMPTOMS -----------------------------------------
     564
     565CREATE TABLE patient_allergies (
     566    patient_id BIGINT NOT NULL,
     567    allergy_id BIGINT NOT NULL,
     568
     569    CONSTRAINT patient_allergies_PK
     570        PRIMARY KEY (patient_id, allergy_id),
     571
     572    CONSTRAINT patient_allergies_patient_FK
     573        FOREIGN KEY (patient_id)
     574            REFERENCES patients(patient_id)
     575            ON DELETE RESTRICT,
     576
     577    CONSTRAINT patient_allergies_allergy_FK
     578        FOREIGN KEY (allergy_id)
     579            REFERENCES allergies(allergy_id)
     580            ON DELETE RESTRICT
     581);
     582
     583CREATE TABLE patient_symptoms (
     584    patient_id BIGINT NOT NULL,
     585    symptom_id BIGINT NOT NULL,
     586
     587    CONSTRAINT patient_symptoms_PK
     588        PRIMARY KEY (patient_id, symptom_id),
     589
     590    CONSTRAINT patient_symptoms_patient_FK
     591        FOREIGN KEY (patient_id)
     592            REFERENCES patients(patient_id)
     593            ON DELETE RESTRICT,
     594
     595    CONSTRAINT patient_symptoms_symptom_FK
     596        FOREIGN KEY (symptom_id)
     597            REFERENCES symptoms(symptom_id)
     598            ON DELETE RESTRICT
     599);
     600
     601
     602-- MEDICAL RECORDS -------------------------------------------------------
    394603
    395604CREATE TABLE medical_records (
    396                                  record_id BIGINT PRIMARY KEY,
    397 
    398                                  patient_id BIGINT NOT NULL,
    399 
    400 
    401                                  FOREIGN KEY (patient_id)
    402                                      REFERENCES patients(patient_id)
    403                                      ON DELETE RESTRICT
    404 );
    405 
    406 
    407 
    408 
    409 CREATE TABLE allergies (
    410                            allergy_id BIGINT,
    411 
    412                            name TEXT NOT NULL,
    413                            allergy_severity TEXT NOT NULL,
    414 
    415                            CONSTRAINT allergies_PK
    416                                PRIMARY KEY (allergy_id),
    417 
    418                            CONSTRAINT allergies_name_UQ
    419                                UNIQUE (name),
    420 
    421                            CONSTRAINT allergies_name_chk
    422                                CHECK (length(trim(name)) > 0),
    423 
    424                            CONSTRAINT allergies_severity_chk
    425                                CHECK (allergy_severity IN ('LOW', 'MEDIUM', 'HIGH', 'CRITICAL'))
    426 );
    427 
    428 
    429 CREATE TABLE symptoms (
    430                           symptom_id BIGINT,
    431 
    432                           name TEXT NOT NULL,
    433                           description TEXT,
    434 
    435                           CONSTRAINT symptoms_PK
    436                               PRIMARY KEY (symptom_id),
    437 
    438                           CONSTRAINT symptoms_name_UQ
    439                               UNIQUE (name),
    440 
    441                           CONSTRAINT symptoms_name_chk
    442                               CHECK (length(trim(name)) > 0),
    443 
    444                           CONSTRAINT symptoms_description_chk
    445                               CHECK (
    446                                   description IS NULL
    447                                       OR length(trim(description)) > 0
    448                                   )
    449 );
    450 
     605    record_id BIGINT PRIMARY KEY,
     606
     607    patient_id BIGINT NOT NULL,
     608
     609    FOREIGN KEY (patient_id)
     610        REFERENCES patients(patient_id)
     611        ON DELETE RESTRICT
     612);
     613
     614CREATE TABLE diagnosis_medical_records (
     615    diagnosis_id BIGINT NOT NULL,
     616    record_id BIGINT NOT NULL,
     617
     618    CONSTRAINT diagnosis_medical_records_PK
     619        PRIMARY KEY (diagnosis_id, record_id),
     620
     621    CONSTRAINT diagnosis_medical_records_diagnosis_FK
     622        FOREIGN KEY (diagnosis_id)
     623            REFERENCES diagnosis(diagnosis_id)
     624            ON DELETE RESTRICT,
     625
     626    CONSTRAINT diagnosis_medical_records_record_FK
     627        FOREIGN KEY (record_id)
     628            REFERENCES medical_records(record_id)
     629            ON DELETE RESTRICT
     630);
     631
     632CREATE TABLE prescription_medical_records (
     633    prescription_id BIGINT NOT NULL,
     634    record_id BIGINT NOT NULL,
     635
     636    dosage TEXT NOT NULL,
     637    frequency TEXT NOT NULL,
     638    duration TEXT NOT NULL,
     639
     640    notes TEXT,
     641
     642    CONSTRAINT prescription_medical_records_PK
     643        PRIMARY KEY (prescription_id, record_id),
     644
     645    CONSTRAINT prescription_medical_records_prescription_FK
     646        FOREIGN KEY (prescription_id)
     647            REFERENCES prescriptions(prescription_id)
     648            ON DELETE RESTRICT,
     649
     650    CONSTRAINT prescription_medical_records_record_FK
     651        FOREIGN KEY (record_id)
     652            REFERENCES medical_records(record_id)
     653            ON DELETE RESTRICT
     654);
     655
     656CREATE TABLE medical_record_lab_results (
     657    record_id BIGINT NOT NULL,
     658    result_id BIGINT NOT NULL,
     659
     660    PRIMARY KEY (record_id, result_id),
     661
     662    FOREIGN KEY (record_id)
     663        REFERENCES medical_records(record_id)
     664        ON DELETE RESTRICT,
     665
     666    FOREIGN KEY (result_id)
     667        REFERENCES lab_results(result_id)
     668        ON DELETE RESTRICT
     669);
     670
     671CREATE TABLE medical_record_procedures (
     672    record_id BIGINT NOT NULL,
     673    procedure_id BIGINT NOT NULL,
     674
     675    PRIMARY KEY (record_id, procedure_id),
     676
     677    FOREIGN KEY (record_id)
     678        REFERENCES medical_records(record_id)
     679        ON DELETE RESTRICT,
     680
     681    FOREIGN KEY (procedure_id)
     682        REFERENCES procedures(procedure_id)
     683        ON DELETE RESTRICT
     684);
     685
     686CREATE TABLE medical_record_symptoms (
     687    record_id BIGINT NOT NULL,
     688    symptom_id BIGINT NOT NULL,
     689    severity TEXT,
     690
     691    PRIMARY KEY (record_id, symptom_id),
     692
     693    FOREIGN KEY (record_id)
     694        REFERENCES medical_records(record_id)
     695        ON DELETE RESTRICT,
     696
     697    FOREIGN KEY (symptom_id)
     698        REFERENCES symptoms(symptom_id)
     699        ON DELETE RESTRICT
     700);
     701
     702CREATE TABLE medical_record_allergies (
     703    record_id BIGINT NOT NULL,
     704    allergy_id BIGINT NOT NULL,
     705    reaction TEXT,
     706    severity TEXT,
     707
     708    PRIMARY KEY (record_id, allergy_id),
     709
     710    FOREIGN KEY (record_id)
     711        REFERENCES medical_records(record_id)
     712        ON DELETE RESTRICT,
     713
     714    FOREIGN KEY (allergy_id)
     715        REFERENCES allergies(allergy_id)
     716        ON DELETE RESTRICT
     717);
     718
     719
     720-- REPORTS & REFERRALS -----------------------------------------------------
    451721
    452722CREATE TABLE referrals (
    453 
    454                            referral_id BIGINT PRIMARY KEY,
    455 
    456                            reason TEXT NOT NULL,
    457                            referral_date DATE NOT NULL,
    458 
    459                            record_id BIGINT NOT NULL,
    460                            from_doctor_id BIGINT NOT NULL,
    461                            to_doctor_id BIGINT not null,
    462 
    463                            CONSTRAINT referrals_reason_chk
    464                                CHECK (length(trim(reason)) > 0),
    465 
    466                            FOREIGN KEY (record_id)
    467                                REFERENCES medical_records(record_id)
    468                                ON DELETE RESTRICT,
    469 
    470                            FOREIGN KEY (from_doctor_id)
    471                                REFERENCES doctors(doctor_id)
    472                                ON DELETE RESTRICT,
    473 
    474                            FOREIGN KEY (to_doctor_id)
    475                                REFERENCES doctors(doctor_id)
    476                                ON DELETE RESTRICT
     723    referral_id BIGINT PRIMARY KEY,
     724
     725    reason TEXT NOT NULL,
     726    referral_date DATE NOT NULL,
     727
     728    record_id BIGINT NOT NULL,
     729    from_doctor_id BIGINT NOT NULL,
     730    to_doctor_id BIGINT NOT NULL,
     731
     732    CONSTRAINT referrals_reason_chk
     733        CHECK (length(trim(reason)) > 0),
     734
     735    FOREIGN KEY (record_id)
     736        REFERENCES medical_records(record_id)
     737        ON DELETE RESTRICT,
     738
     739    FOREIGN KEY (from_doctor_id)
     740        REFERENCES doctors(doctor_id)
     741        ON DELETE RESTRICT,
     742
     743    FOREIGN KEY (to_doctor_id)
     744        REFERENCES doctors(doctor_id)
     745        ON DELETE RESTRICT
    477746);
    478747
    479748CREATE TABLE medical_report (
    480                                 report_id BIGINT PRIMARY KEY,
    481 
    482                                 description TEXT NOT NULL,
    483                                 report_date DATE NOT NULL,
    484 
    485                                 record_id BIGINT NOT NULL,
    486                                 doctor_id BIGINT NOT NULL,
    487 
    488                                 FOREIGN KEY (record_id)
    489                                     REFERENCES medical_records(record_id)
    490                                     ON DELETE RESTRICT,
    491 
    492                                 FOREIGN KEY (doctor_id)
    493                                     REFERENCES doctors(doctor_id)
    494                                     ON DELETE RESTRICT
    495 );
    496 
     749    report_id BIGINT PRIMARY KEY,
     750
     751    description TEXT NOT NULL,
     752    report_date DATE NOT NULL,
     753
     754    record_id BIGINT NOT NULL,
     755    doctor_id BIGINT NOT NULL,
     756
     757    FOREIGN KEY (record_id)
     758        REFERENCES medical_records(record_id)
     759        ON DELETE RESTRICT,
     760
     761    FOREIGN KEY (doctor_id)
     762        REFERENCES doctors(doctor_id)
     763        ON DELETE RESTRICT
     764);
     765
     766CREATE TABLE medical_report_lab_results (
     767    report_id BIGINT NOT NULL,
     768    result_id BIGINT NOT NULL,
     769
     770    CONSTRAINT medical_report_lab_results_PK
     771        PRIMARY KEY (report_id, result_id),
     772
     773    CONSTRAINT medical_report_lab_results_report_FK
     774        FOREIGN KEY (report_id)
     775            REFERENCES medical_report(report_id)
     776            ON DELETE RESTRICT,
     777
     778    CONSTRAINT medical_report_lab_results_result_FK
     779        FOREIGN KEY (result_id)
     780            REFERENCES lab_results(result_id)
     781            ON DELETE RESTRICT
     782);
     783
     784
     785-- PERFORMED PROCEDURES / LAB TESTS -----------------------------------------
     786
     787CREATE TABLE performed_procedures (
     788    performed_id BIGINT,
     789
     790    procedure_id BIGINT NOT NULL,
     791    doctor_id BIGINT NOT NULL,
     792    patient_id BIGINT NOT NULL,
     793    diagnosis_id BIGINT,
     794
     795    procedure_date DATE NOT NULL,
     796    notes TEXT,
     797
     798    CONSTRAINT performed_procedures_PK
     799        PRIMARY KEY (performed_id),
     800
     801    CONSTRAINT performed_procedures_procedure_FK
     802        FOREIGN KEY (procedure_id)
     803            REFERENCES procedures(procedure_id)
     804            ON DELETE RESTRICT,
     805
     806    CONSTRAINT performed_procedures_doctor_FK
     807        FOREIGN KEY (doctor_id)
     808            REFERENCES doctors(doctor_id)
     809            ON DELETE RESTRICT,
     810
     811    CONSTRAINT performed_procedures_patient_FK
     812        FOREIGN KEY (patient_id)
     813            REFERENCES patients(patient_id)
     814            ON DELETE RESTRICT,
     815
     816    CONSTRAINT performed_procedures_diagnosis_FK
     817        FOREIGN KEY (diagnosis_id)
     818            REFERENCES diagnosis(diagnosis_id)
     819            ON DELETE RESTRICT
     820);
     821
     822CREATE TABLE performed_lab_tests (
     823    performed_test_id BIGINT,
     824
     825    test_id BIGINT NOT NULL,
     826    patient_id BIGINT NOT NULL,
     827    doctor_id BIGINT NOT NULL,
     828    technician_id BIGINT NOT NULL,
     829
     830    test_date DATE NOT NULL,
     831    notes TEXT,
     832    created_at TIMESTAMP DEFAULT now(),
     833
     834    CONSTRAINT performed_lab_tests_PK
     835        PRIMARY KEY (performed_test_id),
     836
     837    CONSTRAINT performed_lab_tests_test_FK
     838        FOREIGN KEY (test_id)
     839            REFERENCES lab_tests(test_id)
     840            ON DELETE RESTRICT,
     841
     842    CONSTRAINT performed_lab_tests_patient_FK
     843        FOREIGN KEY (patient_id)
     844            REFERENCES patients(patient_id)
     845            ON DELETE RESTRICT,
     846
     847    CONSTRAINT performed_lab_tests_doctor_FK
     848        FOREIGN KEY (doctor_id)
     849            REFERENCES doctors(doctor_id)
     850            ON DELETE RESTRICT,
     851
     852    CONSTRAINT performed_lab_tests_technician_FK
     853        FOREIGN KEY (technician_id)
     854            REFERENCES lab_technician(technician_id)
     855            ON DELETE RESTRICT
     856);
     857
     858
     859-- BILLING -------------------------------------------------------------------
    497860
    498861CREATE TABLE billing (
    499                          bill_id BIGINT PRIMARY KEY,
    500 
    501                          total_cost DECIMAL NOT NULL,
    502 
    503                          payment_status TEXT NOT NULL,
    504                          payment_date DATE,
    505 
    506                          record_id BIGINT NOT NULL,
    507                          admin_id BIGINT NOT NULL,
    508 
    509                          CONSTRAINT billing_cost_chk CHECK (total_cost >= 0),
    510                          CONSTRAINT billing_status_chk
    511                              CHECK (payment_status IN ('PENDING', 'PAID', 'CANCELLED')),
    512 
    513                          FOREIGN KEY (record_id)
    514                              REFERENCES medical_records(record_id)
    515                              ON DELETE RESTRICT,
    516 
    517                          FOREIGN KEY (admin_id)
    518                              REFERENCES admin(admin_id)
    519                              ON DELETE RESTRICT
    520 );
    521 
    522 
    523 
    524 
    525 CREATE TABLE patient_allergies (
    526                                    patient_id BIGINT NOT NULL,
    527                                    allergy_id BIGINT NOT NULL,
    528 
    529                                    CONSTRAINT patient_allergies_PK
    530                                        PRIMARY KEY (patient_id, allergy_id),
    531 
    532                                    CONSTRAINT patient_allergies_patient_FK
    533                                        FOREIGN KEY (patient_id)
    534                                            REFERENCES patients(patient_id)
    535                                            ON DELETE RESTRICT,
    536 
    537                                    CONSTRAINT patient_allergies_allergy_FK
    538                                        FOREIGN KEY (allergy_id)
    539                                            REFERENCES allergies(allergy_id)
    540                                            ON DELETE RESTRICT
    541 );
    542 
    543 
    544 
    545 CREATE TABLE allergy_prescription_restrictions (
    546                                                    allergy_id BIGINT NOT NULL,
    547                                                    restriction_id BIGINT NOT NULL,
    548 
    549                                                    CONSTRAINT allergy_prescription_restrictions_PK
    550                                                        PRIMARY KEY (allergy_id, restriction_id),
    551 
    552                                                    CONSTRAINT allergy_prescription_restrictions_allergy_FK
    553                                                        FOREIGN KEY (allergy_id)
    554                                                            REFERENCES allergies(allergy_id)
    555                                                            ON DELETE RESTRICT,
    556 
    557                                                    CONSTRAINT allergy_prescription_restrictions_restriction_FK
    558                                                        FOREIGN KEY (restriction_id)
    559                                                            REFERENCES prescription_restriction(restriction_id)
    560                                                            ON DELETE RESTRICT
    561 );
    562 
    563 
    564 
    565 CREATE TABLE patient_symptoms (
    566                                   patient_id BIGINT NOT NULL,
    567                                   symptom_id BIGINT NOT NULL,
    568 
    569                                   CONSTRAINT patient_symptoms_PK
    570                                       PRIMARY KEY (patient_id, symptom_id),
    571 
    572                                   CONSTRAINT patient_symptoms_patient_FK
    573                                       FOREIGN KEY (patient_id)
    574                                           REFERENCES patients(patient_id)
    575                                           ON DELETE RESTRICT,
    576 
    577                                   CONSTRAINT patient_symptoms_symptom_FK
    578                                       FOREIGN KEY (symptom_id)
    579                                           REFERENCES symptoms(symptom_id)
    580                                           ON DELETE RESTRICT
    581 );
    582 
    583 
    584 
    585 
    586 CREATE TABLE diagnosis_symptoms (
    587                                     diagnosis_id BIGINT NOT NULL,
    588                                     symptom_id BIGINT NOT NULL,
    589 
    590                                     CONSTRAINT diagnosis_symptoms_PK
    591                                         PRIMARY KEY (diagnosis_id, symptom_id),
    592 
    593                                     CONSTRAINT diagnosis_symptoms_diagnosis_FK
    594                                         FOREIGN KEY (diagnosis_id)
    595                                             REFERENCES diagnosis(diagnosis_id)
    596                                             ON DELETE RESTRICT,
    597 
    598                                     CONSTRAINT diagnosis_symptoms_symptom_FK
    599                                         FOREIGN KEY (symptom_id)
    600                                             REFERENCES symptoms(symptom_id)
    601                                             ON DELETE RESTRICT
    602 );
    603 
    604 CREATE TABLE specialization_procedures (
    605                                            specialization_id BIGINT NOT NULL,
    606                                            procedure_id BIGINT NOT NULL,
    607 
    608                                            CONSTRAINT specialization_procedures_PK
    609                                                PRIMARY KEY (specialization_id, procedure_id),
    610 
    611                                            CONSTRAINT specialization_procedures_specialization_FK
    612                                                FOREIGN KEY (specialization_id)
    613                                                    REFERENCES doctor_specialization(specialization_id)
    614                                                    ON DELETE RESTRICT,
    615 
    616                                            CONSTRAINT specialization_procedures_procedure_FK
    617                                                FOREIGN KEY (procedure_id)
    618                                                    REFERENCES procedures(procedure_id)
    619                                                    ON DELETE RESTRICT
    620 );
    621 
    622 
    623 
    624 CREATE TABLE diagnosis_procedures (
    625                                       diagnosis_id BIGINT NOT NULL,
    626                                       procedure_id BIGINT NOT NULL,
    627 
    628                                       CONSTRAINT diagnosis_procedures_PK
    629                                           PRIMARY KEY (diagnosis_id, procedure_id),
    630 
    631                                       CONSTRAINT diagnosis_procedures_diagnosis_FK
    632                                           FOREIGN KEY (diagnosis_id)
    633                                               REFERENCES diagnosis(diagnosis_id)
    634                                               ON DELETE RESTRICT,
    635 
    636                                       CONSTRAINT diagnosis_procedures_procedure_FK
    637                                           FOREIGN KEY (procedure_id)
    638                                               REFERENCES procedures(procedure_id)
    639                                               ON DELETE RESTRICT
    640 );
    641 
    642 CREATE TABLE department_procedures (
    643                                        department_id BIGINT NOT NULL ,
    644                                        procedure_id BIGINT NOT NULL,
    645 
    646                                        CONSTRAINT department_procedures_PK
    647                                            PRIMARY KEY (department_id, procedure_id),
    648 
    649                                        CONSTRAINT department_procedures_department_FK
    650                                            FOREIGN KEY (department_id)
    651                                                REFERENCES departments(department_id)
    652                                                ON DELETE RESTRICT,
    653 
    654                                        CONSTRAINT department_procedures_procedure_FK
    655                                            FOREIGN KEY (procedure_id)
    656                                                REFERENCES procedures(procedure_id)
    657                                                ON DELETE RESTRICT
    658 );
    659 
     862    bill_id BIGINT PRIMARY KEY,
     863
     864    total_cost DECIMAL NOT NULL,
     865
     866    payment_status TEXT NOT NULL,
     867    payment_date DATE,
     868
     869    created_at TIMESTAMP DEFAULT now(),
     870
     871    record_id BIGINT NOT NULL,
     872    admin_id BIGINT NOT NULL,
     873
     874    CONSTRAINT billing_cost_chk CHECK (total_cost >= 0),
     875    CONSTRAINT billing_status_chk
     876        CHECK (payment_status IN ('PENDING', 'PAID', 'CANCELLED')),
     877
     878    FOREIGN KEY (record_id)
     879        REFERENCES medical_records(record_id)
     880        ON DELETE RESTRICT,
     881
     882    FOREIGN KEY (admin_id)
     883        REFERENCES admin(admin_id)
     884        ON DELETE RESTRICT
     885);
    660886
    661887CREATE TABLE billing_procedures (
    662                                     bill_id BIGINT  NOT NULL,
    663                                     procedure_id BIGINT  NOT NULL,
    664 
    665                                     CONSTRAINT billing_procedures_PK
    666                                         PRIMARY KEY (bill_id, procedure_id),
    667 
    668                                     CONSTRAINT billing_procedures_bill_FK
    669                                         FOREIGN KEY (bill_id)
    670                                             REFERENCES billing(bill_id)
    671                                             ON DELETE RESTRICT,
    672 
    673                                     CONSTRAINT billing_procedures_procedure_FK
    674                                         FOREIGN KEY (procedure_id)
    675                                             REFERENCES procedures(procedure_id)
    676                                             ON DELETE RESTRICT
    677 );
    678 
    679 
    680 
     888    bill_id BIGINT NOT NULL,
     889    procedure_id BIGINT NOT NULL,
     890
     891    CONSTRAINT billing_procedures_PK
     892        PRIMARY KEY (bill_id, procedure_id),
     893
     894    CONSTRAINT billing_procedures_bill_FK
     895        FOREIGN KEY (bill_id)
     896            REFERENCES billing(bill_id)
     897            ON DELETE RESTRICT,
     898
     899    CONSTRAINT billing_procedures_procedure_FK
     900        FOREIGN KEY (procedure_id)
     901            REFERENCES procedures(procedure_id)
     902            ON DELETE RESTRICT
     903);
    681904
    682905CREATE TABLE billing_lab_tests (
    683                                    bill_id BIGINT NOT NULL,
    684                                    test_id BIGINT NOT NULL,
    685 
    686                                    CONSTRAINT billing_lab_tests_PK
    687                                        PRIMARY KEY (bill_id, test_id),
    688 
    689                                    CONSTRAINT billing_lab_tests_bill_FK
    690                                        FOREIGN KEY (bill_id)
    691                                            REFERENCES billing(bill_id)
    692                                            ON DELETE RESTRICT,
    693 
    694                                    CONSTRAINT billing_lab_tests_test_FK
    695                                        FOREIGN KEY (test_id)
    696                                            REFERENCES lab_tests(test_id)
    697                                            ON DELETE RESTRICT
    698 );
    699 
    700 
    701 
    702 CREATE TABLE doctor_medical_records (
    703                                         doctor_id BIGINT NOT NULL,
    704                                         record_id BIGINT NOT NULL,
    705 
    706                                         CONSTRAINT doctor_medical_records_PK
    707                                             PRIMARY KEY (doctor_id, record_id),
    708 
    709                                         CONSTRAINT doctor_medical_records_doctor_FK
    710                                             FOREIGN KEY (doctor_id)
    711                                                 REFERENCES doctors(doctor_id)
    712                                                 ON DELETE RESTRICT,
    713 
    714                                         CONSTRAINT doctor_medical_records_record_FK
    715                                             FOREIGN KEY (record_id)
    716                                                 REFERENCES medical_records(record_id)
    717                                                 ON DELETE RESTRICT
    718 );
    719 
    720 
    721 
    722 CREATE TABLE diagnosis_medical_records (
    723                                            diagnosis_id BIGINT NOT NULL,
    724                                            record_id BIGINT NOT NULL,
    725 
    726                                            CONSTRAINT diagnosis_medical_records_PK
    727                                                PRIMARY KEY (diagnosis_id, record_id),
    728 
    729                                            CONSTRAINT diagnosis_medical_records_diagnosis_FK
    730                                                FOREIGN KEY (diagnosis_id)
    731                                                    REFERENCES diagnosis(diagnosis_id)
    732                                                    ON DELETE RESTRICT,
    733 
    734                                            CONSTRAINT diagnosis_medical_records_record_FK
    735                                                FOREIGN KEY (record_id)
    736                                                    REFERENCES medical_records(record_id)
    737                                                    ON DELETE RESTRICT
    738 );
    739 
    740 
    741 CREATE TABLE prescription_medical_records (
    742                                               prescription_id BIGINT NOT NULL,
    743                                               record_id BIGINT NOT NULL,
    744 
    745                                               dosage TEXT NOT NULL,
    746                                               frequency TEXT NOT NULL,
    747                                               duration TEXT NOT NULL,
    748 
    749                                               notes TEXT,
    750 
    751                                               CONSTRAINT prescription_medical_records_PK
    752                                                   PRIMARY KEY (prescription_id, record_id),
    753 
    754                                               CONSTRAINT prescription_medical_records_prescription_FK
    755                                                   FOREIGN KEY (prescription_id)
    756                                                       REFERENCES prescriptions(prescription_id)
    757                                                       ON DELETE RESTRICT,
    758 
    759                                               CONSTRAINT prescription_medical_records_record_FK
    760                                                   FOREIGN KEY (record_id)
    761                                                       REFERENCES medical_records(record_id)
    762                                                       ON DELETE RESTRICT
    763 );
    764 
    765 
    766 
    767 CREATE TABLE medical_report_lab_results (
    768                                             report_id BIGINT NOT NULL,
    769                                             result_id BIGINT NOT NULL,
    770 
    771                                             CONSTRAINT medical_report_lab_results_PK
    772                                                 PRIMARY KEY (report_id, result_id),
    773 
    774                                             CONSTRAINT medical_report_lab_results_report_FK
    775                                                 FOREIGN KEY (report_id)
    776                                                     REFERENCES medical_report(report_id)
    777                                                     ON DELETE RESTRICT,
    778 
    779                                             CONSTRAINT medical_report_lab_results_result_FK
    780                                                 FOREIGN KEY (result_id)
    781                                                     REFERENCES lab_results(result_id)
    782                                                     ON DELETE RESTRICT
    783 );
    784 
    785 
    786 
    787 CREATE TABLE performed_procedures (
    788                                       performed_id BIGINT,
    789 
    790                                       procedure_id BIGINT NOT NULL,
    791                                       doctor_id BIGINT NOT NULL,
    792                                       patient_id BIGINT NOT NULL,
    793                                       diagnosis_id BIGINT,
    794 
    795                                       procedure_date DATE NOT NULL,
    796                                       notes TEXT,
    797 
    798                                       CONSTRAINT performed_procedures_PK
    799                                           PRIMARY KEY (performed_id),
    800 
    801                                       CONSTRAINT performed_procedures_procedure_FK
    802                                           FOREIGN KEY (procedure_id)
    803                                               REFERENCES procedures(procedure_id)
    804                                               ON DELETE RESTRICT,
    805 
    806                                       CONSTRAINT performed_procedures_doctor_FK
    807                                           FOREIGN KEY (doctor_id)
    808                                               REFERENCES doctors(doctor_id)
    809                                               ON DELETE RESTRICT,
    810 
    811                                       CONSTRAINT performed_procedures_patient_FK
    812                                           FOREIGN KEY (patient_id)
    813                                               REFERENCES patients(patient_id)
    814                                               ON DELETE RESTRICT,
    815 
    816                                       CONSTRAINT performed_procedures_diagnosis_FK
    817                                           FOREIGN KEY (diagnosis_id)
    818                                               REFERENCES diagnosis(diagnosis_id)
    819                                               ON DELETE RESTRICT
    820 );
    821 
    822 CREATE TABLE performed_lab_tests (
    823                                      performed_test_id BIGINT,
    824 
    825                                      test_id BIGINT NOT NULL,
    826                                      patient_id BIGINT NOT NULL,
    827                                      doctor_id BIGINT NOT NULL,
    828                                      technician_id BIGINT NOT NULL,
    829 
    830                                      test_date DATE NOT NULL,
    831                                      notes TEXT,
    832 
    833                                      CONSTRAINT performed_lab_tests_PK
    834                                          PRIMARY KEY (performed_test_id),
    835 
    836                                      CONSTRAINT performed_lab_tests_test_FK
    837                                          FOREIGN KEY (test_id)
    838                                              REFERENCES lab_tests(test_id)
    839                                              ON DELETE RESTRICT,
    840 
    841                                      CONSTRAINT performed_lab_tests_patient_FK
    842                                          FOREIGN KEY (patient_id)
    843                                              REFERENCES patients(patient_id)
    844                                              ON DELETE RESTRICT,
    845 
    846                                      CONSTRAINT performed_lab_tests_doctor_FK
    847                                          FOREIGN KEY (doctor_id)
    848                                              REFERENCES doctors(doctor_id)
    849                                              ON DELETE RESTRICT,
    850 
    851                                      CONSTRAINT performed_lab_tests_technician_FK
    852                                          FOREIGN KEY (technician_id)
    853                                              REFERENCES lab_technician(technician_id)
    854                                              ON DELETE RESTRICT
    855 );
    856 
    857 CREATE TABLE medical_record_lab_results (
    858                                             record_id BIGINT NOT NULL,
    859                                             result_id BIGINT NOT NULL,
    860 
    861                                             PRIMARY KEY (record_id, result_id),
    862 
    863                                             FOREIGN KEY (record_id)
    864                                                 REFERENCES medical_records(record_id)
    865                                                 ON DELETE RESTRICT,
    866 
    867                                             FOREIGN KEY (result_id)
    868                                                 REFERENCES lab_results(result_id)
    869                                                 ON DELETE RESTRICT
    870 );
    871 
    872 
    873 
    874 
    875 CREATE TABLE medical_record_procedures (
    876                                            record_id BIGINT NOT NULL,
    877                                            procedure_id BIGINT NOT NULL,
    878 
    879                                            PRIMARY KEY (record_id, procedure_id),
    880 
    881                                            FOREIGN KEY (record_id)
    882                                                REFERENCES medical_records(record_id)
    883                                                ON DELETE RESTRICT,
    884 
    885                                            FOREIGN KEY (procedure_id)
    886                                                REFERENCES procedures(procedure_id)
    887                                                ON DELETE RESTRICT
    888 );
    889 
    890 
    891 
    892 CREATE TABLE medical_record_symptoms (
    893                                          record_id BIGINT NOT NULL,
    894                                          symptom_id BIGINT NOT NULL,
    895                                          severity TEXT,
    896 
    897                                          PRIMARY KEY (record_id, symptom_id),
    898 
    899                                          FOREIGN KEY (record_id)
    900                                              REFERENCES medical_records(record_id)
    901                                              ON DELETE RESTRICT,
    902 
    903                                          FOREIGN KEY (symptom_id)
    904                                              REFERENCES symptoms(symptom_id)
    905                                              ON DELETE RESTRICT
    906 );
    907 
    908 CREATE TABLE medical_record_allergies (
    909                                           record_id BIGINT NOT NULL,
    910                                           allergy_id BIGINT NOT NULL,
    911                                           reaction TEXT,
    912                                           severity TEXT,
    913 
    914                                           PRIMARY KEY (record_id, allergy_id),
    915 
    916                                           FOREIGN KEY (record_id)
    917                                               REFERENCES medical_records(record_id)
    918                                               ON DELETE RESTRICT,
    919 
    920                                           FOREIGN KEY (allergy_id)
    921                                               REFERENCES allergies(allergy_id)
    922                                               ON DELETE RESTRICT
    923 );
    924 
     906    bill_id BIGINT NOT NULL,
     907    test_id BIGINT NOT NULL,
     908
     909    CONSTRAINT billing_lab_tests_PK
     910        PRIMARY KEY (bill_id, test_id),
     911
     912    CONSTRAINT billing_lab_tests_bill_FK
     913        FOREIGN KEY (bill_id)
     914            REFERENCES billing(bill_id)
     915            ON DELETE RESTRICT,
     916
     917    CONSTRAINT billing_lab_tests_test_FK
     918        FOREIGN KEY (test_id)
     919            REFERENCES lab_tests(test_id)
     920            ON DELETE RESTRICT
     921);
    925922
    926923COMMIT;
    927 
Note: See TracChangeset for help on using the changeset viewer.