mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-13 14:32:03 +00:00
feat(apple-health): ingest the activity rings, mindfulness, State of Mind and AFib burden
Six Apple Health signals leave the deferred list and ride POST /api/measurements/batch and the export.zip import end to end: EXERCISE_MINUTES, STAND_MINUTES and STAND_HOURS (the exercise and stand rings), MINDFUL_MINUTES, STATE_OF_MIND_VALENCE (iOS 18 State of Mind, -1..1) and AFIB_BURDEN (AFib History, percent of the week). The ring types and mindful minutes are cumulative, so the daily rollup is their sum; AFib burden is scaled strictly from Apple's fraction and a value above 1 is refused rather than guessed at. The archive import takes mindful minutes from the session's dates and skips idle stand hours. Every registry carries them: units, ranges, labels in all locales, categories, chart tokens, report catalogue (mindful minutes and the valence fenced as sensitive), signal registry with FHIR codings, and MCP exposure for the three ring types only. Workout GPS tracks are now an opt-in, off by default (PATCH /api/auth/me/workout-routes, a switch on Data & Privacy). While it is off, the workout batch route and the export import keep every workout and drop its track with the same per-entry status. With it on, the import reads the referenced GPX files from the archive one bounded member at a time, thins each to the point cap and stores it sealed. The climb a track carries is written to Workout.elevationM at write time, so the workout insight no longer opens the track, and the AI egress guard now freezes the set of files that read route geometry.
This commit is contained in:
1 parent
d44af06467
commit
b045703493
58 files changed
+2233
-163
No files matched your search
+155
-3
@@ -4315,6 +4315,12 @@ paths:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
- in: query
|
||||
name: from
|
||||
schema:
|
||||
@@ -9455,6 +9461,52 @@ paths:
|
||||
$ref: "#/components/schemas/ErrorEnvelope"
|
||||
"422": *a4
|
||||
"429": *a5
|
||||
/api/auth/me/workout-routes:
|
||||
get:
|
||||
tags:
|
||||
- Auth
|
||||
summary: Read the workout-route opt-in
|
||||
description: Whether the GPS track of a workout is kept. Off by default. While it is off, `POST /api/workouts/batch` and
|
||||
the Apple Health export import keep every workout but drop its `route`; the per-entry status is the same as with
|
||||
the route stored. No AI path ever reads a stored track.
|
||||
responses:
|
||||
"200":
|
||||
description: The current flag.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/GetWorkoutRoutesEnvelope"
|
||||
"401": *a1
|
||||
"422": *a4
|
||||
"429": *a5
|
||||
patch:
|
||||
tags:
|
||||
- Auth
|
||||
summary: Set the workout-route opt-in
|
||||
description: Hard-set, idempotent, audit-logged. Rate-limited 60 / min per user; body capped at 1 KB. Turning it off
|
||||
stops new tracks; tracks already stored stay until their workout is deleted.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/WorkoutRoutesPatchRequest"
|
||||
responses:
|
||||
"200":
|
||||
description: The resolved next flag.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/PatchWorkoutRoutesEnvelope"
|
||||
"401": *a1
|
||||
"413":
|
||||
description: Request body exceeds 1024 bytes. Nothing was written.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorEnvelope"
|
||||
"422": *a4
|
||||
"429": *a5
|
||||
/api/auth/me/use-central-codex:
|
||||
get:
|
||||
tags:
|
||||
@@ -25948,7 +26000,7 @@ components:
|
||||
type: number
|
||||
const: 2
|
||||
leaves:
|
||||
maxItems: 95
|
||||
maxItems: 101
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
@@ -26008,7 +26060,7 @@ components:
|
||||
type: number
|
||||
const: 2
|
||||
leaves:
|
||||
maxItems: 95
|
||||
maxItems: 101
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
@@ -26843,6 +26895,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
value:
|
||||
type: number
|
||||
measuredAt:
|
||||
@@ -28524,6 +28582,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
biomarkerId:
|
||||
type: string
|
||||
minLength: 1
|
||||
@@ -29023,7 +29087,7 @@ components:
|
||||
type: number
|
||||
const: 2
|
||||
leaves:
|
||||
maxItems: 95
|
||||
maxItems: 101
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
@@ -29358,6 +29422,14 @@ components:
|
||||
- labsLocalOcrEnabled
|
||||
description: Turn browser-side OCR on or off for lab-report scanning. When on, a text-only provider can still read a
|
||||
paper report because the image is transcribed on the device and only the TEXT is sent.
|
||||
WorkoutRoutesPatchRequest:
|
||||
type: object
|
||||
properties:
|
||||
storeWorkoutRoutes:
|
||||
type: boolean
|
||||
required:
|
||||
- storeWorkoutRoutes
|
||||
description: Keep or stop keeping the GPS track of new workouts. Off by default.
|
||||
UseCentralCodexPatchRequest:
|
||||
type: object
|
||||
properties:
|
||||
@@ -30186,6 +30258,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
description: DB-stored measurement category. v1.4.23 added 7 Apple Health values (HRV, resting HR, active energy,
|
||||
flights, walking/running distance, VO2 max, body temperature).
|
||||
InsightsSettingsPutRequest:
|
||||
@@ -38851,6 +38929,8 @@ components:
|
||||
type: boolean
|
||||
labsLocalOcrEnabled:
|
||||
type: boolean
|
||||
storeWorkoutRoutes:
|
||||
type: boolean
|
||||
onboardingCompletedAt:
|
||||
anyOf:
|
||||
- type: string
|
||||
@@ -38961,6 +39041,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
value:
|
||||
type: number
|
||||
valueMin:
|
||||
@@ -39701,6 +39787,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
- type: "null"
|
||||
biomarkerName:
|
||||
anyOf:
|
||||
@@ -42176,6 +42268,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
dateKey:
|
||||
type: string
|
||||
pattern: ^\d{4}-\d{2}-\d{2}$
|
||||
@@ -43354,6 +43452,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
- type: "null"
|
||||
intervalDays:
|
||||
anyOf:
|
||||
@@ -43566,6 +43670,12 @@ components:
|
||||
- WAIST_TO_HEIGHT
|
||||
- WHO5_SCORE
|
||||
- SCI_SCORE
|
||||
- EXERCISE_MINUTES
|
||||
- STAND_MINUTES
|
||||
- STAND_HOURS
|
||||
- MINDFUL_MINUTES
|
||||
- STATE_OF_MIND_VALENCE
|
||||
- AFIB_BURDEN
|
||||
metricSlot:
|
||||
type:
|
||||
- string
|
||||
@@ -55934,6 +56044,48 @@ components:
|
||||
- data
|
||||
- error
|
||||
additionalProperties: false
|
||||
GetWorkoutRoutesEnvelope:
|
||||
type: object
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/WorkoutRoutesResponse"
|
||||
error:
|
||||
type: "null"
|
||||
meta:
|
||||
type: object
|
||||
properties:
|
||||
requestId:
|
||||
type: string
|
||||
additionalProperties: false
|
||||
required:
|
||||
- data
|
||||
- error
|
||||
additionalProperties: false
|
||||
WorkoutRoutesResponse:
|
||||
type: object
|
||||
properties:
|
||||
storeWorkoutRoutes:
|
||||
type: boolean
|
||||
required:
|
||||
- storeWorkoutRoutes
|
||||
additionalProperties: false
|
||||
PatchWorkoutRoutesEnvelope:
|
||||
type: object
|
||||
properties:
|
||||
data:
|
||||
$ref: "#/components/schemas/WorkoutRoutesResponse"
|
||||
error:
|
||||
type: "null"
|
||||
meta:
|
||||
type: object
|
||||
properties:
|
||||
requestId:
|
||||
type: string
|
||||
additionalProperties: false
|
||||
required:
|
||||
- data
|
||||
- error
|
||||
additionalProperties: false
|
||||
GetUseCentralCodexEnvelope:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
Reference in new issue
Block a user