245 lines
8.4 KiB
Python
245 lines
8.4 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
"""
|
||
|
|
Konfigurationskonstanten und Prompt-Strings für KG-Diktat Desktop.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import os
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
_APPDATA_FOLDER_NAME = "AZA Desktop"
|
||
|
|
|
||
|
|
_writable_data_dir_cache = None
|
||
|
|
|
||
|
|
|
||
|
|
def get_writable_data_dir() -> str:
|
||
|
|
"""Writable directory for ALL user config/data files.
|
||
|
|
|
||
|
|
Frozen (installed to Program Files): %APPDATA%/AZA Desktop
|
||
|
|
Dev (running from source): directory containing this file
|
||
|
|
"""
|
||
|
|
global _writable_data_dir_cache
|
||
|
|
if _writable_data_dir_cache is not None:
|
||
|
|
return _writable_data_dir_cache
|
||
|
|
|
||
|
|
if getattr(sys, "frozen", False):
|
||
|
|
appdata = os.environ.get("APPDATA")
|
||
|
|
if appdata:
|
||
|
|
d = os.path.join(appdata, _APPDATA_FOLDER_NAME)
|
||
|
|
else:
|
||
|
|
d = os.path.join(str(Path.home()), "AppData", "Roaming", _APPDATA_FOLDER_NAME)
|
||
|
|
os.makedirs(d, exist_ok=True)
|
||
|
|
_writable_data_dir_cache = d
|
||
|
|
else:
|
||
|
|
_writable_data_dir_cache = os.path.dirname(os.path.abspath(__file__))
|
||
|
|
|
||
|
|
return _writable_data_dir_cache
|
||
|
|
|
||
|
|
|
||
|
|
# ─── Modelle ───
|
||
|
|
TRANSCRIBE_MODEL = "gpt-4o-mini-transcribe"
|
||
|
|
DEFAULT_SUMMARY_MODEL = "gpt-5.2"
|
||
|
|
ALLOWED_SUMMARY_MODELS = ["gpt-5.2", "gpt-5-mini", "gpt-5-nano"]
|
||
|
|
|
||
|
|
MODEL_LABELS = {
|
||
|
|
"gpt-5.2": 'schnell ("teures" KI)',
|
||
|
|
"gpt-5-mini": "mittleres KI",
|
||
|
|
"gpt-5-nano": "langsameres (günstigeres KI)",
|
||
|
|
}
|
||
|
|
|
||
|
|
# ─── Config-Dateinamen ───
|
||
|
|
CONFIG_FILENAME = "kg_diktat_config.txt"
|
||
|
|
WINDOW_CONFIG_FILENAME = "kg_diktat_window.txt"
|
||
|
|
SIGNATURE_CONFIG_FILENAME = "kg_diktat_signature.txt"
|
||
|
|
KORREKTUREN_CONFIG_FILENAME = "kg_diktat_korrekturen.json"
|
||
|
|
ABLAGE_BASE_DIR = "kg_diktat_ablage"
|
||
|
|
ABLAGE_SUBFOLDERS = ("KG", "Briefe", "Rezepte", "Kostengutsprachen", "Diktat", "Transkript")
|
||
|
|
ABLAGE_LABELS = {
|
||
|
|
"KG": "KG",
|
||
|
|
"Briefe": "Brief",
|
||
|
|
"Rezepte": "Rezept",
|
||
|
|
"Kostengutsprachen": "KOGU",
|
||
|
|
"Diktat": "Diktat",
|
||
|
|
"Transkript": "Transkript",
|
||
|
|
}
|
||
|
|
PRUEFEN_WINDOW_CONFIG_FILENAME = "kg_diktat_pruefen_window.txt"
|
||
|
|
ORDNER_WINDOW_CONFIG_FILENAME = "kg_diktat_ordner_window.txt"
|
||
|
|
TEXT_WINDOW_CONFIG_FILENAME = "kg_diktat_text_window.txt"
|
||
|
|
DIKTAT_WINDOW_CONFIG_FILENAME = "kg_diktat_diktat_window.txt"
|
||
|
|
DISKUSSION_WINDOW_CONFIG_FILENAME = "kg_diktat_diskussion_window.txt"
|
||
|
|
SETTINGS_WINDOW_CONFIG_FILENAME = "kg_diktat_settings_window.txt"
|
||
|
|
TEXTBLOECKE_CONFIG_FILENAME = "kg_diktat_textbloecke.json"
|
||
|
|
TEMPLATES_CONFIG_FILENAME = "kg_diktat_templates.txt"
|
||
|
|
OP_BERICHT_TEMPLATE_CONFIG_FILENAME = "kg_diktat_op_bericht_template.txt"
|
||
|
|
ARZTBRIEF_VORLAGE_CONFIG_FILENAME = "kg_diktat_arztbrief_vorlage.txt"
|
||
|
|
TODO_CONFIG_FILENAME = "kg_diktat_todos.json"
|
||
|
|
TODO_WINDOW_CONFIG_FILENAME = "kg_diktat_todo_window.txt"
|
||
|
|
TODO_INBOX_CONFIG_FILENAME = "kg_diktat_todo_inbox.json"
|
||
|
|
TODO_SETTINGS_CONFIG_FILENAME = "kg_diktat_todo_settings.json"
|
||
|
|
NOTES_CONFIG_FILENAME = "kg_diktat_notes.json"
|
||
|
|
CHECKLIST_CONFIG_FILENAME = "kg_diktat_checklists.json"
|
||
|
|
USER_PROFILE_CONFIG_FILENAME = "kg_diktat_user_profile.json"
|
||
|
|
OPACITY_CONFIG_FILENAME = "kg_diktat_opacity.txt"
|
||
|
|
AUTOTEXT_CONFIG_FILENAME = "kg_diktat_autotext.json"
|
||
|
|
FONT_SCALE_CONFIG_FILENAME = "kg_diktat_font_scale.txt"
|
||
|
|
BUTTON_SCALE_CONFIG_FILENAME = "kg_diktat_button_scale.txt"
|
||
|
|
TOKEN_USAGE_CONFIG_FILENAME = "kg_diktat_token_usage.txt"
|
||
|
|
KG_DETAIL_LEVEL_CONFIG_FILENAME = "kg_diktat_detail_level.txt"
|
||
|
|
SOAP_SECTION_LEVELS_CONFIG_FILENAME = "kg_diktat_soap_section_levels.json"
|
||
|
|
FONT_SIZES_CONFIG_FILENAME = "text_font_sizes.json"
|
||
|
|
PANED_POSITIONS_CONFIG_FILENAME = "paned_positions.json"
|
||
|
|
KOGU_GRUSS_CONFIG_FILENAME = "kg_diktat_kogu_gruss.txt"
|
||
|
|
KOGU_TEMPLATES_CONFIG_FILENAME = "kg_diktat_kogu_templates.txt"
|
||
|
|
DISKUSSION_VORLAGE_CONFIG_FILENAME = "kg_diktat_diskussion_vorlage.txt"
|
||
|
|
BRIEF_STYLE_PROFILES_FILENAME = "kg_diktat_brief_style_profiles.json"
|
||
|
|
|
||
|
|
# ─── Opacity / Font / Button Scale Defaults ───
|
||
|
|
DEFAULT_OPACITY = 1.0
|
||
|
|
MIN_OPACITY = 0.4
|
||
|
|
FIXED_FONT_SCALE = 0.6
|
||
|
|
FIXED_BUTTON_SCALE = 1.4
|
||
|
|
DEFAULT_FONT_SCALE = FIXED_FONT_SCALE
|
||
|
|
MIN_FONT_SCALE = FIXED_FONT_SCALE
|
||
|
|
MAX_FONT_SCALE = FIXED_FONT_SCALE
|
||
|
|
DEFAULT_BUTTON_SCALE = FIXED_BUTTON_SCALE
|
||
|
|
MIN_BUTTON_SCALE = FIXED_BUTTON_SCALE
|
||
|
|
MAX_BUTTON_SCALE = FIXED_BUTTON_SCALE
|
||
|
|
OPTIMAL_FONT_SCALE = FIXED_FONT_SCALE
|
||
|
|
OPTIMAL_BUTTON_SCALE = FIXED_BUTTON_SCALE
|
||
|
|
|
||
|
|
# ─── Fenster-Defaults ───
|
||
|
|
DEFAULT_WINDOW_WIDTH = 850
|
||
|
|
DEFAULT_WINDOW_HEIGHT = 920
|
||
|
|
|
||
|
|
# ─── SOAP ───
|
||
|
|
_SOAP_SECTIONS = ("A", "S", "O", "B", "D", "T", "P")
|
||
|
|
_SOAP_LABELS = {"A": "Anamnese", "S": "Subjektiv", "O": "Objektiv", "B": "Beurteilung", "D": "Diagnose", "T": "Therapie", "P": "Procedere"}
|
||
|
|
SOAP_ORDER_CONFIG_FILENAME = "kg_diktat_soap_order.json"
|
||
|
|
SOAP_VISIBILITY_CONFIG_FILENAME = "kg_diktat_soap_visibility.json"
|
||
|
|
SOAP_PRESETS_CONFIG_FILENAME = "kg_diktat_soap_presets.json"
|
||
|
|
DEFAULT_SOAP_ORDER = ["A", "S", "O", "B", "D", "T", "P"]
|
||
|
|
NUM_SOAP_PRESETS = 3
|
||
|
|
|
||
|
|
# ─── Brief-Abschnitts-Profile ───
|
||
|
|
BRIEF_PRESETS_CONFIG_FILENAME = "kg_diktat_brief_presets.json"
|
||
|
|
NUM_BRIEF_PRESETS = 3
|
||
|
|
|
||
|
|
BRIEF_PROFILE_DEFAULTS = [
|
||
|
|
{
|
||
|
|
"name": "Arztbrief",
|
||
|
|
"order": ["DI", "AN", "BF", "BE", "TP"],
|
||
|
|
"labels": {
|
||
|
|
"DI": "Diagnosen",
|
||
|
|
"AN": "Anamnese",
|
||
|
|
"BF": "Befunde",
|
||
|
|
"BE": "Beurteilung",
|
||
|
|
"TP": "Therapie / Procedere",
|
||
|
|
},
|
||
|
|
"visibility": {"DI": True, "AN": True, "BF": True, "BE": True, "TP": True},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "Spitalarztbrief",
|
||
|
|
"order": ["DI", "ZF", "EP", "AE", "BF", "VL", "TA", "MA", "PE"],
|
||
|
|
"labels": {
|
||
|
|
"DI": "Diagnosen",
|
||
|
|
"ZF": "Zusammenfassung",
|
||
|
|
"EP": "Epikrise",
|
||
|
|
"AE": "Anamnese bei Eintritt",
|
||
|
|
"BF": "Befunde",
|
||
|
|
"VL": "Verlauf",
|
||
|
|
"TA": "Therapie im Aufenthalt",
|
||
|
|
"MA": "Medikation bei Austritt",
|
||
|
|
"PE": "Procedere / Empfehlungen",
|
||
|
|
},
|
||
|
|
"visibility": {k: True for k in ["DI", "ZF", "EP", "AE", "BF", "VL", "TA", "MA", "PE"]},
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "Einfach",
|
||
|
|
"order": ["DI", "BF", "BE", "TH"],
|
||
|
|
"labels": {
|
||
|
|
"DI": "Diagnose",
|
||
|
|
"BF": "Befund",
|
||
|
|
"BE": "Beurteilung",
|
||
|
|
"TH": "Therapie",
|
||
|
|
},
|
||
|
|
"visibility": {"DI": True, "BF": True, "BE": True, "TH": True},
|
||
|
|
},
|
||
|
|
]
|
||
|
|
|
||
|
|
# ─── KOGU Gruss ───
|
||
|
|
KOGU_GRUSS_OPTIONS = [
|
||
|
|
"Mit freundlichen Grüssen",
|
||
|
|
"Freundliche Grüsse",
|
||
|
|
"Mit freundlichen Grüssen und besten Wünschen",
|
||
|
|
"Hochachtungsvoll",
|
||
|
|
]
|
||
|
|
|
||
|
|
# ─── Korrekturen Defaults ───
|
||
|
|
_DEFAULT_KORREKTUREN = {
|
||
|
|
"diagnosen": {
|
||
|
|
"gesamte lassen": "Xanthelasma",
|
||
|
|
"Gesamtlassen": "Xanthelasma",
|
||
|
|
"Xanthel Asma": "Xanthelasma",
|
||
|
|
"Xantel Asma": "Xanthelasma",
|
||
|
|
"gesamte Lasma": "Xanthelasma",
|
||
|
|
"Aktin ische": "Aktinische",
|
||
|
|
"Kerato Akanthom": "Keratoakanthom",
|
||
|
|
"Basalzell Karzinom": "Basalzellkarzinom",
|
||
|
|
"Platte Nepithel": "Plattenepithel",
|
||
|
|
},
|
||
|
|
"medikamente": {},
|
||
|
|
}
|
||
|
|
|
||
|
|
# ─── Arztbrief Vorlage Default ───
|
||
|
|
ARZTBRIEF_VORLAGE_DEFAULT = """Reihenfolge: 1. Diagnose, 2. Anlass, 3. Befunde, 4. Empfehlung, Therapie
|
||
|
|
|
||
|
|
Ordne den Arztbrief zwingend nach obiger Reihenfolge. Jeder Abschnitt mit eigener Überschrift (z. B. Diagnose:, Anlass:, Befunde:, Therapie:). Fehlende Abschnitte weglassen. Keine Sternchen (*). Diagnosen mit ICD-10-Code beibehalten."""
|
||
|
|
|
||
|
|
# ─── KG-Kommentar-Keywords ───
|
||
|
|
COMMENT_KEYWORDS = (
|
||
|
|
"ärztlich zu prüfen",
|
||
|
|
"wirkstoff nicht genannt",
|
||
|
|
"kontrolle",
|
||
|
|
"vorsicht",
|
||
|
|
"warnung",
|
||
|
|
"weiterverordnung",
|
||
|
|
"überprüfung",
|
||
|
|
"blutkontrolle",
|
||
|
|
"leberwerte",
|
||
|
|
"red flag",
|
||
|
|
"interaktion",
|
||
|
|
"nebenwirkung",
|
||
|
|
"kontraindikation",
|
||
|
|
"aufklärung",
|
||
|
|
)
|
||
|
|
|
||
|
|
# ─── Cloud-Sync ───
|
||
|
|
_SUPABASE_URL = "https://cqbqkejdlxesxjdtkpfr.supabase.co"
|
||
|
|
_SUPABASE_ANON_KEY = "sb_publishable_r8YMw01FF-fYD9vHLnz7FQ_d8mhpVVQ"
|
||
|
|
|
||
|
|
# ─── Aktivierung / Ablauf ───
|
||
|
|
APP_HARD_EXPIRY = "2027-03-31"
|
||
|
|
APP_TRIAL_DAYS = 21
|
||
|
|
ACTIVATION_CONFIG_FILENAME = "kg_diktat_activation.json"
|
||
|
|
ACTIVATION_HMAC_SECRET = "AZA-Praxis-2026-xK9mQ7"
|
||
|
|
|
||
|
|
# ─── Token-Guthaben / Kapazität ───
|
||
|
|
DEFAULT_TOKEN_QUOTA = 500_000
|
||
|
|
SOFT_LOCK_THRESHOLD = 5_000
|
||
|
|
AVG_TOKENS_PER_REPORT = 3_000
|
||
|
|
|
||
|
|
# ─── Launcher ───
|
||
|
|
LAUNCHER_CONFIG_FILENAME = "kg_diktat_launcher.json"
|
||
|
|
LAUNCHER_MODULES = ["ki", "kg", "notizen", "translator", "medwork_chat", "praxis_chat"]
|
||
|
|
LAUNCHER_MODULE_LABELS = {
|
||
|
|
"ki": "KI-Assistent",
|
||
|
|
"kg": "Krankengeschichte",
|
||
|
|
"notizen": "Audio-Notizen",
|
||
|
|
"translator": "Übersetzer",
|
||
|
|
"medwork_chat": "Ärzte-Netzwerk",
|
||
|
|
"praxis_chat": "Praxis-Intern",
|
||
|
|
}
|
||
|
|
|
||
|
|
# ─── Globale Liste aller offenen Fenster für Skalierung ───
|
||
|
|
_ALL_WINDOWS = []
|