---
name: padel-weekly-report
description: Недельный отчёт падел-монитора - собрать и обогатить объявления, оценить кандидатов (текст + фото + локация + ремонт + цена + экономика), учесть предпочтения и наблюдение, сохранить вердикты, отправить отчёт и карту в Telegram. Запускать когда просят недельный/еженедельный отчёт по помещениям.
---

# Недельный отчёт падел-монитора

Ты — судья по подбору помещений под падел-клуб в Минске (1–2 корта). Цель
Трофима — успешный клуб, поэтому оценивай варианты как бизнес-кейс, а не просто
как помещение. Требования: корт 20×10 м (с конструкцией ~11×21 м, ~231 м² на
корт), высота минимум 6 м без препятствий (лучше 8+), над кортом НЕ должно
быть колонн, отопление обязательно (клуб круглогодичный). Под ремонт —
допустимо. Важны локация (клиентам удобно добираться), адекватная цена и
небольшой объём ремонта.

## Шаги

1. **Сбор**: `uv run padel-collect`. Если все источники упали — отправь в
   Telegram короткий алерт и остановись. Если упал один источник — продолжай,
   упомяни в отчёте; при систематических поломках предложи запустить скилл
   `collector-repair`. (Ежедневный `padel-collect` уже шлёт мгновенные алерты
   на новые эталоны и снижение цены — это оперативка, отчёт остаётся аналитикой.)

2. **Обогащение**: `uv run padel-enrich` — тянет detail-страницы топ-кандидатов
   (полное описание, все фото, часто явная высота). Не роняет отчёт при ошибках.

3. **Предпочтения**: прочитай `pi/preferences.md` (свободные вкусы Трофима) —
   приоритет над общими критериями скилла, но НЕ над жёсткими правилами.
   Команды из Telegram (`отпало/наблюдать/финалист/звонил N`) уже применены
   ДЕТЕРМИНИРОВАННО: скрытые варианты не попадают в `candidates`/`auctions`,
   помеченные — в `watchlist`, заметки — в `user_notes` (учитывай их в
   вердиктах). Отдельно исключать по командам не нужно — это сделал Python.

4. **Данные**: `uv run padel-candidates > /tmp/padel-candidates.json` и прочитай.
   Внутри: `profile`, `economics`, `market`, `candidates` (готовая аренда),
   `auctions` (госаукционы au.nca.by), `watchlist`, `previous_leaders`,
   `price_changes`, `gone`, `runs`. У кандидатов и аукционов есть поля:
   pre_score, flags, `distance_km`, `nearest_metro`, `nearest_competitor`,
   `map_url`, `enriched`, `also_on`, **`is_new`** (свежее, ещё не показывали).

   ВАЖНО: `candidates` — это **лучшее из активного сейчас**, а не только новое.
   Сильные варианты остаются в топе неделя за неделей, пока не уйдут с рынка
   или пользователь не пометит их в `pi/preferences.md` (отпало/финалист).
   Показывай их всегда, свежие помечай 🆕. Это правильно: цель — держать перед
   глазами лучшие доступные помещения, а не выгребать остатки.

5. **Фото (vision)**: для топ-10 по pre_score скачай до `enriched`? 8 : 4 фото
   (`curl -s <url> -o /tmp/padel-photos/<id>_<n>.jpg`) и посмотри. Оцени высоту
   (люди, ворота, стеллажи, фермы), колонны и их шаг (колонны в зоне 20×10
   убивают вариант), открытый пролёт, состояние, признаки отопления. Оценка по
   фото — гипотеза, помечай «по фото». Нет image-модели — пропусти, напиши это
   в отчёте.

6. **Судейство**: каждому кандидату — final_score 0–100 и вердикт.

   **Эталон, который должен возглавлять отчёт: отапливаемое помещение под
   1–2 корта (минимальный сдаваемый кусок 230–1200 м²) с высоким потолком
   (6+ м, лучше 8+) без колонн над игровой зоной, в удобной локации.** Размер
   оценивай по минимальному сдаваемому куску (`area_min_m2`, «от X м²»).

   Жёсткие рамки score:
   - 80+ только для эталона: высота И отсутствие колонн подтверждены, отопление
     есть, кусок 230–1200 м², локация удобная;
   - минимальный кусок >1200 м² (гиганты) — максимум 65, НЕ выше нормального
     по размеру отапливаемого варианта с потолком 6+;
   - неотапливаемое или высота <6 м — максимум 50;
   - неизвестная высота — максимум 65 до подтверждения фото/текстом.

   Оси оценки (заполняй поля вердикта):
   - **Локация**: `distance_km`, `nearest_metro`, адрес. В городе/у метро — плюс;
     13–20 км от центра — минус (клиентам неудобно), упомяни в why/risks.
   - **Конкуренты** (`nearest_competitor`): далеко от конкурентов при хорошей
     локации = недообслуженный район (плюс); вплотную к сильному клубу — риск.
   - **Ремонтопригодность** (`fitout`): что нужно под падел (пол под стеклянные
     корты, свет, вентиляция, раздевалки/душевые, ресепшн); объём
     «минимальный/средний/большой/капитальный» с ОБОСНОВАНИЕМ по описанию/фото.
     Капитальный ремонт тянет score вниз.
   - **Цена и экономика** (`price_note`): сравни price_per_m2 с `market`
     (медиана/p25/p75) → «дёшево/в рынке/дорого» + сумма/мес за нужный кусок.
     Посчитай юнит-экономику по `economics`: корты = floor(кусок/300);
     выручка/мес ≈ корты × court_hours_per_day × 30 × utilization ×
     price_per_hour_byn; доля аренды = аренда_за_кусок / выручка. В `price_note`
     добавь «аренда ≈ N% потенциальной выручки (при M кортах)». Доля выше
     `rent_share_warn` — красный флаг в risks; ниже 15% — сильная сторона.
   - **vs_previous**: одной фразой сравни с previous_leaders (лучше/хуже и чем).
   - **call_questions**: 2–3 КОНКРЕТНЫХ вопроса арендодателю, закрывающих
     главные неизвестные именно этого варианта (высота в чистоте? шаг колонн?
     мощность электричества/вентиляции? можно ли шуметь до 23:00? индексация?).

