Skip to content

Latest commit

 

History

History
789 lines (645 loc) · 69.7 KB

File metadata and controls

789 lines (645 loc) · 69.7 KB
DiagFlow Logo

🏥 DiagFlow — Αυτοματοποιημένη Μηχανή Ανάθεσης Αναφορών CT/MRI

Python FastAPI Database Optimization License

Το DiagFlow είναι μια ευφυής μηχανή ανάθεσης διαγνωστικών εξετάσεων και υποστήριξης αποφάσεων, αναπτυγμένη για την Κοσμοϊατρική. Αυτοματοποιεί την πολύπλοκη διαδικασία ανάθεσης αναφορών απεικόνισης CT και MRI από το σύστημα Slis της Infomed σε διαγνωστές, χρησιμοποιώντας μια 4-σταδιακή μηχανή κανόνων, δυναμικές δρομολογήσεις, σταθμισμένη πολυπαραγοντική βαθμολόγηση, εξισορρόπηση φορτίου για ισοπαλίες και τον solver CP-SAT της Google OR-Tools για ομαδική βελτιστοποίηση.

💡 Φιλοσοφία Σχεδιασμού: Πρότεινε, μην αποφασίζεις. Κάθε πρόταση ανάθεσης συνοδεύεται από πλήρη διαφάνεια — ποιοι κανόνες ενεργοποιήθηκαν, ανάλυση βαθμολογίας ανά παράγοντα και πλήρης ορατότητα των αποκλεισμένων υποψηφίων με ανθρώπινα αναγνώσιμο λόγο απόρριψης. Οι χειριστές της γραμματείας διατηρούν πλήρη εξουσία να επιβεβαιώσουν ή να παρακάμψουν τις προτάσεις με ένα κλικ.


📋 Πίνακας Περιεχομένων


✨ Βασικά Χαρακτηριστικά

Τομέας Χαρακτηριστικό Περιγραφή
⚙️ Μηχανή Κανόνων 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)   │
                      └────────────────────────────────────────┘

⚙️ Ανάλυση Μηχανής

1. 4-Σταδιακή Αγωγός Κανόνων

Εκκρεμής Εξέταση
    │
    ├─ Στάδιο 0: Αναφορά Ονόματος στα Σχόλια; ──ναι──► Αυτόματη Ανάθεση («Όνομα Διαγνώστη αναφέρθηκε στα σχόλια»)
    │           (Υποστήριξη ακριβών ονομάτων, κλίσεων, συμφώνων π.χ. ΝΤΣΚ, ορθογραφικών λαθών)
    │           (Εξαιρέσεις «ΟΧΙ» αποκλείουν τον διαγνώστη από όλους τους επόμενους κανόνες)
    │
    ├─ Στάδιο 0.5: Αποκλειστική Συνεργασία ή Κανόνας Δρομολόγησης; ──ναι──► Αυτόματη Ανάθεση
    │
    ▼
Στάδιο 1: Σκληρά Φίλτρα (Εξαίρεση Σχολίου → Διαθεσιμότητα → Χωρητικότητα → Ποσοστώσεις → Υπηρεσία → Εξειδικεύσεις → Αποκλειστικά Εργαστήρια)
    │
    ▼
Στάδιο 2: Σταθμισμένη Βαθμολόγηση (Συνεργασία + Ιστορικό Ασθενή + Bonus Εξειδίκευσης + Προτίμηση Εργαστηρίου + Αναλογία Χωρητικότητας)
    │
    ▼
Στάδιο 3: Εξισορρόπηση Ισοπαλιών (Ομάδα ανοχής βαθμολογίας → ταξινόμηση ανά φόρτο + offset συνεδρίας)
    │
    ▼
Στάδιο 4: Solver (Greedy για μεμονωμένη εξέταση, CP-SAT για ομαδική βελτιστοποίηση)
    │
    ▼
Πρόταση Ανάθεσης + Ανάλυση Βαθμολογίας + Λίστα Εναλλακτικών + Καταγραφή Ελέγχου

