Files
ElebobaandClaude Opus 5.5 585f0af273
CI / ruff · pytest (pull_request) Successful in 24s
feat(core): implement scrub() and pseudo_id() with tests
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>
2026-10-03 15:00:21 +03:00

255 lines
4.8 KiB
YAML

# Name lexicon for app.core.privacy.scrub() (issue #2). Synthetic-safe: just a list of common Russian names.
#
# names — nominative forms; case forms (Ивана, Ирине, Сашей...) are generated in code.
# Extra explicit forms may follow on the same line, space-separated
# (needed for fleeting vowels: "Павел Павла Павлу...").
# ambiguous_names — names that are also ordinary words (вера, надежда, роман...). All their forms are
# treated as names only with context: capitalised mid-sentence or next to a
# patronymic/surname, or after "меня зовут".
# ambiguous_forms — single generated forms that collide with ordinary words (кости, коли, жене...).
# surname_stopwords — capitalised words that look like surnames (-ов/-ова...) but are ordinary words.
names:
# male
- Александр
- Алексей
- Анатолий
- Андрей
- Антон
- Аркадий
- Арсений
- Артём
- Артем
- Артур
- Борис
- Вадим
- Валентин
- Валерий
- Василий
- Виктор
- Виталий
- Владимир
- Владислав
- Вячеслав
- Геннадий
- Георгий
- Глеб
- Григорий
- Даниил
- Данил
- Данила
- Денис
- Дмитрий
- Евгений
- Егор
- Ефим
- Иван
- Игорь
- Илья
- Ильдар
- Кирилл
- Константин
- Леонид
- Максим
- Марат
- Матвей
- Михаил
- Никита
- Николай
- Олег
- Павел Павла Павлу Павлом Павле
- Пётр Петра Петру Петром Петре
- Петр Петра Петру Петром Петре
- Ринат
- Ростислав
- Руслан
- Рустам
- Святослав
- Семён
- Семен
- Сергей
- Станислав
- Степан
- Тарас
- Тимофей
- Тимур
- Фёдор
- Федор
- Филипп
- Эдуард
- Юрий
- Яков
- Ярослав
# male diminutives
- Алёша
- Алеша
- Лёша
- Леша
- Боря
- Ваня
- Вася
- Витя
- Вова
- Володя
- Влад
- Гоша
- Гриша
- Даня
- Дима
- Егорка
- Женя
- Костя
- Коля
- Лёня
- Леня
- Макс
- Миша
- Митя
- Паша
- Петя
- Рома
- Саша
- Серёжа
- Сережа
- Стас
- Стёпа
- Степа
- Толя
- Федя
- Юра
- Гена
# female
- Алина
- Алиса
- Алла
- Алёна
- Алена
- Анастасия
- Ангелина
- Анна
- Антонина
- Валентина
- Варвара
- Василиса
- Вероника
- Галина
- Дарья
- Диана
- Евгения
- Екатерина
- Елена
- Елизавета
- Жанна
- Зинаида
- Инна
- Ирина
- Карина
- Кристина
- Ксения
- Лариса
- Лидия
- Людмила
- Маргарита
- Марина
- Мария
- Милана
- Наталья
- Наталия
- Нина
- Оксана
- Олеся
- Ольга
- Полина
- Раиса
- Регина
- Светлана
- Софья
- София
- Тамара
- Татьяна
- Ульяна
- Эльвира
- Юлия
- Яна
# female diminutives
- Аня
- Валя
- Варя
- Вика
- Галя
- Даша
- Ира
- Катя
- Ксюша
- Лена
- Лиза
- Люда
- Маша
- Надя
- Настя
- Наташа
- Оля
- Поля
- Рита
- Таня
- Юля
# ambiguous ones are listed in names too, so their case forms are generated
- Вера
- Виктория
- Лев Льва Льву Львом Льве
- Любовь Любови Любовью
- Люба
- Мила
- Надежда
- Ника
- Роза
- Роман
- Света
- Слава
- Соня
- Тома
ambiguous_names:
- Вера
- Виктория
- Лев
- Любовь
- Люба
- Мила
- Надежда
- Ника
- Роза
- Роман
- Света
- Слава
- Соня
- Тома
- Поля
ambiguous_forms:
- коли
- вали
- кости
- костей
- жене
- жени
- гены
- машу
- семена
- вари
- кати
surname_stopwords:
- снова
- готов
- готова
- здоров
- здорова
- слова
- основа
- один
- часов
- разов
- врачей
- сонов