File size: 6,959 Bytes
b216c95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# Руководство по интеграции модуля Common

## 📋 Обзор

Модуль `common/` содержит общие утилиты для улучшения кода проекта. Он уже создан и документирован, но пока не интегрирован в основной код.

## 🎯 Преимущества интеграции

### 1. **Централизованное управление исключениями**
```python
from common import AudioFileException, ValidationException

try:
    # код обработки аудио
except AudioFileException as e:
    logger.error(f"Ошибка аудиофайла: {e}")
```

### 2. **Единые константы и настройки**
```python
from common import UIColors, Messages, AudioFormats

# Использование в GUI
button.setStyleSheet(f"background-color: {UIColors.PRIMARY}")
error_message = Messages.AUDIO_FILE_ERROR
```

### 3. **Централизованное логирование**
```python
from common import configure_logging, get_logger

# В main.py или run_gui.py
configure_logging()
logger = get_logger(__name__)
```

### 4. **Типизированные модели данных**
```python
from common import PipelineResult, PatientMetadata

result = PipelineResult(
    status="success",
    transcription="...",
    metadata=PatientMetadata(
        patient_name="ФИО",
        patient_dob="дата"
    )
)
```

### 5. **Валидация данных**
```python
from common import Validator, ValidationException

try:
    Validator.validate_audio_file(audio_path)
    Validator.validate_api_key(api_key)
except ValidationException as e:
    # обработка ошибки
```

## 🔄 План поэтапной интеграции

### Этап 1: Логирование (Приоритет: Высокий)
**Файлы для изменения:**
- `app/gui_app.py`
- `pipeline/medical_pipeline.py`
- `corrector/llm_corrector.py`
- `stt/whisper_transcriber.py`

**Изменения:**
```python
# Заменить
import logging
logger = logging.getLogger(__name__)

# На
from common import get_logger
logger = get_logger(__name__)
```

**В точках входа (run_gui.py, app/main.py):**
```python
from common import configure_logging

if __name__ == "__main__":
    configure_logging()
    # остальной код
```

### Этап 2: Исключения (Приоритет: Средний)
**Файлы для изменения:**
- `stt/audio_processor.py`
- `corrector/llm_corrector.py`
- `pipeline/medical_pipeline.py`

**Изменения:**
```python
# Заменить общие исключения
raise ValueError("Некорректный аудиофайл")

# На специфичные
from common import AudioFileException
raise AudioFileException("Некорректный аудиофайл")
```

### Этап 3: Константы UI (Приоритет: Средний)
**Файлы для изменения:**
- `app/gui_app.py`

**Изменения:**
```python
from common import UIColors, UIDimensions, Messages

# Использовать в apply_styles()
style = f"""
    QPushButton {{
        background-color: {UIColors.PRIMARY};
        min-height: {UIDimensions.BUTTON_HEIGHT}px;
    }}
"""
```

### Этап 4: Валидация (Приоритет: Низкий)
**Файлы для изменения:**
- `app/gui_app.py` (валидация пользовательского ввода)
- `pipeline/medical_pipeline.py` (валидация путей)

**Изменения:**
```python
from common import Validator, ValidationException

try:
    Validator.validate_audio_file(audio_path)
    Validator.validate_patient_data(patient_data)
except ValidationException as e:
    # показать ошибку пользователю
```

### Этап 5: Модели данных (Приоритет: Низкий)
**Файлы для изменения:**
- `pipeline/medical_pipeline.py`

**Изменения:**
```python
from common import PipelineResult, PatientMetadata

def process(...) -> PipelineResult:
    # использовать типизированные модели
    return PipelineResult(...)
```

## 🚀 Быстрый старт (минимальная интеграция)

Для быстрого улучшения проекта начните с логирования:

1. **Шаг 1**: Обновите `run_gui.py`:
```python
#!/usr/bin/env python3
import sys
from pathlib import Path

project_root = Path(__file__).parent
if str(project_root) not in sys.path:
    sys.path.insert(0, str(project_root))

# Добавить централизованное логирование
from common import configure_logging

if __name__ == "__main__":
    configure_logging()  # Настроить логирование
    from app.gui_app import main
    main()
```

2. **Шаг 2**: В `app/gui_app.py` замените стандартный logger:
```python
# Было:
import logging
logger = logging.getLogger(__name__)

# Стало:
from common import get_logger
logger = get_logger(__name__)
```

3. **Шаг 3**: Повторите для остальных файлов

## 📝 Проверка интеграции

После интеграции проверьте:

1. **Логирование работает**:
   - Логи появляются в папке `logs/`
   - Формат логов единообразный
   - Уровни логирования корректны

2. **Исключения корректны**:
   - Специфичные исключения вместо общих
   - Правильная обработка ошибок

3. **UI консистентен**:
   - Единые цвета и размеры
   - Единообразные сообщения

## ⚠️ Важные замечания

1. **Обратная совместимость**: Интеграция не ломает существующий код
2. **Постепенность**: Можно интегрировать по одному модулю
3. **Тестирование**: После каждого этапа проверяйте работоспособность
4. **Документация**: Обновляйте комментарии при изменениях

## 🔗 Связанные файлы

- [APP_ARCHITECTURE.md](APP_ARCHITECTURE.md) - Архитектура приложения
- [common/__init__.py](common/__init__.py) - Экспорты модуля
- [FILES_REFACTORED.md](FILES_REFACTORED.md) - Документация по рефакторингу

---

**Статус модуля**: ✅ Готов к интеграции
**Рекомендация**: Начните с логирования (Этап 1), затем постепенно добавляйте остальные модули