Στάδιο 0: Αναφορά Σχολίων & Εξαιρέσεις «ΟΧΙ» (Υπέρτατη Προτεραιότητα)

  • Θετική Αναφορά: Αν αναφέρεται ενεργός διαγνώστης στα σχόλια της εξέτασης (π.χ. ΝΑΤΣΙΚΑ, ΝΤΣΚ, Νάτσικα, Νατσκα, ΜΠΡΤ, ΣΓΛ, ΚΛΓΡΓ), η εξέταση ανατίθεται άμεσα με rule_desc = "Όνομα Διαγνώστη αναφέρθηκε στα σχόλια".
  • Αρνητική Εξαίρεση («ΟΧΙ»): Αν προηγείται η λέξη «ΟΧΙ» (π.χ. ΟΧΙ ΝΑΤΣΙΚΑ), ο διαγνώστης αποκλείεται από κάθε αυτόματη ανάθεση και από τις προτάσεις.
  • Ενεργοποιείται/απενεργοποιείται μέσω διακόπτη (checkbox) στην ενότητα Για Προχωρημένους του Admin Panel.

Στάδιο 0.5: Άμεση Δρομολόγηση και Αποκλειστικές Συνεργασίες

Εξετάσεις που εκδίδονται από γιατρούς με ενεργή αποκλειστική συνεργασία ή που ταιριάζουν σε δυναμικό κανόνα δρομολόγησης (εφόσον δεν έχουν αποκλειστεί από σχόλιο) παρακάμπτουν τη βαθμολόγηση και ανατίθενται άμεσα στον διαγνωστή-στόχο.

Στάδιο 1: Σκληρά Φίλτρα (Υποχρεωτική Επιτυχία)

Υποψήφιοι που αποτυγχάνουν σε οποιοδήποτε φίλτρο σημειώνονται ως αποκλεισμένοι. Σημαντικό: ΔΕΝ κρύβονται — εμφανίζονται με κόκκινο πλαίσιο και αναγνώσιμο λόγο απόρριψης.

Φίλτρο Περιγραφή Παράδειγμα Λόγου Απόρριψης
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 Αποκλεισμός βάσει εξειδίκευσης Δεν διαγιγνώσκει τον συγκεκριμένο κωδικό

Στάδιο 2: Σταθμισμένη Βαθμολόγηση

$$\text{Συνολική Βαθμολογία} = \sum (\text{Ακατέργαστη Βαθμολογία Παράγοντα} \times \text{Βάρος Παράγοντα})$$

Παράγοντας Κλειδί Προεπιλογή Περιγραφή
Ιστορικό Ασθενή pts_history 0.35 Συνέχεια φροντίδας
Συνεργασία Γιατρού pts_partnership 0.20 Προτιμώμενος διαγνωστής για τον εκδίδοντα γιατρό
Bonus Εξειδίκευσης pts_skills_pref 0.20 Προτίμηση εξειδίκευσης
Προτίμηση Εργαστηρίου pts_lab_pref 0.15 Ταιριάζει στο προτιμώμενο εργαστήριο
Εναπομένουσα Χωρητικότητα pts_capacity 0.10 Αναλογία εναπομενουσών θέσεων

Στάδιο 3: Εξισορρόπηση Φορτίου Ισοπαλιών

Υποψήφιοι εντός SCORE_TIE_TOLERANCE (5%) κατατάσσονται ανά:

  1. Λιγότερες εξετάσεις σήμερα (plus offset συνεδρίας)
  2. Μεγαλύτερη ημερήσια χωρητικότητα
  3. Τυχαία διακύμανση (τελικός αποφασιστής)

Στάδιο 4: Solver

  • Μεμονωμένη Εξέταση: Greedy επιλογή Κατάταξης #1.
  • Ομαδική: CP-SAT solver μεγιστοποιεί τη συνολική συμβατότητα.

2. Σύστημα Αυτόματης Ανάθεσης (Ιεραρχία Προτεραιότητας)

  1. Αναφορά Ονόματος στα Σχόλια & Εξαιρέσεις «ΟΧΙ»: Αυτόματη ανάθεση σε αναφερόμενο διαγνώστη (με υποστήριξη ακριβών ονομάτων, συμφώνων π.χ. ΝΤΣΚ, ορθογραφικών παραλλαγών Νατσκα) και πλήρης αποκλεισμός όταν προηγείται «ΟΧΙ».
  2. Αποκλειστικές Συνεργασίες: Ενεργά ζεύγη γιατρού-διαγνωστή ανατίθενται αυτόματα.
  3. Δυναμικοί Κανόνες Δρομολόγησης: Κωδικοί εξετάσεων (Αρθρογραφίες, Φασματοσκοπίες, TMJ) δρομολογούνται σε εξειδικευμένους διαγνωστές.
  4. On-Call Παμμακαρίστου: Εξετάσεις από Παμμακάριστο δρομολογούνται στον εφημερεύοντα της ημέρας.

