# m06-fit-import — план работ (d-dev) > Модуль: `Server.WatchBody.Import` (FitParser/TcxGpxParser/ > WorkoutImporter/ProgramPackageImporter/ImportService) + режим > `--mode import` в единой точке входа CLI. > Алгоритм: `std1\_rules\d\d-dev.md` (итерационная разработка по > модулям). Требования: [module_reqs.md](module_reqs.md). > Зависимости: m01 (репозитории, DONE), m02 (единая точка входа CLI — > DONE), m03 (ProgramStore — создание версий пакета, DONE). | Шаг | Что делаем | Статус | |---|---|---| | 0 | Модульные документы: module_reqs.md / readme.md / SKILL.md | ✅ 2026-10-18 | | 1 | Список единиц (классы/методы/конфиг/тесты) | ✅ 2026-10-18 | | 1.3 | **Пользователь!** утверждение списка | ⬜ | | 2 | Спецификации: api_specs (facts-схема, сопоставление, пакет) | ✅ 2026-10-18 | | 2.4 | **Пользователь!** утверждение спецификаций | ✅ 2026-10-18 | | 3 | Реализация + тесты | ✅ 2026-10-18 (тесты Web 93/93, из них m06 — 12; Core 56/56; psql 123/123; CLI-смок --mode import пройден) | | 3.4 | **Пользователь!** утверждение реализации (закрытие модуля) | ✅ 2026-10-18 | | 4 | Завершение: план, примечания | ✅ 2026-10-18 — **Модуль завершён** (2026-10-18). Следующий по плану этапа 7 — m07-fit-fetch (итерация 2). | Статусы: ⬜ не начат · 🔄 в работе · ✅ готов. ## Примечания по ходу работ 1. **SDK**: NuGet `Garmin.FIT.Sdk` 21.218.0, namespace `Dynastream.Fit` (не `Garmin.Fit.*`); API потоковый: `Decode.IsFIT/CheckIntegrity/Read` (Stream), события `MesgEvent` доставляют базовый `Mesg` — типы конструируются из него по `Mesg.Num` (`new SessionMesg(mesg)`); у `SetMesg` — `GetRepetitions` (не NumReps); `Encode` для .fit-фикстур тестов. 2. **Errata З-35 (доведение)**: `program_select`/`program_get` не возвращали `external_id` — rev. 2 обеих функций (+ DROP прежней row-типной сигнатуры), маппинг в `ProgramRepository.Select/Get`, синхронизированы func_specs и mock-колонки Core.Tests; psql-тесты перегнаны — PASS. 3. **Errata m01**: `workout_insert` fit-полей не принимает (дизайн db-m-8) — строка «только .fit» пишется Insert + Update (как sync, errata m02). 4. **Устройство в .fit**: `garmin_product` у тестового файла декодируется в `null`, фактическое устройство — числом в `product` (Fenix6sAsia = 3513) — `device` пишет идентификатор как есть. 5. `external_id` пакета уникален глобально (З-35): один пакет (`program_id`) назначается одному атлету — повтор тому же атлету даёт новую версию, повтор другому — UNIQUE-ошибку (файл остаётся, лог; формат program-import-format.md §3.4 соблюдён). 6. `Sport` в TCX — атрибут `Activity[@Sport]`, не элемент.