Το DiagFlow είναι μια ευφυής μηχανή ανάθεσης διαγνωστικών εξετάσεων και υποστήριξης αποφάσεων, αναπτυγμένη για την Κοσμοϊατρική. Αυτοματοποιεί την πολύπλοκη διαδικασία ανάθεσης αναφορών απεικόνισης CT και MRI από το σύστημα Slis της Infomed σε διαγνωστές, χρησιμοποιώντας μια 4-σταδιακή μηχανή κανόνων, δυναμικές δρομολογήσεις, σταθμισμένη πολυπαραγοντική βαθμολόγηση, εξισορρόπηση φορτίου για ισοπαλίες και τον solver CP-SAT της Google OR-Tools για ομαδική βελτιστοποίηση.
💡 Φιλοσοφία Σχεδιασμού: Πρότεινε, μην αποφασίζεις. Κάθε πρόταση ανάθεσης συνοδεύεται από πλήρη διαφάνεια — ποιοι κανόνες ενεργοποιήθηκαν, ανάλυση βαθμολογίας ανά παράγοντα και πλήρης ορατότητα των αποκλεισμένων υποψηφίων με ανθρώπινα αναγνώσιμο λόγο απόρριψης. Οι χειριστές της γραμματείας διατηρούν πλήρη εξουσία να επιβεβαιώσουν ή να παρακάμψουν τις προτάσεις με ένα κλικ.
- ✨ Βασικά Χαρακτηριστικά
- 🏗️ Αρχιτεκτονική Συστήματος
- ⚙️ Ανάλυση Μηχανής
- 💻 Διεπαφές Χρήστη
- 🛠️ Προαπαιτούμενα
- 🚀 Οδηγός Εγκατάστασης και Ρύθμισης
- 📊 Αρχιτεκτονική Βάσης Δεδομένων και Σχήματα
- ⚙️ Ρύθμιση και Περιβαλλοντικές Παράμετροι
- 📡 Αναφορά API
- 📁 Δομή Έργου
- 📐 Διαγράμματα Αρχιτεκτονικής PlantUML
- 📸 Στιγμιότυπα Οθόνης
- 📄 Άδεια Χρήσης
| Τομέας | Χαρακτηριστικό | Περιγραφή |
|---|---|---|
| ⚙️ Μηχανή Κανόνων | 4-Σταδιακή Αγωγός Αποφάσεων | Σκληρά φίλτρα → σταθμισμένη βαθμολόγηση → εξισορρόπηση ισοπαλιών → αγωγός solver με 100% διαφάνεια αποφάσεων. |
| 📋 Ομαδοποίηση Εντολών | Συνοχή Ιδίας Εντολής | Προτείνει τον ίδιο διαγνώστη για όλες τις εξετάσεις που ανήκουν στην ίδια Εντολή (extracode) για διαγνωστική συνοχή. |
| 🧮 Βελτιστοποίηση | Google OR-Tools CP-SAT | Παγκόσμιος solver περιορισμών για ομαδικές αναθέσεις, μεγιστοποιώντας τη βαθμολογία ενώ επιβάλλει καθημερινές χωρητικότητες. |
| ⚖️ Εξισορρόπηση Φορτίου | Εναλλαγή Ισοπαλιών | Υποψήφιοι εντός ρυθμιζόμενης ανοχής βαθμολογίας (προεπιλογή 5%) κατατάσσονται ανά φόρτο εργασίας. |
| 🔄 Offset Συνεδρίας | Παρακολούθηση Φορτίου σε Πραγματικό Χρόνο | Παρακολουθεί μη επιβεβαιωμένες προτάσεις εντός ενεργής συνεδρίας για ισοκατανομή φορτίου. |
| ⚡ Αυτόματες Αναθέσεις | Δυναμικοί Κανόνες Δρομολόγησης | Αναθέτει αυτόματα αποκλειστικές συνεργασίες γιατρού-διαγνωστή, συγκεκριμένους κωδικούς εξετάσεων και τον on-call του Παμμακαρίστου. |
| 🛡️ Σκληροί Περιορισμοί | Δυναμικές Ποσοστώσεις και Εργαστήρια | Επιβάλλει άδειες, ημερήσιες ποσοστώσεις, όρια CT/MRI, αποκλειστικές αναθέσεις εργαστηρίου και εξειδικεύσεις. |
| 🔄 Συγχρονισμός Slis | Αμφίδρομη Ενσωμάτωση | Αντλεί μη ανατεθείσες εξετάσεις (τελευταίες 3 ημέρες), ωθεί επιβεβαιωμένες αναθέσεις πίσω, και εκτελεί ημερήσιο cron στις 3 ΠΜ. |
| 🖥️ Dashboard Γραμματείας | Διεπαφή 4 Καρτελών | Dashboard με καρτέλες εκκρεμών, ανατεθέντων, dashboard και αναζήτησης Slis (εύρος ημερομηνιών [7 μέρες προεπιλογή] & επανάθεση ανά Εντολή, Ασθενή, Γιατρό, Διαγνώστη), άμεσες προτάσεις και ομαδικές ενέργειες. |
| 🔐 Admin Panel | Διαχείριση Ρυθμίσεων | Πιστοποιημένη διεπαφή για διαχείριση διαγνωστών, εξειδικεύσεων, καταλόγου εξετάσεων & ομαδικής ανάθεσης δεξιοτήτων (καρτέλα Εξετάσεις), συνεργασιών, κανόνων δρομολόγησης και βαρών βαθμολόγησης. |
| 📜 Ίχνος Ελέγχου | Καταγραφή Αποφάσεων | Πλήρες ιστορικό αναθέσεων, παρακάμψεων και λόγων. |
| 📦 Desktop App | Αυτόνομο EXE | PyInstaller bundle FastAPI και pywebview για εκτέλεση χωρίς browser. |
Το DiagFlow ακολουθεί αποσυνδεδεμένη, αρθρωτή αρχιτεκτονική που συνδέει τη βάση Slis της Infomed με έναν υψηλής απόδοσης Python FastAPI server, μηχανή βελτιστοποίησης OR-Tools και καθαρές διεπαφές web.
┌────────────────────────────────────────┐
│ Slis Production DB (MSSQL) │ <- Παραγωγή (pyodbc)
│ mock_slis.db (SQLite) │ <- Ανάπτυξη
└───────────────────┬────────────────────┘
pull / │ \ push
───────────────────┼────────────────────
▼
┌────────────────────────────────────────┐
│ DiagFlow FastAPI Server │
│ │
│ ┌──────────────────┐ ┌────────────┐ │
│ │ Slis Sync Svc │<─┤APScheduler │ │ (Ημερήσιο Cron 3 ΠΜ)
│ └──────────────────┘ └────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ Υπηρεσία Ανάθεσης │ │
│ │ Υπηρεσία Διαγνωστή │ │
│ │ Scheduler Παμμακαρίστου │ │
│ └────────────────┬─────────────────┘ │
│ │ │
│ ┌────────────────▼─────────────────┐ │
│ │ Αγωγός Μηχανής Κανόνων │ │
│ │ Στάδιο 0: Αποκλειστικά & Routing │ │
│ │ Στάδιο 1: Σκληρά Φίλτρα │ │
│ │ Στάδιο 2: Σταθμισμένη Βαθμολογία│ │
│ │ Στάδιο 3: Εξισορρόπηση Ισοπαλιών│ │
│ │ Στάδιο 4: CP-SAT / Greedy Solver │ │
│ └──────────────────────────────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ Πίνακες df_* (MSSQL) / SQLite(Dev)│ │
│ └──────────────────────────────────┘ │
└───────────────────┬────────────────────┘
│ REST API (/api/*)
│ Στατικά Αρχεία (/)
▼
┌────────────────────────────────────────┐
│ Επίπεδο Διεπαφής Χρήστη │
│ • Dashboard Γραμματείας (index.html) │
│ • Admin Panel (admin.html) │
│ • Παράθυρο Desktop (pywebview EXE) │
└────────────────────────────────────────┘Εκκρεμής Εξέταση
│
├─ Στάδιο 0: Αναφορά Ονόματος στα Σχόλια; ──ναι──► Αυτόματη Ανάθεση («Όνομα Διαγνώστη αναφέρθηκε στα σχόλια»)
│ (Υποστήριξη ακριβών ονομάτων, κλίσεων, συμφώνων π.χ. ΝΤΣΚ, ορθογραφικών λαθών)
│ (Εξαιρέσεις «ΟΧΙ» αποκλείουν τον διαγνώστη από όλους τους επόμενους κανόνες)
│
├─ Στάδιο 0.5: Αποκλειστική Συνεργασία ή Κανόνας Δρομολόγησης; ──ναι──► Αυτόματη Ανάθεση
│
▼
Στάδιο 1: Σκληρά Φίλτρα (Εξαίρεση Σχολίου → Διαθεσιμότητα → Χωρητικότητα → Ποσοστώσεις → Υπηρεσία → Εξειδικεύσεις → Αποκλειστικά Εργαστήρια)
│
▼
Στάδιο 2: Σταθμισμένη Βαθμολόγηση (Συνεργασία + Ιστορικό Ασθενή + Bonus Εξειδίκευσης + Προτίμηση Εργαστηρίου + Αναλογία Χωρητικότητας)
│
▼
Στάδιο 3: Εξισορρόπηση Ισοπαλιών (Ομάδα ανοχής βαθμολογίας → ταξινόμηση ανά φόρτο + offset συνεδρίας)
│
▼
Στάδιο 4: Solver (Greedy για μεμονωμένη εξέταση, CP-SAT για ομαδική βελτιστοποίηση)
│
▼
Πρόταση Ανάθεσης + Ανάλυση Βαθμολογίας + Λίστα Εναλλακτικών + Καταγραφή Ελέγχου- Θετική Αναφορά: Αν αναφέρεται ενεργός διαγνώστης στα σχόλια της εξέτασης (π.χ.
ΝΑΤΣΙΚΑ,ΝΤΣΚ,Νάτσικα,Νατσκα,ΜΠΡΤ,ΣΓΛ,ΚΛΓΡΓ), η εξέταση ανατίθεται άμεσα μεrule_desc = "Όνομα Διαγνώστη αναφέρθηκε στα σχόλια". - Αρνητική Εξαίρεση («ΟΧΙ»): Αν προηγείται η λέξη
«ΟΧΙ»(π.χ.ΟΧΙ ΝΑΤΣΙΚΑ), ο διαγνώστης αποκλείεται από κάθε αυτόματη ανάθεση και από τις προτάσεις. - Ενεργοποιείται/απενεργοποιείται μέσω διακόπτη (checkbox) στην ενότητα Για Προχωρημένους του Admin Panel.
Εξετάσεις που εκδίδονται από γιατρούς με ενεργή αποκλειστική συνεργασία ή που ταιριάζουν σε δυναμικό κανόνα δρομολόγησης (εφόσον δεν έχουν αποκλειστεί από σχόλιο) παρακάμπτουν τη βαθμολόγηση και ανατίθενται άμεσα στον διαγνωστή-στόχο.
Υποψήφιοι που αποτυγχάνουν σε οποιοδήποτε φίλτρο σημειώνονται ως αποκλεισμένοι. Σημαντικό: ΔΕΝ κρύβονται — εμφανίζονται με κόκκινο πλαίσιο και αναγνώσιμο λόγο απόρριψης.
| Φίλτρο | Περιγραφή | Παράδειγμα Λόγου Απόρριψης |
|---|---|---|
filter_by_comment_exclusion (Priority 0) |
Έλεγχος εξαίρεσης από σχόλιο («ΟΧΙ [Όνομα]») | Αποκλείστηκε λόγω σχολίου |
filter_by_exclusive_lab_dynamic |
Έλεγχος αποκλειστικής δέσμευσης εργαστηρίου | Αποκλειστικό εργαστήριο (ΚΟΛΙΑΤΣΟΥ) |
filter_by_availability |
Επαλήθευση εργασίας σήμερα | Σε άδεια / Εκτός προγράμματος |
filter_by_capacity |
Έλεγχος ημερήσιου ορίου | Έχει συμπληρώσει το ημερήσιο όριο (15/15) |
filter_by_modality_quotas_dynamic |
Έλεγχος ορίου CT ή MRI | Έχει συμπληρώσει το όριο (20 CT/ημέρα) |
filter_by_modality |
Έλεγχος δυνατότητας CT/MRI | Δεν αναλαμβάνει CT |
filter_by_skills_hard |
Αποκλεισμός βάσει εξειδίκευσης | Δεν διαγιγνώσκει τον συγκεκριμένο κωδικό |
| Παράγοντας | Κλειδί | Προεπιλογή | Περιγραφή |
|---|---|---|---|
| Ιστορικό Ασθενή | pts_history |
0.35 |
Συνέχεια φροντίδας |
| Συνεργασία Γιατρού | pts_partnership |
0.20 |
Προτιμώμενος διαγνωστής για τον εκδίδοντα γιατρό |
| Bonus Εξειδίκευσης | pts_skills_pref |
0.20 |
Προτίμηση εξειδίκευσης |
| Προτίμηση Εργαστηρίου | pts_lab_pref |
0.15 |
Ταιριάζει στο προτιμώμενο εργαστήριο |
| Εναπομένουσα Χωρητικότητα | pts_capacity |
0.10 |
Αναλογία εναπομενουσών θέσεων |
Υποψήφιοι εντός SCORE_TIE_TOLERANCE (5%) κατατάσσονται ανά:
- Λιγότερες εξετάσεις σήμερα (plus offset συνεδρίας)
- Μεγαλύτερη ημερήσια χωρητικότητα
- Τυχαία διακύμανση (τελικός αποφασιστής)
- Μεμονωμένη Εξέταση: Greedy επιλογή Κατάταξης #1.
- Ομαδική: CP-SAT solver μεγιστοποιεί τη συνολική συμβατότητα.
- Αναφορά Ονόματος στα Σχόλια & Εξαιρέσεις «ΟΧΙ»: Αυτόματη ανάθεση σε αναφερόμενο διαγνώστη (με υποστήριξη ακριβών ονομάτων, συμφώνων π.χ.
ΝΤΣΚ, ορθογραφικών παραλλαγώνΝατσκα) και πλήρης αποκλεισμός όταν προηγείται«ΟΧΙ». - Αποκλειστικές Συνεργασίες: Ενεργά ζεύγη γιατρού-διαγνωστή ανατίθενται αυτόματα.
- Δυναμικοί Κανόνες Δρομολόγησης: Κωδικοί εξετάσεων (Αρθρογραφίες, Φασματοσκοπίες, TMJ) δρομολογούνται σε εξειδικευμένους διαγνωστές.
- On-Call Παμμακαρίστου: Εξετάσεις από Παμμακάριστο δρομολογούνται στον εφημερεύοντα της ημέρας.
Εμφανίζονται στην καρτέλα Ανατεθέντες με σήμανση ⚡ Auto και επεξηγηματικό tooltip κανόνα.
Σε περιβάλλον παραγωγής, το DiagFlow συνδέεται απευθείας στην Κεντρική Βάση Δεδομένων MSSQL μέσω του τοπικού δικτύου (LAN). Όλοι οι πίνακες του DiagFlow διατηρούνται στον ίδιο physical server με τους πίνακες του Slis, χρησιμοποιώντας το πρόθεμα df_* ώστε να αποκλείεται οποιαδήποτε σύγκρουση ονομάτων. Πολλαπλοί σταθμοί εργασίας γραμματείας και διαχειριστών εκτελούν το DiagFlow.exe ταυτόχρονα και παραμένουν πλήρως συγχρονισμένοι σε πραγματικό χρόνο.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Κεντρικός Διακομιστής MSSQL (π.χ. server_hostname/SlisDB) │
├─────────────────────────────────────────────┬───────────────────────────────┤
│ Σχήμα Slis (Εξετάσεις/Διαδικασίες) │ Σχήμα DiagFlow (Πρόθεμα df_)│
├─────────────────────────────────────────────┼───────────────────────────────┤
│ • exammore (ιατρικές εξετάσεις) │ • df_diagnosticians & skills │
│ • SP: getExamsListForPeriod_V1 │ • df_partnerships & df_doctors│
│ • SP: getWardDoctors │ • df_availability (άδειες) │
│ • SP: getdiagnosticsList │ • df_local_assignments │
│ │ • df_assignment_log (audit) │
│ │ • df_pamakristos_schedule │
│ │ • df_exam_routing_rules │
│ │ • df_exclusive_lab_rules │
│ │ • df_modality_quotas │
│ │ • df_system_settings & admin │
└─────────────────────────────────────────────┴───────────────────────────────┘
▲ ▲
LAN (pyodbc) │ │ LAN (pyodbc)
┌───────────────────┴──┐ ┌──┴───────────────────┐
│ Υπολογιστής 1 (Admin)│ │ Υπολογιστής 2 (Γραμμ.)│
│ DiagFlow.exe │ │ DiagFlow.exe │
└──────────────────────┘ └──────────────────────┘- Άμεση Ενημέρωση Ρυθμίσεων: Αλλαγές σε άδειες, όρια ή συνεργασίες από το Admin Panel οποιουδήποτε υπολογιστή εφαρμόζονται άμεσα σε όλα τα τερματικά.
- Κοινόχρηστες Προσωρινές Αναθέσεις (
df_local_assignments): Όταν η Γραμματέας Α αναθέτει μια εξέταση, οι υπόλοιποι χρήστες βλέπουν άμεσα τους ενημερωμένους μετρητές και τις εκκρεμότητες. - Scripts Δημιουργίας & Αρχικοποίησης:
db/create_central_tables.sql(DDL πινάκων) καιdb/seed_central_tables.sql(αρχικά δεδομένα).
- Άντληση (On-Demand / Εκκίνηση): Όταν
USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedureEXEC getExamsListForPeriod_V1 'YYYY-MM-DD', 'YYYY-MM-DD'στη βάση Slis MSSQL για άντληση μη ανατεθέντων εξετάσεων (DIAGNOSTIS IS NULL) των τελευταίων 3 ημερών απευθείας στη μνήμη. - Συγχρονισμός Γιατρών (Εκκίνηση / Ημερήσιο 3 ΠΜ Cron): Όταν
USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedureEXEC getWardDoctorsγια συγχρονισμό νέων γιατρών (CODE,DOCNAME) στον πίνακαdf_doctors(ή τοπικόdoctorsσε dev). - Συγχρονισμός Διαγνωστών (Ανανέωση Admin Panel): Όταν
USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedureEXEC getdiagnosticsListόταν ο admin πατάει "Ανανέωση" για συγχρονισμό νέων διαγνωστών (PERSONELID,DOCNAME) στον πίνακαdf_diagnosticians(ή τοπικόdiagnosticiansσε dev). - Ώθηση (Χειροκίνητη): Επιβεβαιωμένες τοπικές αναθέσεις ωθούνται άμεσα στο Slis (
UPDATE exammore SET diagnostisid=? WHERE exammoreid=?), καταγράφοντας το ιστορικό στοdf_assignment_logκαι διαγράφοντας την προσωρινή εγγραφή από τοdf_local_assignments.
- 1. Καρτέλα Εκκρεμών: Πίνακας μη ανατεθειμένων εξετάσεων, ομαδοποίηση εντολών, αυτόματες προτάσεις, tooltips βαθμολογίας, εναλλακτικές λύσεις και ομαδικές αναθέσεις.
- 2. Καρτέλα Ανατεθέντων: Ανατεθειμένες εξετάσεις, σήμανση κατάστασης ("✅ Ενημερώθηκε", "
⚠️ Εκκρεμεί Ενημέρωση στο Slis"), χειροκίνητη ή ομαδική ώθηση στο Slis, και ετικέτες κανόνων αυτόματης δρομολόγησης. - 3. Dashboard Ποσοστώσεων: Ζωντανή επισκόπηση ημερήσιων ορίων, ολοκληρωμένων διαγνώσεων, υπολοίπου χωρητικότητας και ανάλυσης CT/MRI ανά διαγνωστή.
- 4. Αναζήτηση Slis: Ζωντανή αναζήτηση στη βάση Slis με ειδικά εικονίδια πεδίων (
📋 Εντολή,👤 Ασθενής,🩺 Παραπέμπων Ιατρός,👨⚕️ Διαγνώστης,📆 Εύρος Ημερομηνιών), καθαρισμένους τίτλους εξετάσεων, χρωματιστές ετικέτες κατηγορίας (MRI,CT,MRA), παρακολούθηση κατάστασης Slis ("⚠️ Εκκρεμεί Ενημέρωση στο Slis") και διαδραστικό μενού επαναποστολής με έλεγχο εξειδικεύσεων/ορίων σε πραγματικό χρόνο και ταξινόμηση διαθεσίμων στην κορυφή.
🔒 Κανόνας Κλειδώματος Εντολών Multi-exam: Όλες οι υπο-εξετάσεις που ανήκουν στην ίδια Εντολή (
extracode) κλειδώνουν αυτόματα στον ίδιο διαγνωστή που συγκεντρώνει τη μεγαλύτερη βαθμολογία, εξασφαλίζοντας 100% συνέπεια διάγνωσης.
- Ασφάλεια: Token-based πιστοποίηση, bcrypt hashing (cost factor 12), περιορισμός ρυθμού IP (5 προσπάθειες/60s).
- Διαχείριση Διαγνωστών: Ημερήσια όρια, δυνατότητες CT/MRI, προτιμώμενο εργαστήριο.
- Μήτρα Εξειδικεύσεων: Χαρτογράφηση εξειδίκευσης ανά διαγνωστή και κωδικό εξέτασης.
- Συνεργασίες: Ζεύγη γιατρού-διαγνωστή και αποκλειστικότητα.
- Δυναμικοί Κανόνες Δρομολόγησης: Ρυθμιζόμενοι κανόνες δρομολόγησης εξετάσεων.
- Αποκλειστικά Εργαστήρια και Ποσοστώσεις Υπηρεσίας: Αυστηρές δεσμεύσεις και ημερήσια όρια CT/MRI.
- Ρυθμίσεις Συστήματος: Προσαρμογή βαρών βαθμολόγησης σε πραγματικό χρόνο.
- Εβδομαδιαίο Πρόγραμμα Παμμακαρίστου: Διαδραστικός διαχειριστής εναλλαγής on-call.
- Python 3.11+
- Microsoft ODBC Driver 17 για SQL Server (απαιτείται για τη σύνδεση παραγωγής με τη βάση MSSQL Slis)
- Microsoft Edge WebView2 Runtime (προεγκατεστημένο σε Windows 11 / σύγχρονα Windows 10, απαραίτητο για το αυτόνομο desktop app)
- Web Browser (Edge, Chrome, Firefox ή Safari) για λειτουργία Web Server
- SQLite 3 (ενσωματωμένο στην πρότυπη βιβλιοθήκη της Python, χρησιμοποιείται αποκλειστικά για τοπικές δοκιμές/ανάπτυξη εκτός δικτύου με mock δεδομένα)
- Windows 10/11 (για τη δημιουργία και εκτέλεση του αυτόνομου
.exeαρχείου)
Αυτή η ενότητα παρέχει πλήρεις οδηγίες βήμα-προς-βήμα για την εκτέλεση του DiagFlow στο localhost (λειτουργία ανάπτυξης & δοκιμών), αναλύοντας όλα τα απαραίτητα αρχεία, τις εντολές αρχικοποίησης, τις επιλογές εκκίνησης διακομιστή και τη λειτουργία δοκιμών.
- Python 3.10+ (Υποστηρίζονται πλήρως οι εκδόσεις Python 3.11, 3.12, 3.13, 3.14)
- Git (για την κλωνοποίηση του αποθετηρίου)
- Πρόγραμμα περιήγησης Web (Edge, Chrome, Firefox, Safari) ή Edge WebView2 (για λειτουργία desktop GUI)
Πριν την εκκίνηση, βεβαιωθείτε ότι υπάρχουν τα παρακάτω βασικά αρχεία στον κατάλογο του έργου:
requirements.txt— Εξαρτήσεις πακέτων Python.env.example— Πρότυπο αρχείο ρυθμίσεων περιβάλλοντοςsrc/diagflow/main.py— Σημείο εισόδου διακομιστή FastAPI & διαδρομές REST APIsrc/diagflow/launcher.py— Launcher εφαρμογής Desktop GUI (pywebview)db/create_diagflow_db.py— Script αρχικοποίησης βάσης ρυθμίσεων (db/diagflow.db)db/seed_mock_db.py— Script αρχικοποίησης δοκιμαστικής βάσης εξετάσεων SLIS (db/mock_slis.db)db/seed_templates.py— Script δημιουργίας ανώνυμων προτύπων βάσεων (db/templates/)frontend/— Αρχεία HTML/JS/CSS για το Dashboard Γραμματείας και το Admin UI
# Κλωνοποίηση αποθετηρίου
git clone https://github.com/Georgekon4002/diagflow.git
cd diagflow
# Δημιουργία εικονικού περιβάλλοντος Python
python -m venv .venv
# Ενεργοποίηση εικονικού περιβάλλοντος
# Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
# Windows (Command Prompt):
.\.venv\Scripts\activate.bat
# Linux / macOS:
source .venv/bin/activatepython -m pip install --upgrade pip
pip install -r requirements.txt# Αντιγραφή προτύπου περιβάλλοντος
copy .env.example .env # Windows CMD / PowerShell
# cp .env.example .env # Linux / macOSΡυθμίστε το αρχείο .env:
# --- Database Configuration ---
USE_MOCK_SLIS_DB=true
MOCK_SLIS_DB_PATH=db/mock_slis.db
SLIS_DB_CONNECTION_STRING=mssql+pyodbc://diagflow_user:SecurePassword123!@server_hostname/SlisDB?driver=ODBC+Driver+17+for+SQL+Server
CONFIG_DB_CONNECTION_STRING=sqlite:///db/diagflow.db
# --- Rule Engine Weights ---
WEIGHT_PARTNERSHIP=0.35
WEIGHT_PATIENT_HISTORY=0.20
WEIGHT_SKILLS=0.20
WEIGHT_LAB=0.15
WEIGHT_CAPACITY=0.10
# --- Server Settings ---
APP_HOST=127.0.0.1
APP_PORT=8000
LOG_LEVEL=INFO# Ορισμός PYTHONPATH ώστε να περιλαμβάνει τον κατάλογο src/
$env:PYTHONPATH="src" # Windows PowerShell
# set PYTHONPATH=src # Windows CMD
# export PYTHONPATH=src # Linux / macOS
# 1. Δημιουργία & αρχικοποίηση βάσης ρυθμίσεων (db/diagflow.db)
python db/create_diagflow_db.py
# 2. Δημιουργία & αρχικοποίηση δοκιμαστικής βάσης SLIS (db/mock_slis.db)
python db/seed_mock_db.py
# 3. (Προαιρετικό) Δημιουργία & ανανέωση ανώνυμων προτύπων βάσεων (db/templates/*)
python db/seed_templates.pyNote
Σημείωση Ασφάλειας & Ιδιωτικότητας: Τα πρωτογενή αρχεία SQL που περιέχουν πραγματικά δεδομένα (db/init_diagflow.sql και db/init_mock_slis.sql) εξαιρούνται ρητά από το .gitignore ώστε να μην ανεβαίνουν ποτέ ευαίσθητα δεδομένα στο GitHub. Τα scripts αρχικοποίησης (create_diagflow_db.py & seed_mock_db.py) ανιχνεύουν αυτόματα αν λείπουν τα πρωτογενή αρχεία και χρησιμοποιούν ως fallback τα ανωνυμοποιημένα πρότυπα από το db/templates/.
Εκτελεί το FastAPI στο localhost με αυτόματη ανανέωση κώδικα:
$env:PYTHONPATH="src"
uvicorn diagflow.main:app --reload --host 127.0.0.1 --port 8000Πρόσβαση στις σελίδες μέσω browser:
- Dashboard Γραμματείας: http://localhost:8000
- Admin Control Panel: http://localhost:8000/admin.html
- Τεκμηρίωση API (Swagger): http://localhost:8000/docs
Εκκινεί την εφαρμογή σε αυτόνομο παράθυρο Windows desktop:
$env:PYTHONPATH="src"
python src/diagflow/launcher.pyΔημιουργεί και εκτελεί το αυτόνομο αρχείο .exe:
python scripts/build_exe.py
.\dist\DiagFlow.exe$env:PYTHONPATH="src"
python -m pytestpython scripts/build_exe.pyΠαράγει: dist/DiagFlow.exe
.\dist\DiagFlow.exeΕκκινεί αυτόματα τον FastAPI server στη θύρα 8080 και ανοίγει το Dashboard σε παράθυρο desktop.
- Λήψη Εκτελέσιμου: Κατεβάστε το
DiagFlow.exeαπευθείας από τη σελίδα GitHub Releases του αποθετηρίου (ή αντιγράψτε το αρχείοdist/DiagFlow.exeπου δημιουργήσατε). - Ρύθμιση Αρχείου
.env: Δημιουργήστε ένα αρχείο.envστον ίδιο κατάλογο με τοDiagFlow.exeμε τα στοιχεία σύνδεσης του κεντρικού MSSQL Server:USE_MOCK_SLIS_DB=false SLIS_DB_CONNECTION_STRING=mssql+pyodbc://diagflow_user:Password123!@server_hostname/SlisDB?driver=ODBC+Driver+17+for+SQL+Server CONFIG_DB_CONNECTION_STRING=mssql+pyodbc://diagflow_user:Password123!@server_hostname/SlisDB?driver=ODBC+Driver+17+for+SQL+Server
- Δεν Χρειάζεται Φάκελος
db/στην Παραγωγή: Όταν το DiagFlow συνδέεται στον Κεντρικό MSSQL Server, επικοινωνεί απευθείας με τους πίνακεςdf_*και τους πίνακες του Slis μέσω του δικτύου LAN. ΔΕΝ χρειάζεται να αντιγράψετε ή να συμπεριλάβετε φάκελοdb/. - Εκτέλεση: Κάντε διπλό κλικ στο
DiagFlow.exe. Η εφαρμογή εκκινεί άμεσα σε αυτόνομο παράθυρο desktop πλήρους οθόνης.
- Αυτόματη Δημιουργία Φακέλου
db/: Όταν η εφαρμογή εκτελείται σε δοκιμαστική λειτουργία (USE_MOCK_SLIS_DB=trueή χωρίς ενεργή σύνδεση MSSQL), ο φάκελοςdb/δημιουργείται αυτόματα κατά την εκκίνηση. Το σύστημα αρχικοποιεί αυτόματα τις βάσειςmock_slis.dbκαιdiagflow.dbαπό τα ενσωματωμένα ανώνυμα πρότυπα του φακέλουdb/templates/. - Προσαρμογή / Επανατροφοδότηση Δοκιμαστικών Δεδομένων: Εάν θέλετε να εισάγετε ή να προσαρμόσετε mock εξετάσεις για δοκιμές, μπορείτε να εκτελέσετε τα scripts:
python db/create_diagflow_db.py # Αρχικοποιεί δοκιμαστικούς διαγνωστές, δεξιότητες, κανόνες python db/seed_mock_db.py # Αρχικοποιεί δείγματα εκκρεμών/ανατεθειμένων εξετάσεων CT & MRI
- Αντιγράψτε τον πηγαίο κώδικα του έργου στον υπολογιστή-διακομιστή.
- Εγκαταστήστε Python 3.11+ και εκτελέστε
pip install -r requirements.txt. - Ορίστε
APP_HOST=0.0.0.0καιAPP_PORT=8000στο.env. - Εκτελέστε
uvicorn diagflow.main:app --host 0.0.0.0 --port 8000. - Άλλοι υπολογιστές στο τοπικό δίκτυο μπορούν να συνδεθούν στο dashboard μέσω
http://<IP_ΔΙΑΚΟΜΙΣΤΗ>:8000.
Στην παραγωγή, όλη η διαμόρφωση του DiagFlow, οι επιχειρησιακοί κανόνες, η προσωρινή κατάσταση αναθέσεων και τα ίχνη ελέγχου φιλοξενούνται στον Κεντρικό Διακομιστή MSSQL υπό το πρόθεμα df_, συνυπάρχοντας αρμονικά με τους πίνακες του Slis:
| Πίνακας | Περιγραφή | Κύριο Κλειδί | Βασικές Στήλες |
|---|---|---|---|
df_diagnosticians |
Κύρια λίστα διαγνωστών | id (INT) |
name, active, can_ct, can_mri, quota_monday..sunday, preferred_lab_id |
df_diagnostician_skills |
Εξειδικεύσεις κωδικών εξετάσεων | id (INT) |
diagnostician_id, exam_code, is_preferred |
df_partnerships |
Ζεύγη γιατρού-διαγνωστή | id (INT) |
issuing_doctor_id, preferred_diagnostician_id, priority, exclusive, is_active |
df_availability |
Ημερολόγιο αδειών και κατάστασης | id (INT) |
diagnostician_id, date, status, is_pamakristos_oncall |
df_doctors |
Κατάλογος γιατρών | id (NVARCHAR) |
name |
df_local_assignments |
Κοινόχρηστες προσωρινές αναθέσεις | exammoreid (INT) |
diagnostician_id, diagnostician_name, assigned_at, is_auto, rule_desc |
df_assignment_log |
Κεντρικό ίχνος ελέγχου | exammoreid (INT) |
diagnostician_id, assigned_at, modality, extracode |
df_pamakristos_schedule |
Εβδομαδιαίο πρόγραμμα on-call | weekday (INT) |
diagnostician_id (0=Δευτ .. 6=Κυρ) |
df_exam_routing_rules |
Δυναμικοί κανόνες αυτόματης ανάθεσης | id (INT) |
lab_id, is_pamakristos, exam_codes, diagnostician_id, description, is_active |
df_exclusive_lab_rules |
Αυστηρές δεσμεύσεις εργαστηρίου | id (INT) |
diagnostician_id, lab_id, lab_name, is_active |
df_modality_quotas |
Ειδικά ημερήσια όρια CT/MRI | id (INT) |
diagnostician_id, modality, max_count, is_active |
df_system_settings |
Δυναμικά βάρη παραγόντων βαθμολόγησης | key (NVARCHAR) |
value (π.χ. pts_partnership, pts_history, pts_skills_pref, pts_lab_pref, pts_capacity) |
df_admin_users |
Πιστοποιημένοι διαχειριστές & IT | id (INT) |
username, password_hash (bcrypt), role (admin/it_support), is_active |
df_exam_dictionary |
Κατάλογος & κατηγοριοποίηση εξετάσεων | code (NVARCHAR) |
name, category (CT/MRI/MRA) |
| Αντικείμενο | Τύπος | Περιγραφή | Βασικές Στήλες / Παράμετροι |
|---|---|---|---|
exammore |
Πίνακας | Ιατρικές εξετάσεις Slis | exammoreid (PK), extracode, visitid, demogid, examnumcode, visitdate, labcodeid, wcode, diagnostisid |
getExamsListForPeriod_V1 |
Stored Proc | Άντληση μη ανατεθειμένων εξετάσεων | @DateFrom, @DateTo (επιστρέφει εκκρεμείς εξετάσεις περιόδου) |
getWardDoctors |
Stored Proc | Συγχρονισμός γιατρών | Επιστρέφει CODE, DOCNAME από το Slis |
getdiagnosticsList |
Stored Proc | Συγχρονισμός διαγνωστών | Επιστρέφει PERSONELID, DOCNAME από το Slis |
Όταν εκτελείται τοπικά με USE_MOCK_SLIS_DB=true, το DiagFlow χρησιμοποιεί αυτόματα δημιουργούμενες βάσεις SQLite (mock_slis.db για εξετάσεις και diagflow.db για ρυθμίσεις) που αντικατοπτρίζουν το παραπάνω σχήμα για δοκιμές χωρίς σύνδεση στο δίκτυο του νοσοκομείου.
Οι ρυθμίσεις του συστήματος διαχειρίζονται μέσω του αρχείου παραμέτρων .env:
| Μεταβλητή | Προεπιλογή | Περιγραφή |
|---|---|---|
USE_MOCK_SLIS_DB |
false |
Όταν είναι false, συνδέεται στον Κεντρικό MSSQL Server παραγωγής. Ορίστε true για δοκιμές εκτός δικτύου με mock δεδομένα. |
SLIS_DB_CONNECTION_STRING |
— | MSSQL ODBC connection string για την επιχειρησιακή βάση Slis. |
CONFIG_DB_CONNECTION_STRING |
— | MSSQL ODBC connection string για τους πίνακες df_* του DiagFlow. |
MOCK_SLIS_DB_PATH |
db/mock_slis.db |
Σχετική διαδρομή τοπικής βάσης mock (χρησιμοποιείται μόνο όταν USE_MOCK_SLIS_DB=true). |
SCORE_TIE_TOLERANCE |
0.05 |
Κατώφλι ανοχής βαθμολογίας (5%) για εξισορρόπηση ισοπαλιών. |
APP_HOST |
0.0.0.0 |
Διεπαφή IP host για δέσμευση server. |
APP_PORT |
8080 |
Αριθμός θύρας server. |
LOG_LEVEL |
INFO |
Επίπεδο καταγραφής (DEBUG, INFO, WARNING, ERROR). |
Όλα τα REST API endpoints έχουν πρόθεμα /api. Διαδραστική τεκμηρίωση Swagger στο /docs.
GET /api/health— Έλεγχος κατάστασης και υγείας του διακομιστή (health check).
GET /api/exams/pending— Ανάκτηση εκκρεμών εξετάσεων (με in-memory επεξεργασία).GET /api/exams/assigned— Ανάκτηση προσωρινά ανατεθειμένων εξετάσεων (df_local_assignments).
POST /api/assignments/suggest— Παραγωγή πρότασης ανάθεσης μέσω της 4-σταδιακής μηχανής.POST /api/assignments/suggest-batch— Μαζική παραγωγή προτάσεων στη μνήμη για όλες τις εκκρεμείς εξετάσεις.POST /api/assignments/confirm— Επιβεβαίωση πρότασης και καταχώρηση στοdf_local_assignments.POST /api/assignments/override— Παράκαμψη πρότασης με άλλον διαγνώστη και καταγραφή αιτιολογίας.POST /api/assignments/bulk-confirm— Ομαδική επιβεβαίωση επιλεγμένων εξετάσεων.POST /api/assignments/bulk-override— Ομαδική ανάθεση επιλεγμένων εξετάσεων σε έναν διαγνώστη.POST /api/assignments/bulk-eligible-diagnosticians— Τομή διαθέσιμων διαγνωστών για πολλαπλές επιλεγμένες εξετάσεις.DELETE /api/assignments/{exam_id}— Ακύρωση προσωρινής ανάθεσης βάσει ID εξέτασης.POST /api/assignments/unassign— Ακύρωση ανάθεσης μεμονωμένης εξέτασης και επιστροφή στις εκκρεμείς.POST /api/assignments/bulk-unassign— Μαζική ακύρωση προσωρινών αναθέσεων επιλεγμένων εξετάσεων.GET /api/assignments/weights— Ανάκτηση ενεργών δυναμικών βαρών βαθμολόγησης.PUT /api/assignments/weights— Δυναμική ενημέρωση βαρών βαθμολόγησης σε πραγματικό χρόνο και στη βάση.
POST /api/slis/pull— Ανανέωση εκκρεμών εξετάσεων μέσωEXEC getExamsListForPeriod_V1απευθείας στη μνήμη.GET /api/slis/status— Έλεγχος κατάστασης σύνδεσης με το Slis και λεπτομέρειες σφαλμάτων.POST /api/slis/push-all— Ώθηση όλων των επιβεβαιωμένων αναθέσεων στο Slis (UPDATE exammore), καταγραφή στοdf_assignment_logκαι εκκαθάριση τουdf_local_assignments.POST /api/slis/push-selected— Ώθηση επιλεγμένων εξετάσεων στο Slis.POST /api/slis/search— Ζωντανή αναζήτηση στη βάση Slis ανά εύρος ημερομηνιών, Εντολή (extracode), Ασθενή, Γιατρό, Διαγνώστη.POST /api/slis/reassign— Επανάθεση ήδη συγχρονισμένης εξέτασης απευθείας στο Slis (exammore) με καταγραφή ελέγχου.
GET /api/diagnosticians— Λίστα ενεργών διαγνωστών με πρόοδο ημερήσιων ορίων και στατιστικά CT/MRI.GET /api/doctors— Αναζήτηση και λίστα γιατρών με σελιδοποίηση.GET /api/dashboard— Συνοπτικά στατιστικά και αναλυτικά δεδομένα για το dashboard γραμματείας.GET /api/pamakristos/oncall— Σημερινός εφημερεύων διαγνώστης Παμμακαρίστου.GET /api/pamakristos/schedule— Εβδομαδιαίο πρόγραμμα εφημεριών Παμμακαρίστου.POST /api/pamakristos/oncall— Ορισμός χειροκίνητου εφημερεύοντος για συγκεκριμένη ημερομηνία.
POST /api/admin/auth/login— Πιστοποίηση διαχειριστή με κρυπτογράφηση bcrypt και rate limiting.POST /api/admin/auth/change-credentials— Αλλαγή προσωπικού ονόματος χρήστη / κωδικού πρόσβασης.GET/POST /api/admin/users— CRUD χρηστών διαχείρισης (με ρόλουςadmin/it_support, επαναφορά κωδικού, ενεργοποίηση/απενεργοποίηση).PUT/DELETE /api/admin/users/{user_id}— Ενημέρωση στοιχείων χρήστη, ρόλου, ενεργής κατάστασης ή διαγραφή χρήστη (it_support).POST /api/admin/users/{user_id}/reset— Επαναφορά κωδικού χρήστη στις αρχικές τιμέςadmin / admin1234(it_support).POST /api/admin/users/{user_id}/toggle— Εναλλαγή ενεργής/ανενεργής κατάστασης χρήστη (it_support).GET/POST /api/admin/diagnosticians— Λίστα / δημιουργία διαγνωστών και ημερήσιων ορίων.PUT/DELETE /api/admin/diagnosticians/{diag_id}— Ενημέρωση / διαγραφή διαγνώστη.POST /api/admin/diagnosticians/sync&POST /api/admin/sync-diagnosticians— Χειροκίνητος συγχρονισμός προσωπικού από το Slis (EXEC getdiagnosticsList).GET/POST/DELETE /api/admin/skills— CRUD εξειδικεύσεων και δεξιοτήτων διαγνωστών.PUT/DELETE /api/admin/skills/{skill_id}— Ενημέρωση / διαγραφή δεξιότητας διαγνώστη.GET /api/admin/exam-categories— Ανάκτηση καταλόγου και ανατομικών ομάδων εξετάσεων για ομαδική ανάθεση δεξιοτήτων.GET/POST/DELETE /api/admin/partnerships— CRUD συνεργασιών γιατρού-διαγνωστή με προτεραιότητα και αποκλειστικότητα.PATCH/DELETE /api/admin/partnerships/{part_id}— Ενημέρωση / διαγραφή συνεργασίας γιατρού-διαγνώστη.GET/POST/DELETE /api/admin/doctors— CRUD μητρώου γιατρών.POST /api/admin/doctors/sync&POST /api/admin/sync-doctors— Χειροκίνητος συγχρονισμός γιατρών από το Slis (EXEC getWardDoctors).GET/POST /api/admin/availability— Λίστα / καταχώρηση ημερήσιας διαθεσιμότητας και αδειών.DELETE /api/admin/availability/{diagnostician_id}/{date}— Διαγραφή εγγραφής διαθεσιμότητας / άδειας για συγκεκριμένη ημερομηνία.GET/POST /api/admin/oncall— Ανάκτηση / ορισμός εφημερεύοντος Παμμακαρίστου για συγκεκριμένη ημερομηνία.GET/POST /api/admin/pamakristos/weekly-schedule— Διαχείριση εβδομαδιαίου προγράμματος Παμμακαρίστου.GET/DELETE /api/admin/pamakristos/overrides&DELETE /api/admin/pamakristos/overrides/{avail_id}— Διαχείριση χειροκίνητων αντικαταστάσεων ημερολογίου εφημεριών.GET/POST/PUT/DELETE /api/admin/advanced/exam-routing-rules— CRUD δυναμικών κανόνων δρομολόγησης εξετάσεων.GET/POST/PUT/DELETE /api/admin/exclusive-lab-rules— CRUD αποκλειστικών δεσμεύσεων εργαστηρίου.GET/POST/PUT/DELETE /api/admin/modality-quotas— CRUD ειδικών ημερήσιων ορίων CT/MRI.
diagflow/
├── README.md # Πλήρης τεκμηρίωση έργου (Αγγλικά)
├── README.el.md # Πλήρης τεκμηρίωση έργου (Ελληνικά)
├── USER_GUIDE.md # Πλήρης Οδηγός Χρήστη για Γραμματεία & Admin
├── pyproject.toml # Ρυθμίσεις build & παραμετροποίηση pytest
├── requirements.txt # Εξαρτήσεις πακέτων Python
├── .env.example # Πρότυπο αρχείο ρυθμίσεων περιβάλλοντος
├── DiagFlow.spec # Προδιαγραφές PyInstaller για κατασκευή EXE
│
├── db/ # Σχήματα κεντρικής βάσης & αρχικοποιητές
│ ├── create_central_tables.sql # T-SQL DDL script πινάκων df_* για MSSQL
│ ├── create_diagflow_db.py # Script αρχικοποίησης mock βάσης ρυθμίσεων
│ ├── seed_mock_db.py # Script αρχικοποίησης mock βάσης εξετάσεων
│ ├── seed_templates.py # Script δημιουργίας ανώνυμων προτύπων βάσεων
│ ├── init.sql # Βασικό DDL σχήμα για δοκιμές
│ ├── table.sql # Σχήμα πινάκων αναφοράς
│ ├── update_slis.sql # Stored procedures αναφοράς
│ └── templates/ # Ενσωματωμένα ανώνυμα πρότυπα SQLite
│ ├── diagflow.db # Ανώνυμο πρότυπο βάσης ρυθμίσεων
│ ├── mock_slis.db # Ανώνυμο πρότυπο βάσης εξετάσεων
│ ├── init_diagflow.sql # Ανώνυμο SQL seed πρότυπο ρυθμίσεων
│ └── init_mock_slis.sql # Ανώνυμο SQL seed πρότυπο εξετάσεων
│
├── frontend/ # Επίπεδο Διεπαφής Χρήστη (HTML5 / CSS3 / JS)
│ ├── index.html # Dashboard αναθεώρησης γραμματείας (4 καρτέλες)
│ ├── admin.html # Control panel διαχειριστή
│ ├── css/
│ │ └── styles.css # Ενιαίο stylesheet & design system
│ ├── js/
│ │ ├── app.js # Λογική dashboard & keyboard engine
│ │ └── admin.js # Διαδραστική λογική admin panel
│ └── media/
│ └── logos/ # Λογότυπα και εικονίδια εφαρμογής
│
├── guides/ # Αυτόνομες HTML Εκδόσεις Οδηγών
│ └── *.html # Αυτόνομη τεκμηρίωση HTML εκτός σύνδεσης
│
├── src/diagflow/ # Κύριο Πακέτο Εφαρμογής Python
│ ├── __init__.py # Μεταδεδομένα πακέτου & έκδοση
│ ├── main.py # FastAPI entrypoint, δρομολογήσεις & lifespan
│ ├── config.py # Ρυθμίσεις Pydantic & φόρτωση περιβάλλοντος
│ ├── launcher.py # Launcher εφαρμογής desktop (pywebview)
│ │
│ ├── api/ # Επίπεδο REST API
│ │ ├── routes.py # Ορισμοί διαδρομών API
│ │ ├── schemas.py # Μοντέλα αιτημάτων & αποκρίσεων Pydantic
│ │ └── dependencies.py # Πάροχοι dependency injection FastAPI
│ │
│ ├── db/ # Επίπεδο Πρόσβασης Δεδομένων
│ │ ├── diagflow_db.py # Προσαρμογέας βάσης & CRUD (MSSQL / SQLite)
│ │ ├── engines.py # SQLAlchemy engine & session factory
│ │ ├── models.py # Μοντέλα ORM ρυθμίσεων
│ │ └── slis_models.py # Μοντέλα ORM Slis
│ │
│ ├── engine/ # Μηχανή Κανόνων & Βελτιστοποίησης
│ │ ├── pipeline.py # Ενορχηστρωτής αγωγού 4 σταδίων
│ │ ├── filters.py # Σκληροί περιορισμοί & φίλτρα επιλεξιμότητας
│ │ ├── scoring.py # Σταθμισμένη βαθμολόγηση & balancer ισοπαλιών
│ │ ├── solver.py # Solver Google OR-Tools CP-SAT & greedy fallback
│ │ └── rules.py # Ορισμοί κανόνων & registry
│ │
│ ├── services/ # Επιχειρησιακές Υπηρεσίες
│ │ ├── assignment.py # Κύκλος ζωής αναθέσεων & καταγραφή ελέγχου
│ │ ├── diagnostician.py # Φόρτωση, batch caching & εμπλουτισμός υποψηφίων
│ │ ├── pamakristos.py # Διαχειριστής εφημεριών Παμμακαρίστου
│ │ └── slis_sync.py # Συγχρονισμός Slis & ημερήσιο cron APScheduler
│ │
│ └── utils/ # Βοηθητικά Εργαλεία
│ └── logging.py # Δομημένη καταγραφή (structlog)
│
├── puml/ # Διαγράμματα Αρχιτεκτονικής PlantUML
│ ├── architecture.puml # Διάγραμμα αρχιτεκτονικής συστήματος
│ ├── assignment_sequence.puml # Διάγραμμα ακολουθίας suggest → push
│ ├── class_api.puml # Διάγραμμα κλάσεων API & Launcher
│ ├── data_api.puml # Διάγραμμα κλάσεων πρόσβασης δεδομένων & μηχανής
│ ├── data_model.puml # Διάγραμμα μοντέλου δεδομένων
│ ├── er_diagram.puml # Διάγραμμα οντοτήτων-συσχετίσεων (ER)
│ └── rule_engine_flow.puml # Διάγραμμα ροής 4 σταδίων μηχανής κανόνων
│
├── scripts/ # Scripts Κατασκευής & Συντήρησης
│ ├── build_exe.py # Αυτοματοποιημένος builder PyInstaller για EXE
│ ├── convert_md_to_html.py # Μετατροπέας Markdown σε αυτόνομο HTML
│ └── data_quality_audit.py # Script ελέγχου ποιότητας δεδομένων
│
├── tests/ # Σουίτα Αυτοματοποιημένων Δοκιμών (Pytest)
│ ├── conftest.py # Fixtures δοκιμών & βάση ελέγχου
│ ├── test_admin_auth.py # Δοκιμές πιστοποίησης admin & bcrypt security
│ ├── test_auto_init_db.py # Δοκιμές αυτόματης αρχικοποίησης βάσης
│ ├── test_autoassign.py # Δοκιμές λογικής αυτόματων αναθέσεων
│ ├── test_filters.py # Δοκιμές σκληρών φίλτρων
│ ├── test_multi_exam_order.py # Δοκιμές κλειδώματος εντολών πολλαπλών εξετάσεων
│ ├── test_optimistic_locking.py # Δοκιμές αισιόδοξου κλειδώματος
│ ├── test_pipeline.py # Δοκιμές ολοκλήρωσης αγωγού
│ ├── test_scoring.py # Δοκιμές σταθμισμένης βαθμολόγησης & ισοπαλιών
│ └── test_skills_fix.py # Δοκιμές προτιμήσεων δεξιοτήτων & αποκλεισμών
│
└── media/ # Πολυμέσα & Στιγμιότυπα Εφαρμογής
├── logos/ # Λογότυπα εφαρμογής & brand assets
└── screenshots/ # Στιγμιότυπα διεπαφής χρήστη| Διάγραμμα | Αρχείο Πηγής | Περιγραφή |
|---|---|---|
| Αρχιτεκτονική Συστήματος | architecture.puml |
Διάγραμμα συστατικών: FastAPI, βάσεις, pywebview, PyInstaller. |
| Ακολουθία Ανάθεσης | assignment_sequence.puml |
End-to-end ακολουθία suggest, confirm, push. |
| Κλάσεις: API και Launcher | class_api.puml |
Δομικό διάγραμμα routes, schemas, services. |
| Κλάσεις: Δεδομένα και Μηχανή | data_api.puml |
Data access, φίλτρα, scoring, solver. |
| Μοντέλο Δεδομένων | data_model.puml |
Οντότητες και σχέσεις cross-database. |
| Διάγραμμα ER | er_diagram.puml |
Πλήρες ER με κλειδιά και περιορισμούς. |
| Ροή Μηχανής Κανόνων | rule_engine_flow.puml |
Διάγραμμα δραστηριοτήτων 4 σταδίων. |
| Αρχική Οθόνη (Καρτέλα Εκκρεμών — Bright Mode) | Αρχική Οθόνη (Καρτέλα Εκκρεμών — Dark Mode) |
|---|---|
![]() |
![]() |
| Επισκόπηση Dashboard & Κατανομή Modality | Αυτόματες Αναθέσεις (Καρτέλα Ανατεθέντων) |
|---|---|
![]() |
![]() |
| Φιλτράρισμα και Αναζήτηση | Πολλαπλή Επιλογή & Μπάρα Ενεργειών |
|---|---|
![]() |
![]() |
| Αναζήτηση Slis & Επανάθεση Διαγνώστη (4η Καρτέλα) | Επιβεβαίωση Επανάθεσης στο Slis |
|---|---|
![]() |
![]() |
| Παράθυρο Εναλλακτικών & Επιλεξιμότητας | Ανάλυση Συστήματος Βαθμολόγησης |
|---|---|
![]() |
![]() |
| Λεπτομέρεια Βαθμολογίας ανά Παράγοντα | Διάγραμμα Ροής Λήψης Απόφασης Ανάθεσης |
|---|---|
![]() |
![]() |
| Διαχείριση Διαγνωστών & Ημερήσια Όρια | Ημερολόγιο Διαθεσιμότητας & Άδειες |
|---|---|
![]() |
![]() |
| Μήτρα Χωρητικότητας & Εξειδικεύσεων (Θολή) | Μήτρα Εξειδικεύσεων (Προτιμήσεις & Αποκλεισμοί) |
|---|---|
![]() |
![]() |
| Διαχείριση Μήτρας Εξειδικεύσεων & Φίλτρα | Συνεργασίες & Αποκλειστικότητες Γιατρών |
|---|---|
![]() |
![]() |
| Πρόγραμμα & Εφημερίες Παμμακαρίστου | Κατάλογος Εξετάσεων & Ανατομικές Ομάδες |
|---|---|
![]() |
![]() |
| Επεξεργαστής Δυναμικών Κανόνων Δρομολόγησης | Αποκλειστικά Εργαστήρια & Όρια Modality |
|---|---|
![]() |
![]() |
| Επεξεργαστής Βαρών Βαθμολόγησης | |
|---|---|
![]() |
Εσωτερικό ιδιόκτητο λογισμικό — Κοσμοϊατρική © 2026. Με επιφύλαξη παντός δικαιώματος.


























