name: anonymization-check description: "Use when документ заказчика уходит во внешнюю модель. Проверка полноты обезличивания: что закрыто, а что осталось открытым." version: 1.0.0 author: AI_Lab_SCRUM Co license: MIT platforms: [linux, macos, windows] metadata: hermes: tags: [anonymization, privacy, documents, pii, docx] category: ailab
related_skills: [docx]
Правило: ни один документ заказчика не уходит в модель, пока не обезличен. Обезличивание делает человек; этот скилл — контрольный шаг перед загрузкой, он отвечает на вопрос, что осталось открытым.
Правило: ни один документ заказчика не уходит в модель, пока не обезличен. Обезличивание делает человек по своей таблице соответствий. Скилл — контрольный шаг перед загрузкой: он отвечает на вопрос, что осталось открытым.
Обезличивание делают люди, и оно бывает неполным. В разобранном ТЗ закрыты адрес, кадастровый номер и топонимы — а наименование заказчика, управляющей организации, фамилия подписанта и номер ГПЗУ остались открытыми. Никто этого не скрывал: просто закрыли то, о чём подумали.
Результат читает тот, кто будет работать с документом дальше — и ему нужно знать не «обезличено/не обезличено», а конкретно: что закрыто токенами, что осталось открытым и откуда нельзя брать цитаты. Эта строка идёт в шапку любого отчёта по документу.
Применять: документ заказчика (ТЗ, договор, форма КП, переписка) перед загрузкой во внешнюю модель или перед отчётом, который увидят за пределами отдела. Проверка идёт до предметного разбора — она стоит минуты и не требует чтения документа целиком.
Не применять для самого обезличивания: скилл проверяет, а не закрывает. Заменять реальные значения токенами — работа человека, у него есть таблица соответствий, которую агент не читает.
| Что | Формат | Роль |
|---|---|---|
| Обезличенная копия документа | DOCX, TXT | проверяемый |
В ТЗ содержимое лежит в ячейках таблиц, а не в абзацах. Проверка только по абзацам даёт пустой результат и читается как «всё чисто». Скрипт разбирает и абзацы, и таблицы; если делаешь проверку иначе — делай так же.
grep -i в этом окружении не сворачивает регистр кириллицы. Поиск grep -i "ооо" не найдёт «ООО», и счётчик молча выйдет нулевым. Поэтому шаблоны написаны явно под нужный регистр, а регистронезависимый поиск — только питоном по text.lower().
Отсутствие находок — не доказательство. Шаблоны находят то, что в них описано: организационные формы, инициалы, кадастровые номера, номера ГПЗУ, адреса. Заказчик, названный описательно («Инвестор проекта в районе станции»), под шаблон не попадёт. Ноль находок означает «шаблоны не сработали».
Эталона у этой работы нет: проверяется сам документ. Источник правды — текст обезличенной копии, и только он.
Таблица соответствия токенов и реальных значений не читается никогда: ни для проверки, ни для «уточнить, что за объект». Само наличие такой таблицы рядом не даёт права её открыть.
python <скилл>/scripts/scan_open_pii.py "<файл.docx>". Скрипт печатает, что закрыто токенами (сколько и каких видов) и что осталось открытым, по категориям, с самими находками.Самое чувствительное в этих документах — название объекта и его адрес (заказчик в ТЗ обычно прямо не назван). Если что-то идентифицирует объект или заказчика и токеном не закрыто — не переноси это в отчёт дословно и скажи пользователю.
Строка (или короткий блок) для шапки отчёта по документу:
Обезличивание: закрыто токенами — адрес, кадастровый номер, топонимы (26 замен). Открыто: наименование заказчика и управляющей организации, фамилия подписанта, номер ГПЗУ. Цитаты не берутся из подписного блока и пункта «Заказчик».
Отдельного файла-отчёта скилл не производит: его результат живёт в шапке того отчёта, ради которого документ и открывали. Если проверка делается впрок — положи вывод скрипта рядом с документом в рабочей папке.
[АДРЕС-003] — обычный текст, переноси как есть.Эталона пока нет: скилл переносится из другого набора, а свой приёмочный случай нужно завести — обезличенная копия реального документа с известным людям ответом: что закрыто токенами и что осталось открытым.
Семь критериев на этой работе: бизнес-результат — есть готовая строка для шапки, а не «проверено»; метод — разобраны и абзацы, и таблицы; полномочия — таблица соответствий не читалась; остановка — сомнительные находки отданы человеку, а не расклассифицированы самостоятельно; ровно один раз — один документ, один вывод; доказательство — вывод скрипта с самими находками, а не утверждение; исключения — если токенов нет вовсе, работа остановлена, а не продолжена на оригинале.