Files
aza/AzA march 2026 - Kopie (16)/aza_config.py
2026-04-19 20:41:37 +02:00

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 = []