--- type: brd work_item_id: ET-001 title: "BRD: Чекбокс показа/скрытия POI в кнопке рельефа" version: 4 status: proposed created_at: 2026-06-14 updated_at: 2026-06-14 author: "agent:analyst" supersedes: "barriers-osrm (archive-2026-05-barriers-osrm/)" relates_to: ET-002 --- # BRD — ET-001: Чекбокс показа/скрытия POI в кнопке рельефа > **Важно для всех последующих этапов.** > Этот пакет артефактов **переиспользует ID ET-001** под POI-задачу > (ветка `feature/ET-001-poi`). Прежняя задача под этим ID — «Исключить > шлагбаумы и тротуары из OSRM» — **заархивирована** в > `docs/work-items/ET-001/archive-2026-05-barriers-osrm/` (содержимое > сохранено побайтно). Перезапись корневых файлов поэтому **не > деструктивна**. > > **Запрошенная функциональность уже реализована и поставлена** в рамках > **ET-002** (бизнес-запрос ET-002 дословно совпадает с ET-001). Поэтому > данный BRD трактует ET-001 как **верификацию уже поставленного > поведения + одну косметическую дельту** (подпись чекбокса), а не как > новую разработку. Подробности — `08-analyst-finding-duplicate.md`, > `09-analyst-decision-required.md`. ## 1. Контекст и проблема На карте маркеры POI (точки интереса: вода, родники, виды, руины, пики, пещеры, броды) отображаются **всегда** и не отключаются. Пользователю нужна возможность скрывать их, чтобы разгрузить карту при планировании маршрута. ## 2. Цель Дать пользователю управление видимостью слоя POI через чекбокс в попапе кнопки рельефа (`#terrain-toggle` → `#terrain-popup`), с подписью **«Показывать POI»**, включённый по умолчанию, с сохранением выбора между сессиями. ## 3. Бизнес-требования (Scope) | # | Требование | Текущая реализация (ET-002) | Дельта ET-001 | |------|-----------|------------------------------|---------------| | BR-1 | В попапе кнопки рельефа есть чекбокс управления POI | ✅ `#poi-visible-cb` в `#terrain-popup` | — | | BR-2 | Подпись чекбокса — «Показывать POI» | ⚠️ сейчас «POI» | **изменить подпись** | | BR-3 | По умолчанию чекбокс включён (POI видны) | ✅ `checked` + дефолт «видимы» | — | | BR-4 | Снятие чекбокса скрывает все маркеры POI с карты | ✅ слои `poi-circles`, `poi-labels` → `visibility:none` | — | | BR-5 | Повторная установка возвращает POI | ✅ | — | | BR-6 | Состояние сохраняется между сессиями браузера | ✅ `localStorage['poi-visible']` | — | | BR-7 | Состояние не сбрасывается при смене темы | ✅ восстановление после смены стиля | — | **Единственная новая работа в ET-001** — BR-2: привести подпись чекбокса к формулировке заказчика «Показывать POI» (сейчас в UI — «POI»). Это правка одного текстового узла `` в `src/web/index.html`. ## 4. Вне scope - Разбивка POI по типам (отдельные чекбоксы вода/виды/пики и т.п.). - Отдельная кнопка POI на панели карты. - Иконка-индикатор состояния POI на кнопке рельефа. - Изменение серверной отдачи POI в MVT-тайлах (`/api/tiles`) — видимость управляется только на клиенте. ## 5. Метрики успеха - Чекбокс «Показывать POI» виден в попапе рельефа, включён по умолчанию. - Снятие/установка скрывает/возвращает все маркеры POI на карте. - После перезагрузки и после смены темы выбранное состояние сохраняется. - Регрессии в ET-002 отсутствуют (unit-тесты `poi_toggle` зелёные). ## 6. Риски | Риск | Митигация | |------|-----------| | Переименование подписи ломает существующий регресс-тест ET-002: `tests/unit/test_poi_toggle.py:54` жёстко проверяет `assert "POI" in html` | Обновить ожидание текста в этом тесте на `Показывать POI` **в том же коммите**, что и правку `index.html:88`. JS-тест `poi_toggle.test.js` подпись не проверяет — его трогать не нужно | | Восприятие задачи как «нечего делать» (дубликат ET-002) | Чёткая дельта BR-2 + полный регресс-пакет верификации | | Коллизия артефактов с барьерной задачей под тем же ID | Барьерные артефакты заархивированы; данный пакет — канонический для POI-ET-001 | ## 7. Открытый вопрос к Owner Если переименование подписи не требуется (ET-002 уже принят с «POI»), то ET-001 следует **закрыть как дубликат ET-002** (закрытие — за Owner/CI, правило CLAUDE.md №4). Данный пакет описывает минимально возможную реальную дельту, если задачу всё же нужно довести.