From ec07f2aeeb0c56912308ff03c34db5986d4b4fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Tue, 7 Jul 2026 13:00:55 +0300 Subject: [PATCH] =?UTF-8?q?docs(findings):=20=D1=88=D0=B0=D0=B3=202=20?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D0=BF=D0=BE=D0=B4=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=20=E2=80=94=20=D1=80=D0=B0=D0=B7=D0=B2=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D1=82=20=D0=BF=D0=BE=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE?= =?UTF-8?q?=D0=BD=D1=83=20=D0=BC=D0=BE=D1=81=D1=82=D0=B8=D1=82=20=D1=87?= =?UTF-8?q?=D1=83=D0=B6=D0=B8=D1=85=20(=D0=B1=D0=B0=D0=B3=20AutoMoney),=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=D1=8C=20+=20=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81-=D0=BF=D0=BB=D0=B0=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- ...utopodbor-step2-reverse-phone-pollution.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/superpowers/findings/2026-07-07-autopodbor-step2-reverse-phone-pollution.md diff --git a/docs/superpowers/findings/2026-07-07-autopodbor-step2-reverse-phone-pollution.md b/docs/superpowers/findings/2026-07-07-autopodbor-step2-reverse-phone-pollution.md new file mode 100644 index 00000000..30f0a0ba --- /dev/null +++ b/docs/superpowers/findings/2026-07-07-autopodbor-step2-reverse-phone-pollution.md @@ -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 для второго кейса — добавить сюда, когда завершится.