Files
healthlog/docs/tasks/items/apple-export-import.md
T
avandClaude Opus 5 a53d0f0f2f задачи: мета переехала в блок, поле «Хук» стало «Зачем»
49 файлов, миграция сделана командой tasks.py check --fix — той самой, ради
которой в скрипте оставлена читаемость старой формы. Побочно тот же прогон
проставил тег decomposed целям, у которых есть задачи: это его штатная работа.

check после миграции зелёный, индексы согласованы.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 17:31:29 +03:00

46 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Импорт родного экспорта Apple Health
- **Секция:** ядро
- **Зачем:** Слой sample пуст: полная история и точные сэмплы лежат в zip-архиве и никуда не едут
- **Теги:** goal:native-export-import
Слой `sample` пуст: настоящих сэмплов HealthKit в потоке нет вовсе — HAE отдаёт
посекундную развёртку, а не измерения (находка 34). Полная история и точные
сэмплы лежат в zip родного экспорта.
Это же основание для устаревания нижнего слоя и единственный способ поднять
историю глубже недели: дыра старше недели проходами синхронизации не чинится.
Формат разобран на девяти экспортах за 5.5 лет (находки 42–45), гадать не
придётся:
- **версии 11 → 13 → 14**, на 14 стоит больше года; за всё время **ни один тип
записи не исчез**, только добавлялись. Значит незнакомый тип — новый тип, а
не сломанный парсер: падать на нём нельзя;
- **`Correlation`** — обёртка из двух записей, ею приезжает давление. Появилась
только в 2026 году. Парсер по одним `<Record>` разберёт давление как две
несвязанные метрики и потеряет их парность;
- **`WorkoutStatistics`** внутри тренировки — с 2024 года;
- **имя файла локализовано**: `экспорт.xml`, не `export.xml` — так во всех
девяти архивах;
- **DTD расходится с данными** (в v11 у `<Me>` на атрибут больше объявленного)
— валидировать документ его же DTD нельзя;
- объём: 1.6 ГБ XML и 3.6 млн записей в свежем экспорте — только потоковый
разбор, документ целиком в память не влезет.
Шаги:
- потоковый разбор `экспорт.xml` в слой `sample`, включая `Correlation`;
- `HeartRateVariabilityMetadataList` с `InstantaneousBeatsPerMinute` — это
тот же `heartbeatSeries`, что в HAE (находка 39), 1.25 млн ударов;
- маршруты GPX и ЭКГ отдельными файлами — их в XML нет;
- заливка кусками по годам, идемпотентно: повторный импорт того же архива не
должен ничего менять;
- `export_cda.xml` игнорируем — это клинический формат тех же данных.
Готово, когда история за несколько лет лежит в слое `sample`, повторный импорт
не меняет ничего, а суммы по слою сходятся с часовым слоем HAE на пересечении
периодов.
Архивы: `/home/av/MediaEverything/HealthData/apple_health/` — девять штук,
2021-12 … 2026-08. Старые версии формата годятся как регрессионный набор.