--- type: data-requirements work_item_id: ET-006 version: 1 status: approved created_at: 2026-05-22 authors: - "agent:architect" --- # Data Requirements — ET-006 ## 1. Сводка: персистентных данных нет ET-006 не вводит серверного хранения. Все данные GPX-треков живут **только в памяти браузера** на время сессии (BRD §3 «Out of scope», TRZ NF-04). | Аспект | Решение | |---|---| | Схема БД (SQLite/Spatialite) | без изменений | | Миграции (`migrations/`) | нет | | Серверное хранение треков | нет | | `localStorage` / `sessionStorage` | **не используется** (объём данных велик) | | Время жизни данных | сессия; при перезагрузке страницы — потеря | ## 2. Входные данные - Формат: **GPX 1.1**, namespace `http://www.topografix.com/GPX/1/1` (с fallback на парсинг без namespace — TRZ REQ-F-02, тест U-08). - Источник: локальный файл, выбранный пользователем (``). - Ограничение размера: ≤ 50 МБ на файл (TRZ REQ-F-03). - Извлекаемые сущности: `` / `` / ``, ``, `` (трактуется как трек). ## 3. Внутренняя модель (in-memory) Каноническая модель — `window.gpxTracks` (массив загруженных файлов), определена в TRZ §4. Владеет ею `gpx.js` (ADR-002): ```javascript window.gpxTracks = [ { id: 'gpx-', // уникальный ID filename: 'morning_ride', // имя файла без расширения color: '#e6194b', // цвет из палитры (8 цветов, цикл) tracks: [ { name: 'Morning Ride', points: [[lon, lat, ele, time], ...], stats: { distanceKm, elevGain, elevLoss, eleMin, eleMax } } ], waypoints: [ { lon, lat, name, ele } ], sourceId: 'gpx-source-', layerId: 'gpx-layer-', waypointLayerId: 'gpx-wpt-' } ]; ``` Замечания для разработки: - `ele` / `time` опциональны. При отсутствии `` — `ele = null`, поля статистики высот = `null` (TRZ REQ-F-11, тесты U-05, U-14). - `window.gpxTracks` — единственный источник правды; объекты карты (source / layer / маркеры) **производны** от него и пересоздаются при `map.setStyle()` через `rebuildGpxOverlays()` (REQ-F-13, ADR-002). - Дополнительно потребуется состояние «активный трек» (для статистики и профиля высот) — хранится в `gpx.js`, должно переживать смену стиля. ## 4. Объём данных в памяти Предельный файл 50 МБ ≈ 500K+ точек. Ориентировочный транзиентный профиль: | Стадия | Память (порядок) | |---|---| | Строка файла | ~50 МБ | | DOM после `parseFromString` | ~150–300 МБ (освобождается после конвертации) | | Модель `points` + GeoJSON source | десятки МБ на файл | TRZ REQ-F-07 не ограничивает число одновременных треков. Накопление нескольких предельных файлов может исчерпать память вкладки на слабом устройстве — см. риск R-3 в `10-tech-risks.md`. ## 5. Приватность GPX-файлы могут содержать персональные данные (координаты поездок, метки времени `