Εμφανίζονται στην καρτέλα Ανατεθέντες με σήμανση ⚡ Auto και επεξηγηματικό tooltip κανόνα.


3. Αρχιτεκτονική Κεντρικής Βάσης Δεδομένων & Ταυτόχρονη Χρήση (Multi-User LAN)

Σε περιβάλλον παραγωγής, το 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 (αρχικά δεδομένα).

4. Υπηρεσία Αμφίδρομης Συγχρονισμού Slis

  • Άντληση (On-Demand / Εκκίνηση): Όταν USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedure EXEC getExamsListForPeriod_V1 'YYYY-MM-DD', 'YYYY-MM-DD' στη βάση Slis MSSQL για άντληση μη ανατεθέντων εξετάσεων (DIAGNOSTIS IS NULL) των τελευταίων 3 ημερών απευθείας στη μνήμη.
  • Συγχρονισμός Γιατρών (Εκκίνηση / Ημερήσιο 3 ΠΜ Cron): Όταν USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedure EXEC getWardDoctors για συγχρονισμό νέων γιατρών (CODE, DOCNAME) στον πίνακα df_doctors (ή τοπικό doctors σε dev).
  • Συγχρονισμός Διαγνωστών (Ανανέωση Admin Panel): Όταν USE_MOCK_SLIS_DB=false, εκτελεί τη stored procedure EXEC getdiagnosticsList όταν ο admin πατάει "Ανανέωση" για συγχρονισμό νέων διαγνωστών (PERSONELID, DOCNAME) στον πίνακα df_diagnosticians (ή τοπικό diagnosticians σε dev).
  • Ώθηση (Χειροκίνητη): Επιβεβαιωμένες τοπικές αναθέσεις ωθούνται άμεσα στο Slis (UPDATE exammore SET diagnostisid=? WHERE exammoreid=?), καταγράφοντας το ιστορικό στο df_assignment_log και διαγράφοντας την προσωρινή εγγραφή από το df_local_assignments.

💻 Διεπαφές Χρήστη

Dashboard Αναθεώρησης Γραμματείας (index.html)

  • 1. Καρτέλα Εκκρεμών: Πίνακας μη ανατεθειμένων εξετάσεων, ομαδοποίηση εντολών, αυτόματες προτάσεις, tooltips βαθμολογίας, εναλλακτικές λύσεις και ομαδικές αναθέσεις.
  • 2. Καρτέλα Ανατεθέντων: Ανατεθειμένες εξετάσεις, σήμανση κατάστασης ("✅ Ενημερώθηκε", "⚠️ Εκκρεμεί Ενημέρωση στο Slis"), χειροκίνητη ή ομαδική ώθηση στο Slis, και ετικέτες κανόνων αυτόματης δρομολόγησης.
  • 3. Dashboard Ποσοστώσεων: Ζωντανή επισκόπηση ημερήσιων ορίων, ολοκληρωμένων διαγνώσεων, υπολοίπου χωρητικότητας και ανάλυσης CT/MRI ανά διαγνωστή.
  • 4. Αναζήτηση Slis: Ζωντανή αναζήτηση στη βάση Slis με ειδικά εικονίδια πεδίων (📋 Εντολή, 👤 Ασθενής, 🩺 Παραπέμπων Ιατρός, 👨‍⚕️ Διαγνώστης, 📆 Εύρος Ημερομηνιών), καθαρισμένους τίτλους εξετάσεων, χρωματιστές ετικέτες κατηγορίας (MRI, CT, MRA), παρακολούθηση κατάστασης Slis ("⚠️ Εκκρεμεί Ενημέρωση στο Slis") και διαδραστικό μενού επαναποστολής με έλεγχο εξειδικεύσεων/ορίων σε πραγματικό χρόνο και ταξινόμηση διαθεσίμων στην κορυφή.

