4.2 KiB
4.2 KiB
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 |
|
Требования к данным — 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. Требований
к резервному копированию, ретенции и приватности не возникает.