Trans_for_doctors / common /constants.py
Mintik24's picture
🎉 Полный рефакторинг проекта Medical Transcriber
e275025
"""
Constants and configuration values for Medical Transcriber application.
Centralizes all magic numbers, strings, colors, and paths.
"""
from pathlib import Path
from enum import Enum
# ============================================================================
# PROJECT PATHS
# ============================================================================
PROJECT_ROOT = Path(__file__).parent.parent
RESULTS_DIR = PROJECT_ROOT / "results"
REPORTS_DIR = RESULTS_DIR / "reports"
LOGS_DIR = PROJECT_ROOT / "logs"
# ============================================================================
# UI COLORS (RGB HEX)
# ============================================================================
class UIColors:
"""UI color palette."""
PRIMARY_GREEN = "#4CAF50"
HOVER_GREEN = "#45a049"
DISABLED_GRAY = "#cccccc"
TEXT_DARK = "#333333"
TEXT_LIGHT = "#f5f5f5"
BORDER_GRAY = "#cccccc"
SUCCESS_GREEN = "#4CAF50"
ERROR_RED = "#f44336"
WARNING_ORANGE = "#ff9800"
INFO_BLUE = "#2196F3"
# ============================================================================
# UI DIMENSIONS (PIXELS)
# ============================================================================
class UIDimensions:
"""UI dimension constants."""
MAIN_WINDOW_WIDTH = 1200
MAIN_WINDOW_HEIGHT = 800
DIALOG_WIDTH = 500
DIALOG_HEIGHT = 400
MIN_RESULTS_HEIGHT = 200
BUTTON_PADDING = 10
BORDER_RADIUS = 5
GROUP_BOX_MARGIN_TOP = 10
GROUP_BOX_PADDING = 10
# ============================================================================
# FONTS
# ============================================================================
class FontConfig:
"""Font configuration."""
DEFAULT_FONT = "Times New Roman"
DEFAULT_SIZE = 12
HEADING_SIZE = 14
TITLE_SIZE = 14
MONOSPACE_FONT = "Courier New"
# ============================================================================
# AUDIO FORMATS
# ============================================================================
class AudioFormats:
"""Supported audio formats."""
SUPPORTED_EXTENSIONS = [".wav", ".mp3", ".m4a", ".flac", ".ogg"]
FILE_DIALOG_FILTER = "Audio Files (*.wav *.mp3 *.m4a);;All Files (*)"
# ============================================================================
# MODEL CONFIGURATIONS
# ============================================================================
class ModelDefaults:
"""Default model configurations."""
WHISPER_DEVICE = "auto"
WHISPER_DTYPE = "float32"
WHISPER_LANGUAGE = "russian"
OPENAI_MODEL = "gpt-4o"
OPENROUTER_MODEL = "google/gemini-3-flash-preview"
TEMPERATURE = 0.1
MAX_TOKENS = 4000
# ============================================================================
# API SETTINGS
# ============================================================================
class APISettings:
"""API configuration settings."""
OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
API_TIMEOUT = 120
MAX_RETRIES = 3
RETRY_DELAY = 2
RATE_LIMIT_DELAY = 5
# ============================================================================
# LOGGING
# ============================================================================
class LoggingConfig:
"""Logging configuration."""
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
LOG_LEVEL = "INFO"
LOG_FILE_FORMAT = "transcription_{timestamp}.log"
# ============================================================================
# MESSAGES
# ============================================================================
class Messages:
"""UI message strings."""
# Errors
ERROR_NO_AUDIO_FILE = "Пожалуйста, выберите аудиофайл!"
ERROR_FILE_NOT_FOUND = "Файл не найден"
ERROR_NO_PATIENT_DATA = "Для создания отчёта необходимо заполнить данные пациента!"
ERROR_INVALID_CONFIG = "Ошибка при создании конфига"
ERROR_TRANSCRIPTION_FAILED = "Ошибка обработки"
ERROR_API_KEY_REQUIRED = "OpenRouter API ключ не найден"
# Warnings
WARNING_TITLE = "Внимание"
# Success
SUCCESS_TITLE = "Успешно"
SUCCESS_TRANSCRIPTION = "Транскрибирование завершено!"
SUCCESS_SETTINGS_SAVED = "Настройки сохранены!"
# Status
STATUS_READY = "Готов к обработке"
STATUS_INITIALIZING = "Инициализация пайплайна..."
STATUS_TRANSCRIBING = "Запуск транскрибирования..."
STATUS_COMPLETED = "Обработка завершена!"
STATUS_PATIENT_NOT_FILLED = "Данные пациента не заполнены"
STATUS_PATIENT_FILLED = "Пациент: "
# Buttons
BTN_START = "▶ Начать транскрибирование"
BTN_CLEAR = "🗑 Очистить результаты"
BTN_BROWSE = "Обзор..."
BTN_SAVE = "💾 Сохранить настройки"
BTN_OK = "OK"
BTN_CANCEL = "Отмена"
# Tabs
TAB_TRANSCRIPTION = "Транскрибирование"
TAB_SETTINGS = "Настройки"
# Groups
GROUP_AUDIO_FILE = "1. Выбор аудиофайла"
GROUP_PATIENT_DATA = "2. Данные пациента"
GROUP_OPTIONS = "3. Опции обработки"
GROUP_STATUS = "4. Статус обработки"
GROUP_RESULTS = "5. Результаты"
GROUP_WHISPER_MODEL = "Модель Whisper"
GROUP_OPENROUTER_API = "OpenRouter API (для LLM-коррекции)"
GROUP_MEDICAL_TERMS = "База медицинских терминов"
# ============================================================================
# DATA VALIDATION
# ============================================================================
class ValidationRules:
"""Data validation rules."""
MIN_AUDIO_DURATION = 0.1 # seconds
MAX_AUDIO_DURATION = 3600 # seconds (1 hour)
MIN_TEXT_LENGTH = 10 # characters
MAX_TEXT_LENGTH = 1000000 # characters
# ============================================================================
# FILE OPERATIONS
# ============================================================================
class FileDefaults:
"""File operation defaults."""
TIMESTAMP_FORMAT = "%Y%m%d_%H%M%S"
JSON_INDENT = 2
ENCODING = "utf-8"
FILE_PERMISSIONS = 0o644
# ============================================================================
# PLACEHOLDERS
# ============================================================================
class Placeholders:
"""UI placeholder text."""
AUDIO_FILE_NOT_SELECTED = "Аудиофайл не выбран"
PATIENT_NAME = "Фамилия Имя Отчество"
PATIENT_DOB = "ДД.MM.YYYY"
STUDY_AREA = "Область исследования (напр. МРТ головы)"
STUDY_NUMBER = "Номер исследования"
STUDY_DATE = "ДД.MM.YYYY"
DOCTOR_NAME = "ФИО врача"
API_KEY = "Введите ваш API ключ OpenRouter"
RESULTS_PLACEHOLDER = "Результаты обработки появятся здесь"
MODEL_PATH = "Путь к папке с моделью Whisper"
TERMS_FILE = "Путь к файлу с медицинскими терминами"
# ============================================================================
# REPORT TEMPLATES
# ============================================================================
class ReportDefaults:
"""Report generation defaults."""
DOCUMENT_TITLE = "Магнитно-резонансная томография"
DEFAULT_FONT_NAME = "Times New Roman"
DEFAULT_FONT_SIZE = 12
HEADING_FONT_SIZE = 14
class ProcessingSteps(Enum):
"""Pipeline processing steps."""
INITIALIZATION = "initialization"
STT = "stt"
KNOWLEDGE_BASE = "knowledge_base"
CORRECTION = "llm_correction"
REPORT_GENERATION = "report_generation"
COMPLETION = "completion"