normalize_alias (lower, ё→е, без пунктуации и ОПФ), POST/DELETE
/directories/legal-entities/{id}/aliases, конфликты ALIAS_EXISTS /
ALIAS_TAKEN (с legal_entity_id владельца), EMPTY_ALIAS, аудит
LEGAL_ENTITY_CHANGE по legal_entity_alias.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
"""Нормализация алиаса ЮЛ (§3 п. 4, ANL-028): ключ сопоставления контрагента из ОСВ с ЮЛ по тексту названия.
|
||
|
||
Чистая функция без обращения к БД; одно и то же название в разных написаниях (`ООО «Пекарня»`, `Пекарня, ООО`)
|
||
даёт один и тот же `normalized_alias`.
|
||
"""
|
||
|
||
import re
|
||
|
||
# Одиночные токены ОПФ (§3 п. 4: «ООО, АО, ПАО, ИП…»); убираются только целиком — «ооо» внутри слова не трогается.
|
||
LEGAL_FORMS: frozenset[str] = frozenset(
|
||
{
|
||
"ооо",
|
||
"ао",
|
||
"пао",
|
||
"зао",
|
||
"оао",
|
||
"нао",
|
||
"ип",
|
||
"гуп",
|
||
"муп",
|
||
"фгуп",
|
||
"ано",
|
||
"тсж",
|
||
"кфх",
|
||
"пк",
|
||
"спк",
|
||
"сх",
|
||
"сха",
|
||
}
|
||
)
|
||
|
||
_PUNCT_RE = re.compile(r"[^\w\s]", re.UNICODE) # кавычки «»"'„“ и прочая пунктуация → пробел
|
||
|
||
|
||
def normalize_alias(raw: str) -> str:
|
||
"""§3: lower → ё→е → пунктуация и кавычки → пробел → убрать токены ОПФ → схлопнуть пробелы → strip.
|
||
|
||
Строка из одних ОПФ и пунктуации нормализуется в `""` — вызывающий отвергает такой алиас.
|
||
"""
|
||
text = _PUNCT_RE.sub(" ", raw.lower().replace("ё", "е"))
|
||
return " ".join(token for token in text.split() if token not in LEGAL_FORMS)
|