🔒 Κανόνας Κλειδώματος Εντολών Multi-exam: Όλες οι υπο-εξετάσεις που ανήκουν στην ίδια Εντολή (extracode) κλειδώνουν αυτόματα στον ίδιο διαγνωστή που συγκεντρώνει τη μεγαλύτερη βαθμολογία, εξασφαλίζοντας 100% συνέπεια διάγνωσης.

Admin Panel (admin.html)

  • Ασφάλεια: 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 αρχείου)

🚀 Οδηγός Εγκατάστασης & Εκτέλεσης στο Localhost

💻 Εκτέλεση του DiagFlow Τοπικά (Localhost)

Αυτή η ενότητα παρέχει πλήρεις οδηγίες βήμα-προς-βήμα για την εκτέλεση του DiagFlow στο localhost (λειτουργία ανάπτυξης & δοκιμών), αναλύοντας όλα τα απαραίτητα αρχεία, τις εντολές αρχικοποίησης, τις επιλογές εκκίνησης διακομιστή και τη λειτουργία δοκιμών.

1. Προαπαιτούμενα & Απαιτήσεις Συστήματος

  • Python 3.10+ (Υποστηρίζονται πλήρως οι εκδόσεις Python 3.11, 3.12, 3.13, 3.14)
  • Git (για την κλωνοποίηση του αποθετηρίου)
  • Πρόγραμμα περιήγησης Web (Edge, Chrome, Firefox, Safari) ή Edge WebView2 (για λειτουργία desktop GUI)

2. Απαραίτητα Αρχεία & Στοιχεία

Πριν την εκκίνηση, βεβαιωθείτε ότι υπάρχουν τα παρακάτω βασικά αρχεία στον κατάλογο του έργου:

  • requirements.txt — Εξαρτήσεις πακέτων Python
  • .env.example — Πρότυπο αρχείο ρυθμίσεων περιβάλλοντος
  • src/diagflow/main.py — Σημείο εισόδου διακομιστή FastAPI & διαδρομές REST API
  • src/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

3. Εντολές Τερματικού Βήμα-προς-Βήμα

Βήμα 1: Κλωνοποίηση Αποθετηρίου & Δημιουργία Εικονικού Περιβάλλοντος
# Κλωνοποίηση αποθετηρίου
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/activate
Βήμα 2: Εγκατάσταση Εξαρτήσεων
python -m pip install --upgrade pip
pip install -r requirements.txt
Βήμα 3: Δημιουργία Αρχείου Περιβάλλοντος (.env)
# Αντιγραφή προτύπου περιβάλλοντος
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
Βήμα 4: Αρχικοποίηση Βάσεων Δεδομένων & Δοκιμαστικών Δεδομένων
# Ορισμός 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.py

Note

Σημείωση Ασφάλειας & Ιδιωτικότητας: Τα πρωτογενή αρχεία SQL που περιέχουν πραγματικά δεδομένα (db/init_diagflow.sql και db/init_mock_slis.sql) εξαιρούνται ρητά από το .gitignore ώστε να μην ανεβαίνουν ποτέ ευαίσθητα δεδομένα στο GitHub. Τα scripts αρχικοποίησης (create_diagflow_db.py & seed_mock_db.py) ανιχνεύουν αυτόματα αν λείπουν τα πρωτογενή αρχεία και χρησιμοποιούν ως fallback τα ανωνυμοποιημένα πρότυπα από το db/templates/.

Βήμα 5: Εκκίνηση Εφαρμογής
Επιλογή Α: Διακομιστής Ανάπτυξης Web (Uvicorn + Hot Reloading)

Εκτελεί το FastAPI στο localhost με αυτόματη ανανέωση κώδικα:

$env:PYTHONPATH="src"
uvicorn diagflow.main:app --reload --host 127.0.0.1 --port 8000

Πρόσβαση στις σελίδες μέσω browser:

Επιλογή Β: Παράθυρο Εφαρμογής Desktop GUI (pywebview Launcher)

Εκκινεί την εφαρμογή σε αυτόνομο παράθυρο Windows desktop:

$env:PYTHONPATH="src"
python src/diagflow/launcher.py
Επιλογή Γ: Κατασκευή & Εκτέλεση Εκτελέσιμου Αρχείου (DiagFlow.exe)

