---
type: trz
work_item_id: ET-001
title: "ТЗ: Исключить шлагбаумы и тротуары из OSRM"
version: 1
status: approved
created_at: 2026-05-15
authors:
  - "agent:stream"
---

# Техническое задание — ET-001

## 1. Что менять

### Файл: OSRM профиль `enduro.lua`

Расположение на сервере: `/home/slin/enduro-trails/osrm/enduro.lua`
В репо: `infra/osrm/enduro.lua` (скопировать текущий + внести изменения)

#### Изменение 1: process_node — блокировка шлагбаумов

В функции `process_node` заменить текущую обработку barriers:

```lua
-- Блокируемые типы препятствий (полный запрет проезда)
local blocked_barriers = {
  gate = true,
  bollard = true,
  lift_gate = true,
  chain = true,
  cycle_barrier = true,
  motorcycle_barrier = true,
  border_control = true,
  block = true,
}

function process_node(profile, node, result)
  local barrier = node:get_value_by_key("barrier")
  if barrier and blocked_barriers[barrier] then
    result.barrier = true
    result.forward_mode = mode.inaccessible
    result.backward_mode = mode.inaccessible
    return
  end
end
```

#### Изменение 2: process_way — исключение тротуаров

В начале функции `process_way`, после получения highway, добавить:

```lua
-- Исключаемые типы дорог (тротуары, пешеходные зоны)
local excluded_highways = {
  footway = true,
  pedestrian = true,
  steps = true,
  corridor = true,
}

-- В process_way, после local highway = way:get_value_by_key("highway"):
if excluded_highways[highway] then return end
```

Также удалить `footway`, `pedestrian`, `steps` из таблицы `highway_rate` (если есть).

## 2. Пересборка графа

После изменения lua-профиля — пересобрать граф:

```bash
cd /home/slin/enduro-trails/osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-extract -p /data/enduro.lua /data/enduro.osm.pbf
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-partition /data/enduro.osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-customize /data/enduro.osrm
docker restart osrm-osrm-routed-1
```

Время: ~40 мин (extract) + ~5 мин (partition + customize).

## 3. Что добавить в репо

1. `infra/osrm/enduro.lua` — обновлённый профиль
2. `scripts/rebuild-osrm.sh` — скрипт пересборки графа
3. `tests/integration/test_routing_barriers.py` — тесты

## 4. Тесты

### Unit/Integration тесты (pytest + httpx)

```python
# tests/integration/test_routing_barriers.py

import pytest
from httpx import AsyncClient, ASGITransport
from src.api.main import app

OSRM_URL = "http://172.22.0.1:5559"

@pytest.mark.asyncio
async def test_route_avoids_barrier():
    """Маршрут через точку с известным шлагбаумом должен обходить его"""
    # Точка с шлагбаумом: 55.7558, 37.6173 (пример)
    # Тест проверяет что маршрут не проходит через эту ноду
    pass  # Architect определит конкретные координаты

@pytest.mark.asyncio
async def test_route_no_footway():
    """Маршрут в городе не должен проходить по тротуарам"""
    pass  # Architect определит конкретные координаты

@pytest.mark.asyncio
async def test_route_allows_cattle_grid():
    """Маршрут через cattle_grid должен работать (не заблокирован)"""
    pass
```

## 5. Ограничения
- НЕ менять веса существующих дорог (только добавить блокировку)
- НЕ трогать scenic/link/recon логику
- cattle_grid и ford — НЕ блокировать
- Пересборка графа — отдельный ручной шаг (не в CI)
