Реализованы scrub() (обезличивание текста перед LLM, guardrail №1) и pseudo_id() (HMAC-токен связи identity ↔ clinical). Словарь имён — в config/privacy/names_ru.yaml.
## Что меняется
Реализованы `scrub()` (обезличивание текста перед LLM, guardrail №1) и `pseudo_id()` (HMAC-токен связи identity ↔ clinical). Словарь имён — в `config/privacy/names_ru.yaml`.
Closes #2
## Зона
core
## Как проверить
```
make lint test
uv run pytest -q tests/test_privacy.py
```
Публичный API (сигнатуры не менялись):
- `scrub(text: str) -> ScrubbedText` — плейсхолдеры `[PHONE] [EMAIL] [SNILS] [PASSPORT] [INN] [CARD] [DATE] [ADDRESS] [NAME] [URL] [HANDLE]`, идемпотентна.
- `pseudo_id(snils: str, key: str | None = None) -> str` — 32 hex, `ValueError` на не-11-значный СНИЛС.
## Чек-лист
- [x] rebase на origin/dev
- [x] make lint + make test зелёные
- [x] лог в issue (### 2026-10-03)
- [x] нет ПДн в логах, нет реальных данных, нет секретов
- [x] общие файлы не затронуты (добавлен только `config/privacy/names_ru.yaml`)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Rule-based PII scrubber: phones, e-mails, SNILS (checksum-aware), passport,
INN, cards, dates of birth, addresses, URLs/handles and person names
(dictionary in config/privacy/names_ru.yaml + declension, patronymic and
surname heuristics). Idempotent via fixed-point iteration; false-positive
guards for ordinary clinical text. pseudo_id normalises SNILS to 11 digits
and returns HMAC-SHA256 truncated to 32 hex chars.
Refs #2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что меняется
Реализованы
scrub()(обезличивание текста перед LLM, guardrail №1) иpseudo_id()(HMAC-токен связи identity ↔ clinical). Словарь имён — вconfig/privacy/names_ru.yaml.Closes #2
Зона
core
Как проверить
Публичный API (сигнатуры не менялись):
scrub(text: str) -> ScrubbedText— плейсхолдеры[PHONE] [EMAIL] [SNILS] [PASSPORT] [INN] [CARD] [DATE] [ADDRESS] [NAME] [URL] [HANDLE], идемпотентна.pseudo_id(snils: str, key: str | None = None) -> str— 32 hex,ValueErrorна не-11-значный СНИЛС.Чек-лист
config/privacy/names_ru.yaml)🤖 Generated with Claude Code