# Запрос Opus — ревью реализации DrHider Файл: `/home/naeel/nubes/contracts/contracts-flask/History/opus-drhider-review-2026-06-29.md` Дата: 29.06.2026 ## Контекст Написан MVP сервиса обфускации документов. Код в трёх файлах. Нужно ревью: что упущено, что сломается, что улучшить. ## Файлы (все в contracts-flask) 1. **`deploy/services/drhider.py`** — ядро (≈280 строк) 2. **`site/templates/drhider.html`** — страница загрузки 3. **`site/app.py`** — добавлены роуты `/DrHider` и `POST /api/drhider` ## Что реализовано ### Двухпроходная обфускация - **Проход 1 (сбор сущностей):** regex-паттерны (телефон, email, ИНН/ОГРН/КПП, БИК, р/с, к/с, паспорт) + COMPANY_PATTERN (ООО/ЗАО/АО/ИП) + опционально LLM-NER для имён/адресов. - Глобальный словарь `_mapping[оригинал] = замена` обеспечивает согласованность: одна сущность → одна замена во всех файлах. - **Проход 2 (замена):** docx — замена в `paragraphs.runs` и `tables.cells` (python-docx). PDF — read-only через pdfplumber, замена по тексту (без сохранения форматирования — осознанное ограничение MVP). ### Генераторы фиктивных значений - Телефон: `+7 (XXX) XXX-XX-XX` с реальными кодами городов. - Email: `@example.ru` (фиктивные домены). - ИНН/ОГРН: валидные контрольные суммы. - Компании: ООО «<существительное>» из словаря. - ФИО: русские фамилия + инициалы из словарей. - Адреса: город + улица + дом из словарей. - Паспорт: `XX XX XXXXXX`. ### Безопасность - Вся обработка в памяти. - Temp-директория для конвертации `.doc` → `.docx` — удаляется в `finally`. - Никакой БД, никакого логирования реальных данных. - `mapping.csv` — внутри ZIP, уходит пользователю. ### UI - Drag&drop, выбор файлов, прогресс. - Кнопка «Обфусцировать» → POST /api/drhider → скачивание ZIP. ## Вопросы к ревью ### 1. Согласованность замены Сейчас `_mapping` — плоский словарь `строка → строка`. Если в одном файле «Иванов И.И.», а в другом «Иванов Иван Иванович» — это разные ключи, получат разные замены. Как правильно решить? ### 2. PDF MVP: текст из PDF извлекается, заменяется, отдаётся как `.txt` внутри ZIP. Реальное решение — pymupdf (AGPL) или reportlab? Что посоветуешь? ### 3. .doc → .docx конвертация Не реализована в этом MVP — файлы .doc просто читаются как текст. Нужно libreoffice (как в `convert_doc.py`) или есть способ проще? ### 4. LLM-NER Сейчас опционален. Промпт просит JSON-массив сущностей. Не слишком ли медленно для 100+ файлов? Как оптимизировать? ### 5. Замена в docx через runs python-docx разбивает текст на runs. Слово может быть разбито на несколько runs — замена ломается. Как обойти? ### 6. Номера договоров Сейчас НЕ заменяются (нужны для группировки). Но это реальные данные — утечка. Как сделать чтобы были уникальные псевдонимы, но группировка не ломалась? ### 7. Упущенные типы данных Что ещё нужно заменять, чего нет в текущих паттернах? (Колонтитулы? Сноски? Изображения с текстом? Подписи?) ### 8. Архитектура Код в одном файле drhider.py — нормально для MVP или уже пора разбивать? ### 9. Edge cases - Пустой файл? - ZIP с вложенным ZIP? - PDF без текста (сканированный)? - Файл с паролем? ## Ожидаемый ответ По каждому вопросу: **что не так → как исправить → приоритет (MVP/позже/опционально)**.