Алиас приоритетнее имени при резолве контрагента (#57) #59
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/57-alias-priority"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #57
Что сделано
CounterpartyIndex(api/src/repositories/counterparties.py): добавлены раздельные словариby_alias(толькоlegal_entity_alias.normalized_alias) иby_normalized_name(толькоnormalize_alias(legal_entity.name)); объединённыйby_normalizedоставлен (его читаетrecommendedв кандидатах ручного сопоставления).resolve: порядок шагов ИНН -> точное имя -> алиас -> нормализованное имя (OQ-128, §3 п. 4). Единственный владелец алиаса берётся сmatch_kind = ALIAS, даже при ЮЛ-тёзках по нормализованному имени. NULL остаётся при нескольких совпадениях только по имени без алиаса.counterparty_match_kind(DBML v5.16) не менялся: и алиас, и нормализованное имя по-прежнему даютALIAS, различать их в БД нечем и не нужно.result_mapping._with_counterparty) и дорезолв свода на чтение (consolidated_osv._candidate_idsиdomain.consolidated_osv) вызывают один и тот жеCounterpartyIndex.resolve.test_counterparty_resolve.py(тёзка + алиас, несколько тёзок + алиас, точное имя раньше алиаса, несколько владельцев алиаса; старый тест «тёзка + алиас -> None» заменён),test_api_consolidated_osv.py(дорезолв на чтении: алиас побеждает тёзок, тёзки без алиаса остаются несопоставленными). До правки три новых теста падали.osv-result-mapping(требование «Резолв контрагента» + сценарий) иconsolidated-osv(сценарий дорезолва), README (описание дорезолва).Проверки
make check: ruff + mypy чисто, 1217 passed, 44 skipped (fixtures безARM_KA_FIXTURES).make check-full(сDBML=иCOMPOSE_FILE=абсолютными путями иARM_KA_FIXTURES, см. O-1): exit 0; unit 1223 passed, 38 skipped;test-integration821 passed, 1 skipped; dbml-check, check-infra, e2e (skip без профиляservices), docker-build, web-check — без ошибок.Rulings I made
normalized_aliasокажется несколько владельцев (глобальная уникальность алиаса — правило приложенияALIAS_TAKEN, в БД уникален только(legal_entity_id, normalized_alias); возможно через импорт),resolveвозвращает NULL, а не выбирает молча и не проваливается к нормализованному имени. Если ошибка: при испорченных данных строка уйдёт на ручное сопоставление вместо автоматического выбора.by_normalizedсохранён дляrecommendedв кандидатах (OQ-127), там нужны оба источника. Если ошибка: рекомендация перестанет совпадать с резолвом (не затронуто).test_mapping_from_slice_plan_propagates_and_creates_alias(срез 2c/4) обновлён: строка по 76 с ИНН, которого нет в справочнике, раньше после ручного сопоставле��ия оставалась несопоставленной (имя двусмысленно: ЮЛ-владелец и тёзка), теперь дорезолвится по алиасу (ALIAS,match_stored = false,unmapped_total0 вместо 1). Хранимые значения не меняются (проверка(None, None)сохранена). Это прямое следствие OQ-128, а не регрессия.Находки
unmapped_total == 1) противоречило новому правилу7dcffbdmake check-fullв worktree.wt/<id>/arm-coreне находит../../docsи../docs/dev/docker-compose.yml(Makefile рассчитан на.wt/<срез>/с соседнимdocs);ARM_KA_FIXTURESне выставлен — fixtures-тесты skipDBML=…/docs/model/… COMPOSE_FILE=…/docs/dev/docker-compose.yml ARM_KA_FIXTURES=…)🤖 Generated with Claude Code
https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2