# Приёмка liderra.ru — ПУНКТ №6: Каналы и распознавание заявки (площадка + тип)

> **Для исполнителя:** формат PR1 (одобрен 20.06). Каждый шаг = `🔧 Код-факт (file:line)` · `🎬 Действие` · `📋 ОТЧЁТ (было→ожидали→стало + 📸/📝)` · `❌ Если не так`. Техника «под капотом»; владельцу — человеческие карточки.

**Цель:** показать, что портал **правильно распознаёт** каждую входящую заявку: с какой **площадки** она пришла (B1 / B2 / B3 / напрямую) и какого **типа** (заявка с сайта / звонок / смс). Распознавание устойчиво даже к «грязным» названиям, которые иногда присылает поставщик.

**Что снимаем глазами:** **Сделки** — у каждой видно источник и тип. Живые 📸.

**Источник сценария:** свод проверок №6 (D-DIRECT/PARSE); R3 «движок».

---

## 🔧 Код-факты (подтверждено чтением 20.06)

Разбор поля заявки — [RouteSupplierLeadJob::parseProjectField :216-249](../../../app/app/Jobs/RouteSupplierLeadJob.php#L216-L249):

- **Площадка** — по префиксу: `B1_…`/`B2_…`/`B3_…` → платформа B1/B2/B3; **без префикса → DIRECT** (заявка напрямую) — [:218-227](../../../app/app/Jobs/RouteSupplierLeadJob.php#L218-L227).
- **Тип заявки** — по форме «хвоста»:
  - `^7\d{10}$` (телефон 11 цифр с 7) → **звонок** (`call`) — [:233-235](../../../app/app/Jobs/RouteSupplierLeadJob.php#L233-L235);
  - чистый домен `site.ru` → **сайт** (`site`) — [:236-238](../../../app/app/Jobs/RouteSupplierLeadJob.php#L236-L238);
  - домен, **встроенный в свободный текст** (например `заявка carmoney.ru/`) → всё равно **сайт** (извлекается; регрессия-фикс 18.05.2026, 21 лид) — [:239-242](../../../app/app/Jobs/RouteSupplierLeadJob.php#L239-L242);
  - иначе → **смс** (`sms`, короткое имя отправителя) — [:243-246](../../../app/app/Jobs/RouteSupplierLeadJob.php#L243-L246).

---

## Случаи для проверки

| # | Что приходит (поле `project`) | Площадка | Тип |
|---|---|---|---|
| K1 | `B2_test-okna.ru` | B2 | сайт |
| K2 | `B1_79990001122` | B1 | звонок |
| K3 | `B3_TESTSMS` | B3 | смс |
| K4 | `test-direct.ru` (без префикса) | DIRECT | сайт |
| K5 | `B2_заявка carmoney.ru/` (грязный текст) | B2 | сайт (домен извлечён) |

---

## Шаг 6-1 — Сайт / звонок / смс распознаются верно (B-каналы)

**🔧 Код:** [parseProjectField :233-246](../../../app/app/Jobs/RouteSupplierLeadJob.php#L233-L246).
**🎬 Действие (лок):** влить три заявки — K1 (сайт), K2 (звонок), K3 (смс); открыть сделки.

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| K1 | — | сделка: источник B2, тип **сайт** | _(слот прогона)_ | 📸 Сделка K1 (источник/тип) |
| K2 | — | сделка: источник B1, тип **звонок** | _(слот)_ | 📸 Сделка K2 |
| K3 | — | сделка: источник B3, тип **смс** | _(слот)_ | 📸 Сделка K3 |

**💡 Что внутри:** заявки приходят с разных площадок поставщика и в разном виде — где-то телефон для звонка, где-то адрес сайта, где-то короткое смс-имя. Портал по виду заявки сам понимает, что это: звонок, заявка с сайта или смс — и помечает сделку правильно. Клиент сразу видит, откуда пришёл контакт.

**❌ Если не так:** звонок помечен как смс / сайт как звонок → дефект распознавания.

---

## Шаг 6-2 — Заявка «напрямую» (DIRECT) без префикса

**🔧 Код:** [parseProjectField :221-227](../../../app/app/Jobs/RouteSupplierLeadJob.php#L221-L227).
**🎬 Действие (лок):** влить K4 (`test-direct.ru` без `B_`-префикса).

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| K4 | — | площадка **DIRECT** (напрямую), тип сайт | _(слот)_ | 📸 Сделка K4 (источник DIRECT) |

**💡 Что внутри:** часть заявок приходит не через площадки-посредники, а напрямую. Такие портал помечает как «прямые» — и обрабатывает по своему пути (без передачи внешнему поставщику).

**❌ Если не так:** прямая заявка отнесена к B-каналу → дефект.

---

## Шаг 6-3 — Устойчивость: «грязное» название всё равно распознано

**🔧 Код:** извлечение домена из текста — [parseProjectField :239-242](../../../app/app/Jobs/RouteSupplierLeadJob.php#L239-L242).
**🎬 Действие (лок):** влить K5 (`B2_заявка carmoney.ru/` — домен внутри текста).

**📋 ОТЧЁТ:**
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| K5 | — | тип **сайт**, домен `carmoney.ru` извлечён | _(слот)_ | 📸 Сделка K5 (тип сайт, источник) |

**💡 Что внутри:** поставщик иногда присылает название площадки неаккуратно — с лишними словами, как «заявка carmoney.ru/». Портал всё равно находит в этой строке адрес сайта и распознаёт заявку правильно. Раньше из-за таких «грязных» названий терялись заявки (находка 18.05) — теперь это учтено.

**❌ Если не так:** грязное название отнесено к смс / заявка потеряна → рецидив регрессии 18.05.

---

## Verification №6 (выход из пункта)
- [ ] 📸 K1 сайт (B2), K2 звонок (B1), K3 смс (B3) — типы и площадки верны.
- [ ] 📸 K4 DIRECT (без префикса) — помечена как прямая.
- [ ] 📸 K5 грязное название → сайт, домен извлечён.
- [ ] 📝 (опц.) сверка `signal_type`/площадки сделки с ожиданием по таблице.

## 📸 vs 📝 в этом пункте
- **📸 Скриншот:** Сделки — источник и тип каждой из 5 заявок.
- **📝 Текст:** распарсенные `platform`/`signal_type` — при необходимости текстом.

## Грабли
- Распознавание идёт по виду строки — для теста слать ровно те формы из таблицы K1–K5.
- DIRECT в распознавании = «без B-префикса»; не путать с площадками B1/B2/B3.
- Грязные названия — реальный кейс поставщика (18.05); проверять именно встроенный-в-текст домен.
