# План v3 — универсальная архитектура (2026-07-12) ## Цель Убрать жёсткую привязку к фиксированному списку типов сущностей. Перейти на Markdown как внутренний формат. ## Изменения по модулям ### 1. `scanner.py` — универсальный LLM-промпт - Убрать список типов из промпта - LLM сама называет типы (snake_case) - `value` — verbatim из текста ### 2. `generators/` — fallback-генератор - Новый `fallback.py`: character-class preserving замена - `__init__.py`: добавить в ENTITY_GENERATORS - `obfuscator.py`: использовать fallback для неизвестных типов ### 3. `extractor.py` — единый MD-пайплайн - DOCX → MD (python-docx: стили, форматирование) - PDF → MD (pdfplumber: текст + таблицы) - TXT → как есть - Убрать convert_pdfs_to_docx (не нужен) - Убрать хранение docx-объектов ### 4. `replacer.py` — упростить - `apply_replacements(text)` — уже есть - `replace_in_docx(doc, mapping)` — сохранить как утилиту для DOCX-выхода - Удалить `replace_in_text()` (заменяется на apply_replacements) ### 5. `obfuscator.py` — обновить пайплайн - Pass 1: extract MD → scan_regex + scan_llm_ner - Pass 2: apply_replacements к MD - Опционально: replace_in_docx к оригинальному DOCX ### 6. `api_bp.py` — output_format - Параметр `output_format: "md" | "docx"` (по умолчанию md) ### 7. `.doc` — потом - Добавим convert_doc_to_docx через LibreOffice отдельно ## Порядок реализации 1. `generators/fallback.py` + обновить `__init__.py` 2. `scanner.py` — новый промпт 3. `extractor.py` — MD-конвертация 4. `replacer.py` — упростить 5. `obfuscator.py` — новый пайплайн 6. `api_bp.py` — output_format 7. Проверить всё → commit