# Opus — ревью кода DrHider v0.1 29.06.2026 ## Файлы для ревью ``` /home/naeel/nubes/contracts/contracts-flask/deploy/services/drhider.py /home/naeel/nubes/contracts/contracts-flask/site/app.py /home/naeel/nubes/contracts/contracts-flask/site/templates/drhider.html ``` ## Что делает Загрузка .docx/.pdf/.doc/.zip → обфускация чувствительных данных → ZIP с обезличенными файлами + mapping.csv. Без БД, всё в памяти. ## Ключевые моменты для проверки 1. **`_expand_zips`**: распаковка вложенных ZIP, cp437→utf-8, path traversal, лимиты 500 файлов/500MB 2. **`_scan_regex`**: regex-паттерны для телефонов/email/ИНН/ОГРН/компаний. Не ловит ли лишнего? (например passport-паттерн матчит числа) 3. **`_apply_replacements`**: замена по сортированным ключам. Не заменит ли подстроку внутри другого слова? 4. **`_replace_in_docx`**: замена в `paragraphs.runs` и `tables`. Что если слово разбито на несколько runs? 5. **`_replace_in_text`**: PDF отдаётся как plain text — теряется форматирование. Нормально для MVP? 6. **Генераторы фиктивных данных**: валидные контрольные суммы ИНН/ОГРН, словари ФИО/городов 7. **Обработка ошибок**: `try/except` в `_expand_zips`, `_scan_llm_ner`. Не глотаются ли ошибки молча? 8. **Безопасность**: удаление tempdir в `finally`, очистка `_mapping`, нет логов с реальными данными 9. **Потенциальные баги**: использовал переменную `inner_name` вместо `name` (уже исправлено). Есть ли ещё такие? ## Код Читай файлы по абсолютным путям выше.