docs(findings): шаг 2 автоподбора — разворот по телефону мостит чужих (баг AutoMoney), корень + фикс-план
Accessibility (Pa11y live) / a11y (push) Waiting to run

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-07 13:00:55 +03:00
parent 0c4d47f3c3
commit ec07f2aeeb
@@ -0,0 +1,43 @@
# Автоподбор шаг 2 — «разворот по телефону» мостит чужие фирмы (баг AutoMoney)
**Дата:** 07.07.2026 · **Среда:** боевой liderra.ru, tenant 2 (info@lkomega, ниша «займы под залог авто», Красноярск) · **Статус:** РАСследовано, корень найден, фикс НЕ сделан (ждёт решения владельца).
## Симптом (живые данные с прода)
Изучение (study-run #5) конкурента **AutoMoney** (`autopodbor_competitors.id=16`, `automoney-krsk.ru`, Красноярск) собрало **12 источников**, из которых **больше половины — чужие компании из Москвы/СПб**:
Чужие «сайты» (provenance = «найдено по телефону (2ГИС)»):
- `t.me/mfoalliance` (2ГИС Москва firm 70000001029588771 = МФО Альянс)
- `moneyman.ru` (2ГИС Москва — MoneyMan, федеральный МФО)
- `finombudsman.ru` (2ГИС Москва — **финансовый омбудсмен, вообще не МФО**)
- `razvitie-zaym.ru` (2ГИС СПб — Razvitie Zaym)
- `alliance-mfo.ru` (Яндекс «Союз микрофинансовый альянс», Москва)
Чужие телефоны:
- `79653211988`, `78005552499` — из 2ГИС Москва firm 29588771 (МФО Альянс)
- `78003336867` — из Яндекс «Союз МФА» (Москва)
Свои (верные) источники: `automoney-krsk.ru`, `79135396546` (real mobile, есть в коде сайта/2ГИС Красноярск), `74993224677` (city, в коде сайта), `78002000010` (substitute 8-800, коллтрекинг — помечен верно).
## Корень (подтверждён кодом)
Шаг 2 делает «разворот по телефону»: `App\Services\Autopodbor\Agent\Study\PhoneReverseExpander` (+ `CompositePhoneReverse` = 2ГИС + Яндекс). Замысел (docstring PhoneReverseExpander:12-18) — вскрыть **филиалы того же холдинга** по общим номерам.
**Дефект: нет проверки «это та же фирма».** Разворот забирает КАРТОЧКУ ЛЮБОЙ фирмы, делящей номер с конкурентом. Единственная защита — `crowdedCap=4` (`firmUrlsFor()`:123 — если номер у >4 фирм, это общая линия 8-800, не разворачиваем). Она ловит только массовые горячие линии; партнёрские/сетевые номера у 2–4 фирм проскакивают под порогом и притягивают эти 2–4 чужие МФО. Дальше `maxDepth=1` разворачивает уже их номера → каскад мусора.
Усугубляет: `automoney-krsk.ru` похож на **лид-агрегатор** (домен `автозайм-krsk`, на «Контактах» партнёрские номера разных МФО + московский 499-й на красноярской фирме) — поэтому разворот и растащило по РФ. Ни в `PhoneReverseExpander`, ни в `CompositePhoneReverse`, ни в `DeepStudyCollector` нет гейта по имени/бренду/городу для реверс-результатов (есть только `DomainKinship` — родство доменов, и `AnchorGate` — но не на реверс-фирмах).
Кросс-регион — маркер: конкурент Красноярск (`gisSlug=krasnoyarsk`), а карточки — moscow/spb/Яндекс-РФ. Яндекс-разворот общероссийский (без региона), 2ГИС-поиск по номеру тоже отдаёт кросс-регион.
## Предлагаемый фикс
Гейт «та же фирма» на реверс-результаты (перед сохранением в источники):
1. **Имя/бренд**: карточку оставлять только если имя похоже на конкурента (переиспользовать логику similarity / по аналогии с `DomainKinship` для имён).
2. **Город**: карточка в том же городе/регионе, что конкурент (отсечь moscow/spb у красноярского).
Оба вместе = замысел «филиалы того же холдинга». По TDD: тест на данных AutoMoney (12 источников → 5 своих, чужие отвалились), потом фикс в `PhoneReverseExpander`/сборщике.
Побочно (search-side): `automoney-krsk.ru` как лид-агрегатор, возможно, не должен ранжироваться конкурентом (фильтр агрегаторов классифицировал его «Микрофинансирование» → пропустил) — отдельный вопрос.
## Второй пример
Владелец гонит ещё одно изучение 07.07 для второго кейса — добавить сюда, когда завершится.