Δημιουργεί και εκτελεί το αυτόνομο αρχείο .exe:

python scripts/build_exe.py
.\dist\DiagFlow.exe
Βήμα 6: Εκτέλεση Αυτοματοποιημένων Δοκιμών (Pytest)
$env:PYTHONPATH="src"
python -m pytest

Επιλογή Β: Δημιουργία και Εκτέλεση Αυτόνομου Desktop EXE

1. Κατασκευή Executable

python scripts/build_exe.py

Παράγει: dist/DiagFlow.exe

2. Εκτέλεση Desktop App

.\dist\DiagFlow.exe

Εκκινεί αυτόματα τον FastAPI server στη θύρα 8080 και ανοίγει το Dashboard σε παράθυρο desktop.


📦 Ανάπτυξη σε Άλλο PC

1. Ανάπτυξη Αυτόνομου EXE (Παραγωγή / Τελικοί Χρήστες):

  1. Λήψη Εκτελέσιμου: Κατεβάστε το DiagFlow.exe απευθείας από τη σελίδα GitHub Releases του αποθετηρίου (ή αντιγράψτε το αρχείο dist/DiagFlow.exe που δημιουργήσατε).
  2. Ρύθμιση Αρχείου .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
  3. Δεν Χρειάζεται Φάκελος db/ στην Παραγωγή: Όταν το DiagFlow συνδέεται στον Κεντρικό MSSQL Server, επικοινωνεί απευθείας με τους πίνακες df_* και τους πίνακες του Slis μέσω του δικτύου LAN. ΔΕΝ χρειάζεται να αντιγράψετε ή να συμπεριλάβετε φάκελο db/.
  4. Εκτέλεση: Κάντε διπλό κλικ στο DiagFlow.exe. Η εφαρμογή εκκινεί άμεσα σε αυτόνομο παράθυρο desktop πλήρους οθόνης.

2. Λειτουργία Δοκιμών Εκτός Δικτύου (Mock Data Mode):

  • Αυτόματη Δημιουργία Φακέλου 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

3. Ανάπτυξη Web Server (Για Πρόσβαση μέσω Browser στο Δίκτυο):

  1. Αντιγράψτε τον πηγαίο κώδικα του έργου στον υπολογιστή-διακομιστή.
  2. Εγκαταστήστε Python 3.11+ και εκτελέστε pip install -r requirements.txt.
  3. Ορίστε APP_HOST=0.0.0.0 και APP_PORT=8000 στο .env.
  4. Εκτελέστε uvicorn diagflow.main:app --host 0.0.0.0 --port 8000.
  5. Άλλοι υπολογιστές στο τοπικό δίκτυο μπορούν να συνδεθούν στο dashboard μέσω http://<IP_ΔΙΑΚΟΜΙΣΤΗ>:8000.

📊 Αρχιτεκτονική Βάσης Δεδομένων & Σχήματα

1. Σχήμα Κεντρικής Βάσης MSSQL (Πίνακες df_*)

Στην παραγωγή, όλη η διαμόρφωση του 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)

2. Πίνακες & Stored Procedures του Slis (MSSQL)

Αντικείμενο Τύπος Περιγραφή Βασικές Στήλες / Παράμετροι
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

3. Δοκιμαστική Βάση Mock (Περιβάλλον Ανάπτυξης Εκτός Δικτύου)

Όταν εκτελείται τοπικά με USE_MOCK_SLIS_DB=true, το DiagFlow χρησιμοποιεί αυτόματα δημιουργούμενες βάσεις SQLite (mock_slis.db για εξετάσεις και diagflow.db για ρυθμίσεις) που αντικατοπτρίζουν το παραπάνω σχήμα για δοκιμές χωρίς σύνδεση στο δίκτυο του νοσοκομείου.


⚙️ Ρύθμιση και Περιβαλλοντικές Παράμετροι

Οι ρυθμίσεις του συστήματος διαχειρίζονται μέσω του αρχείου παραμέτρων .env:

Μεταβλητές Περιβάλλοντος .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).

📡 Αναφορά API

Όλα τα 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 — Δυναμική ενημέρωση βαρών βαθμολόγησης σε πραγματικό χρόνο και στη βάση.

