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,39 @@
|
||||
# Словарь категориальных значений → коды HealthKit
|
||||
|
||||
**Секция:** ядро · **Хук:** Фазы сна и типы тренировок приходят строками русской локали — с экспортом Apple их не сверить · **Теги:** goal:parsing-and-storage
|
||||
|
||||
HAE отдаёт перечислимые значения строками локали телефона: «БДГ», «Сидячий
|
||||
образ жизни», «В помещении Ходьба». Родной экспорт Apple при этом говорит
|
||||
кодами (`HKCategoryValueSleepAnalysisAsleepREM`) — источники несопоставимы
|
||||
(находка 37).
|
||||
|
||||
Три следствия, и третье решающее: клиент угадывает словарь; смена языка
|
||||
телефона молча расколет историю; сверить покрытие экспортом нечем — а на этой
|
||||
сверке стоит устаревание нижнего слоя.
|
||||
|
||||
Решение (вариант «б»): строка хранится **дословно**, рядом кладётся выведенный
|
||||
код. Словарь ключуется парой `(локаль, строка)`, локаль берётся из
|
||||
`Accept-Language`. Незнакомая строка → пустой код, а не догадка.
|
||||
|
||||
**Словарь фаз сна уже выведен** сопоставлением потока с экспортом за тот же
|
||||
период (находка 43) — составлять руками не нужно:
|
||||
|
||||
```
|
||||
Основная → AsleepCore Бодрствование → Awake БДГ → AsleepREM
|
||||
Глубокий → AsleepDeep В кровати → InBed Во сне → AsleepUnspecified
|
||||
```
|
||||
|
||||
Тем же способом добираются `heart_rate.context` и типы тренировок.
|
||||
|
||||
Осложнение, всплывшее на истории экспортов: **коды тоже не вечны.** Одни и те
|
||||
же записи сна приезжают как `…Asleep` в экспорте 2021 года и как
|
||||
`…AsleepUnspecified` в экспорте 2026-го: Apple переименовала значение и
|
||||
переписывает историю при выгрузке (находка 43). Значит словарь должен
|
||||
переживать переименование самих кодов, иначе после обновления iOS история
|
||||
расколется вторично — уже на «стабильной» стороне. Простейшее решение: хранить код как есть, а
|
||||
эквивалентность старых и новых имён держать отдельной таблицей синонимов.
|
||||
|
||||
Готово, когда фазы сна из потока и из экспорта Apple сравниваются напрямую, а
|
||||
`/stats` показывает строки, для которых кода ещё нет.
|
||||
|
||||
`stateOfMind` в словаре не нуждается — он и так шлёт коды HealthKit.
|
||||
Reference in New Issue
Block a user