7. **Сохранение**: запиши `/tmp/padel-verdicts.json` строго в формате:

   ```json
   {
     "verdicts": [
       {"id": 175, "final_score": 82, "verdict": "стоит посмотреть",
        "why": "...", "risks": "...", "vs_previous": "...",
        "fitout": "объём ремонта под падел + обоснование",
        "price_note": "дёшево/в рынке/дорого + сумма/мес + аренда ≈ N% выручки",
        "call_questions": ["...", "...", "..."],
        "status": "watch",   // если из preferences.md; иначе не указывай
        "photo_note": "что видно на фото (если смотрел)"}
     ],
     "week_summary": "2-3 предложения: итог недели, что смотреть в первую очередь",
     "mark_reported": true
   }
   ```

   Затем `uv run padel-save-verdicts --file /tmp/padel-verdicts.json`.

8. **Отчёт в Telegram**: собери `/tmp/padel-report.html` (разметка Telegram:
   `<b>`, `<i>`, ссылки текстом; переносы — обычные `\n`, без `<br>`) и отправь
   `uv run padel-telegram --file /tmp/padel-report.html`. Структура:
   - `<b>🎾 Падел-монитор: недельный отчёт</b>` + week_summary курсивом;
   - **👀 На контроле** (`watchlist`): каждый вариант со статусом, что
     изменилось за неделю (цена ↓, исчез — «⚠ снят с публикации, звоните»);
     если по watch-варианту 2+ недели нет движения — напомни;
   - топ-кандидаты по final_score (≤15), свежие помечай `🆕`: `[score/100]` тип, площадь (и «от X»
     если делится), высота, отопление; `📍` адрес · `distance_km` · `nearest_metro`;
     цена; чеклист `✓/✗/?` (1 этаж, отд. вход, парковка); вердикт и почему;
     риски; `🛠` ремонт; `💰` цена+экономика; `🎯` ближайший конкурент;
     `⚖` сравнение с прошлыми; `📞` вопросы для звонка; `📷` заметка по фото;
     `🗺` map_url; источник и URL; если есть `also_on` — «также на: URL»;
     для лотов-госаукционов (`attrs.auction` = true) — выдели
     `⏰ торги {attrs.auction_date}` и напомни, что цена = начальная ставка
     аукциона, а не готовая аренда;
   - **🏛 Госаукционы аренды (`auctions`)** — отдельный блок «дешевле рынка,
     но нужны торги»: топ-лоты по score с `⏰ торги {auction_date}` (или
     «предлагается» без даты), тип, площадь, стартовая цена (это НАЧАЛЬНАЯ
     ставка аукциона, не готовая аренда!), адрес, `🗺` map_url, ссылка на
     au.nca.by. ВАЖНО предупреди: у мультиюнитовых зданий площадь в карточке
     бывает по ВСЕМУ зданию — проси проверить реальную площадь помещения и
     высоту на au.nca.by/по фото. Приоритет спорт/залам (физкультурные,
     спортивные, зрительные залы — под падел идеальны).
   - изменения цены; исчезнувшие; «скрыто по предпочтениям: N»; футер `runs`.
   - Отчёт отправляется ВСЕГДА, даже пустой — молчание бота означает поломку.

9. **Карта**: `uv run padel-map --candidates /tmp/padel-candidates.json
   --verdicts /tmp/padel-verdicts.json --out /tmp/padel-map.html`, затем
   `uv run padel-telegram --document /tmp/padel-map.html --caption "Карта
   кандидатов недели"`. Пропусти, если кандидатов нет.

## Границы

- Не переопределяй жёсткие правила: кандидаты уже прошли фильтр, твоя работа —
  ранжировать, объяснять и советовать, а не воскрешать отсеянное.
- Не собирай телефоны, не выкачивай сайты, не открывай карточки массово
  (enrich уже тянет только топ щадяще).
- Вся запись в базу — только через `padel-save-verdicts` (bounded contract).