🔄 Συγχρονισμός Slis & Αναζήτηση

  • 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) με καταγραφή ελέγχου.

👨‍⚕️ Διαγνωστές, Γιατροί & Dashboard

  • GET /api/diagnosticians — Λίστα ενεργών διαγνωστών με πρόοδο ημερήσιων ορίων και στατιστικά CT/MRI.
  • GET /api/doctors — Αναζήτηση και λίστα γιατρών με σελιδοποίηση.
  • GET /api/dashboard — Συνοπτικά στατιστικά και αναλυτικά δεδομένα για το dashboard γραμματείας.
  • GET /api/pamakristos/oncall — Σημερινός εφημερεύων διαγνώστης Παμμακαρίστου.
  • GET /api/pamakristos/schedule — Εβδομαδιαίο πρόγραμμα εφημεριών Παμμακαρίστου.
  • POST /api/pamakristos/oncall — Ορισμός χειροκίνητου εφημερεύοντος για συγκεκριμένη ημερομηνία.

🔐 Admin Panel (Απαιτεί X-Admin-Token & Ενεργή Συνεδρία)

  • 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/                   # Στιγμιότυπα διεπαφής χρήστη

📐 Διαγράμματα Αρχιτεκτονικής PlantUML

Διάγραμμα Αρχείο Πηγής Περιγραφή
Αρχιτεκτονική Συστήματος 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 σταδίων.

📸 Στιγμιότυπα Οθόνης

🖥️ Dashboard Γραμματείας

Αρχική Οθόνη (Καρτέλα Εκκρεμών — Bright Mode) Αρχική Οθόνη (Καρτέλα Εκκρεμών — Dark Mode)
Αρχική 1 Αρχική 2
Επισκόπηση Dashboard & Κατανομή Modality Αυτόματες Αναθέσεις (Καρτέλα Ανατεθέντων)
Dashboard Αυτόματη Ανάθεση
Φιλτράρισμα και Αναζήτηση Πολλαπλή Επιλογή & Μπάρα Ενεργειών
Φιλτράρισμα Πολλαπλή Επιλογή
Αναζήτηση Slis & Επανάθεση Διαγνώστη (4η Καρτέλα) Επιβεβαίωση Επανάθεσης στο Slis
Αναζήτηση Slis Επιβεβαίωση Αλλαγής

🧮 Μηχανή Κανόνων και Βαθμολόγηση

Παράθυρο Εναλλακτικών & Επιλεξιμότητας Ανάλυση Συστήματος Βαθμολόγησης
Εναλλακτικές Σύστημα Βαθμολόγησης
Λεπτομέρεια Βαθμολογίας ανά Παράγοντα Διάγραμμα Ροής Λήψης Απόφασης Ανάθεσης
Βαθμολόγηση Ροή

🔐 Admin Control Panel

Διαχείριση Διαγνωστών & Ημερήσια Όρια Ημερολόγιο Διαθεσιμότητας & Άδειες
Admin Διαγνωστές Admin Διαθεσιμότητα
Μήτρα Χωρητικότητας & Εξειδικεύσεων (Θολή) Μήτρα Εξειδικεύσεων (Προτιμήσεις & Αποκλεισμοί)
Admin Εξειδικεύσεις 1 Admin Εξειδικεύσεις 2
Διαχείριση Μήτρας Εξειδικεύσεων & Φίλτρα Συνεργασίες & Αποκλειστικότητες Γιατρών
Admin Εξειδικεύσεις 3 Admin Συνεργασίες
Πρόγραμμα & Εφημερίες Παμμακαρίστου Κατάλογος Εξετάσεων & Ανατομικές Ομάδες
Admin Παμμακάριστος Admin Εξετάσεις 1
Επεξεργαστής Δυναμικών Κανόνων Δρομολόγησης Αποκλειστικά Εργαστήρια & Όρια Modality
Admin Προχωρημένα 1 Admin Προχωρημένα 2
Επεξεργαστής Βαρών Βαθμολόγησης
Admin Προχωρημένα 3

📄 Άδεια Χρήσης

Εσωτερικό ιδιόκτητο λογισμικό — Κοσμοϊατρική © 2026. Με επιφύλαξη παντός δικαιώματος.


DiagFlow Logo      DiagFlow Textbox      DiagFlow Transparent Logo