diff --git a/docs/tasks/items/apple-export-import.md b/docs/tasks/items/apple-export-import.md index bb2cd82..7dcda8b 100644 --- a/docs/tasks/items/apple-export-import.md +++ b/docs/tasks/items/apple-export-import.md @@ -37,9 +37,34 @@ должен ничего менять; - `export_cda.xml` игнорируем — это клинический формат тех же данных. +## Импорт выставляет пометку покрытия + +Импорт — единственный, кто знает, какой период каким слоем обеспечен, поэтому +пометку ставит он, а не отдельный проход задним числом. + +Форма пометки решена в [lower-layer-expiry](lower-layer-expiry.md): **одна +строка на диапазон** — `метрика + слой + период + «покрыто проверенным +экспортом»`. Провенанс на каждую точку не заводим: вопрос диапазонный, а поле у +точки стоило бы того же объёма, который устаревание нижнего слоя и приходит +экономить. + +Два условия, оба из ограничителей той задачи: + +- пометка ставится **по проверенному** импорту, а не по факту запуска команды. + Проверка та же, что уже названа в приёмке: непрерывность по дням и сходимость + сумм с часовым слоем HAE на пересечении периодов. Не сошлось — пометки нет, + и это не отказ импорта, а честный отказ от обещания; +- пометка **ничего не удаляет**. Она только даёт устареванию нижнего слоя + основание; само удаление включается отдельно и позже. + +**`stateOfMind` пометку не получает никогда** — его в экспорте Apple нет ни +одним типом (находка 42), источник у него единственный, и устаревание к нему +неприменимо. Это надо записать явно, а не оставить следовать из отсутствия +данных. + Готово, когда история за несколько лет лежит в слое `sample`, повторный импорт -не меняет ничего, а суммы по слою сходятся с часовым слоем HAE на пересечении -периодов. +не меняет ничего, суммы по слою сходятся с часовым слоем HAE на пересечении +периодов, а покрытые периоды помечены и видны без пересборки. Архивы: `/home/av/MediaEverything/HealthData/apple_health/` — девять штук, 2021-12 … 2026-08. Старые версии формата годятся как регрессионный набор. diff --git a/docs/tasks/items/lower-layer-expiry.md b/docs/tasks/items/lower-layer-expiry.md index b87dbb1..bf439a6 100644 --- a/docs/tasks/items/lower-layer-expiry.md +++ b/docs/tasks/items/lower-layer-expiry.md @@ -17,7 +17,40 @@ - пометка ≠ удаление. Удаление включается только после того, как восстановление из экспорта отработает на живых данных хотя бы раз. +## Чем помечать: разряд на диапазон, а не провенанс на точку + +Решено при постановке 2026-08-04. Пометка — **одна строка на диапазон**: +`метрика + слой + период + «покрыто проверенным экспортом»`. Не поле у точки. + +Основание — соотношение цены и потребности: + +- **вопрос, на который надо ответить, диапазонный**: «за этот период нижний + слой обеспечен настоящими сэмплами Apple, посекундную развёртку HAE можно + выбросить». Он не требует знать, из какой доставки приехало конкретное число; +- **цена совпадает с самой проблемой**: нижний слой растёт на ~100 тысяч + координат в сутки, и поле у точки платит тем же объёмом, который задача и + пришла экономить. Пометка на диапазон — десятки строк. + +**Провенанс на точку рассмотрен и отвергнут по цене, а не по ненадобности.** +Различать эти два основания важно: отказ по ненадобности закрывает вопрос +навсегда, отказ по цене — только до появления потребителя. Появится тот, кому +нужно «покажи, из какой конкретно доставки это число», — решение +пересматривается. Сегодня такого потребителя нет: ни агент-медик, ни трекер, ни +игра его не просят ([passport.md](../../passport.md)). + +Отдельно стоит помнить, что **отделить старое от нового можно и без пометок**: +состояние по определению есть `import(экспорт) + replay(доставок по +received_at)`, порядок известен, происхождение значения выводится пересборкой. +Пометка нужна ровно затем, чтобы отвечать на этот вопрос **при чтении**, не +пересчитывая. + +Смежное: у сущностей (`workouts`, `stateOfMind`) провенанс уже есть — колонки +`delivery_id` и `delivery_received_at` (миграция `00007`). У часового объекта +метрики есть `first_delivery_id` (миграция `00003`), но это **первая** доставка, +а не источник каждой точки, и для этой задачи он не годится. + Приоритет низкий: пока история измеряется днями, экономить нечего. Задача станет актуальной, когда нижний слой перевалит за несколько гигабайт. -Зависит от импорта экспорта Apple — до него помечать нечем. +Зависит от импорта экспорта Apple — до него помечать нечем; выставляет пометку +[apple-export-import](apple-export-import.md).