docs: документация переведена на канон av-dev-pm
- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги переименованы с транслита на английские, 85 ссылок поправлены - conventions.md разобран в docs/conventions/, local-research.md — в docs/research/, review-journal.md — в docs/review.md с разделом настройки конвейера; заведены security.md, adr/ и .pm.json - шаг docs.py check добавлен в task gate; поведение в architecture.md помечено девятью маркерами долга, database.md получил настройки с числовым значением
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# Импорт родного экспорта 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. Старые версии формата годятся как регрессионный набор.
|
||||
Reference in New Issue
Block a user