Files
enduro-trails/docs/work-items/ET-005/08-data-requirements.md
claude-bot bafbea2dab
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 5s
CI / build (push) Successful in 1s
architect(ET-005): ADR, infra-requirements, data-requirements, tech-risks
2026-05-21 22:18:08 +03:00

4.2 KiB
Raw Permalink Blame History

type, work_item_id, title, version, status, created_at, authors
type work_item_id title version status created_at authors
data-requirements ET-005 Требования к данным — ET-005: Переключение единиц измерения (км/мили) 1 approved 2026-05-21
agent:architect

Требования к данным — ET-005

1. Резюме

ET-005 не вводит и не изменяет ни одной серверной структуры данных. Единственное «данное» фичи — пользовательская UI-настройка выбранной единицы измерения, хранимая на клиенте.

2. Серверные данные

Аспект Требование
Изменения схемы SQLite/Spatialite Нет
Новые таблицы / колонки / индексы Нет
Миграции (migrations/) Нет
Изменения контракта API Нет — расстояния и далее отдаются в метрах

3. Каноническая единица расстояния

  • Внутренняя каноническая единица системы — метр. Backend отдаёт route.distance_m (метры); линейка во фронтенде оперирует километрами (rulerTotal).
  • ET-005 не меняет ни хранимые, ни передаваемые значения. Перевод в мили выполняется только в момент форматирования строки для UI (Units.formatDistance()).
  • Запрещено хранить в рантайм-состоянии значения, конвертированные в мили — это исключает накопление ошибок округления при многократном переключении (ФТ-3 ТЗ, AC-2, тест TP-04).

4. Клиентское хранилище

Параметр Значение
Механизм localStorage
Ключ distance_unit
Допустимые значения 'km', 'mi'
Значение по умолчанию 'km' (при отсутствии ключа или некорректном значении)
Объём ≈ 2 байта полезной нагрузки на браузер
Запись при переключении (Units.setUnit())
Чтение при инициализации модуля units.js

Ключ согласуется с уже сложившейся в проекте конвенцией UI-настроек в localStorage (enduro-theme-mode, terrain-*, trails-*, poi-visible).

5. Константы и точность

Параметр Значение
Коэффициент перевода 1 km = 0.621371 mi (Units.KM_TO_MI), единственное место объявления
Точность по умолчанию 1 знак после запятой (AC-2)
Параметризация точности formatDistance() принимает precision, чтобы сохранить существующую точность карточек маршрутов (toFixed(0)) — см. 10-tech-risks.md, R5
Разделитель дробной части Привести к единому виду; сейчас в app.js есть расхождение (. и ,) — см. 10-tech-risks.md, R4

6. Персональные данные

Персональные данные (PII) отсутствуют. distance_unit — обезличенная UI-настройка, не покидает браузер пользователя, не логируется на backend.

7. Вывод

Серверных данных, схем и миграций ET-005 не затрагивает. Единственная единица данных — клиентский флаг localStorage:distance_unit. Требований к резервному копированию, ретенции и приватности не возникает.