Soigneur FHIR Implementation Guide
0.1.0 - ci-build Germany flag

Soigneur FHIR Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Artifacts Summary

This page provides a list of the FHIR artifacts defined as part of this implementation guide.

Structures: Questionnaires

These define forms used by systems conforming to this implementation guide to capture or expose data to end users.

Daily log (morning readiness)

The small fixed morning-readiness Questionnaire the two-step briefing waits on (04 15.11 / 15.22c, ADR 0062).

Session assessment (post-ride)

Post-ride self-assessment: session RPE, feel, vs-plan, optional in-ride drink/fuel answers and notes (05 §14.5, ADR 0062; the drink/fuel items are issue #610). RPE/feel are also stamped as Activity Group members; vs-plan, drink/fuel and notes stay on the QuestionnaireResponse.

Structures: Resource Profiles

These define constraints on FHIR resources for systems conforming to this implementation guide.

Activity Group Observation

A ride or strength session as an Observation Activity Group (HL7 Physical Activity IG), code 73985-4, with per-metric member Observations via hasMember (04 §15.2b, ADR 0002). Anchors adherence via basedOn → CarePlan/ServiceRequest and the raw file via derivedFrom → the CcRawFileIndex DocumentReference (Binary is not a valid derivedFrom target in R4; the lineage to the raw blob is on the CcTranslationProvenance entity[source]).

Activity Measure Observation

One per-metric member of an Activity Group (avg/Weighted Power, mean/max HR, cadence, Load, Intensity, decoupling, zone times, …). Code from cc-observations or LOINC exercise; linked to the group via the group's hasMember (04 §15.2b).

Amenorrhoea / Oligomenorrhoea Condition

Amenorrhoea (or oligomenorrhoea) as the RED-S / low-energy-availability sentinel under the female-athlete axis (C.0). SNOMED 14302001 (absent menstruation) or 56877008 (oligomenorrhoea).

Athlete Dossier (Composition)

The athlete-owned narrative profile (ADR 0041): motivation & true goal, life context & constraints, training history & self-image, equipment, strength equipment, and communication preferences. (Health context is not held here — it lives as coded Condition/MedicationStatement and is regenerated into the profile at read.) Rendered (with the coded layer) into the coach's text profile by reconstruct_profile; amended, never silently rewritten.

Athlete Goal (Goal)

The athlete's overarching / true goal captured at onboarding (ADR 0040 §1). description carries what they are really training for; category codes the goal type (competitive / endurance / general fitness); target.due[x] carries an optional target date; lifecycleStatus tracks the goal.

Athlete Message (Communication)

An athlete-facing message: outbound email delivery (invitation/reminder) or an in-app coach-ask turn / chat-notice / open HITL card / hand-off kickoff divider (category cc-comm:llm-turn / chat-notice / chat-card / handoff-kickoff, ADR 0044/0116/0115). category is required; medium is email for outbound delivery and in-app for chat capture; partOf may carry an idempotency parent for email sends.

Athlete Watchlist (List)

The single working watchlist of open threads the coach is tracking for an athlete (04 §15.12), keyed by cc-plan:watchlist. Each entry.item points at the resource being watched (an Observation, CarePlan, Condition, etc.).

Athlete-declared Allergy/Intolerance (AllergyIntolerance)

An allergy or intolerance the athlete declares at onboarding, captured so the coach keeps fueling and supplement suggestions safe (ADR 0041). Athlete-declared: verificationStatus unconfirmed; the substance is carried as free-text code.text.

Athlete-declared Condition (Condition)

A medical condition the athlete declares at onboarding. Athlete-declared, so verificationStatus is unconfirmed; the code is carried as a free-text CodeableConcept (athletes describe, they do not code).

Availability Block (Appointment)

A plan-independent absence/restriction block the coach records from chat or the athlete enters manually (ADR 0071). cc-ext-availability-block marks it; cc-ext-availability-type is the reason (calendar label); cc-ext-training-impact (lock-step with core.plan Absence.category) feeds absence layering. description = short label; comment = free-text coach context. Guardrail invariant: never carries cc-ext-external-planner.

Body height Observation

Athlete body height (LOINC 8302-2), captured at onboarding as an invariant physiological axis (ADR 0040 §1).

Body weight Observation

Athlete body weight (LOINC 29463-7), the current-weight live value the coach tracks (ADR 0040 §1). May be captured from the daily-log QR (manual) or Garmin Connect (Index scale); both stamp the same code so a code query unions the sources (source-agnostic reads).

Coach Insight (DocumentReference)
A durable, curated coaching insight — a learned behavioural/physiological/health pattern, preference, or constraint (ADR 0070). status current superseded (never deleted); relatesTo[replaces] chains supersessions so history stays queryable. category is the insight kind; cc-ext-insight-confidence + cc-ext-insight-last-reinforced carry the ratchet/decay; context.related links the source Communications/Observations.
Coach Note (DocumentReference)

A point-in-time note the coach records about the athlete (ADR 0041). type is the coach-note cc-doc code; content carries the note; context.related may link the resource(s) that prompted it.

Coaching Frame — Core (Composition)

The invariant-derived coaching policy (1-10): strategy, periodization, weekly schedule, recovery cadence, overload triggers, intensity distribution, fueling, FTP retest cadence, day-shift, adaptation policy. Written only by the guarded derive-frame job; re-derivation writes a new version (relatesTo=replaces prior Core). Carries cc-ext-derived-from-invariant-hash — the deterministic materiality-diff anchor (ADR 0047) — plus the byte-exact snapshot it hashes (cc-ext-derived-from-invariant-snapshot, the frame-materiality gate's old-state diff anchor, ADR 0155) and the dirty reason that triggered the write (cc-ext-derived-for-reason — the durable 'why', predicate vocabulary, ADR 0155's 2026-10-02 amendment). A hidden system artifact, never shown to the athlete (04 §15.5, ADR 0003).

Coaching Frame — Live (Composition)

The fast-moving overlay (11-12): watchlist seeds, current-phase pointer, current volume tier, standing flags, preserved patterns, and the progression-bias position (ADR 0205) — the live-class current branch + evidence ledger the mechanical calibration moves, resolved against the Core's bias envelope. Amended in place by weekly-retro / build-plan / adapt-plan; carries derivedAgainstCore → the Frame Core version it was written against (04 §15.5).

Coaching-write Provenance (Provenance)

The agent's mutation log (ADR 0144): one Provenance per coaching write, submitted in the same transaction as the write. target lists the changed resource(s) plus the Patient (the athlete token searches Provenance only as target=Patient); activity carries the data operation and, where one applies, the Soigneur domain activity; reason.text is the coach's one-line reason. The author is the coach agent as an identifier-only logical reference — never a literal Type/id, since no agent resource exists and a dangling literal fails referential integrity — with the serving lane and model on cc-ext-agent-context. The athlete joins as verifier (accepted a consent card) or informant (the write came from their own words). entity[source] names the conversation thread by identifier; entity[revision] references the exact prior version of an updated resource.

Daily-log Panel (Observation grouping)
Groups one morning daily-log submission's subjective member Observations via hasMember (04 §15.11), the FHIR-native panel pattern (mirrors CcActivityGroup). A stable identifier daily-log {patient} {date} makes it non-resubmittable per date and keeps the briefing trigger idempotent; derivedFrom links the source QuestionnaireResponse.
Daily-log Response (QuestionnaireResponse)
One daily-log submission (04 §15.11). A stable identifier daily-log {patientId} {date} makes it non-resubmittable per date and the briefing trigger idempotent.
Day Call Observation (per-day)
The day's coaching decision record (ADR 0086 amendment, ADR 0144, ADR 0154): one per athlete-local day from today to the day-call horizon (today + 14 days), keyed by the day-call {patient} {date} business identifier. code = cc-observations day-call; valueCodeableConcept = cc-day-call#train (the session shape rides in note) or cc-day-call#abstain. Written by the briefing, and by coach-ask, the review and the plan lanes through edit_day_call; every revision updates in place (FHIR history is the evolution record) beside a CcAgentProvenance. It is the single record of the day's decision: the debrief's next decision references it, the home cards render its current version. Gates the home schedule CTA and grounds the workout designer; past days are history and never written. The plan-action stance component (ADR 0154) states what the coach did about the plan behind the call.
FTP-family Observation

An FTP / eFTP / CP / W-prime / P-max value. method is required and distinguishes accepted/set vs an estimator (04 §15.2c). The accepted-FTP series is the FTP update log; the anchor value lives in the live profile.

Ferritin Observation

Serum ferritin, the marker for the hidden-iron-deficiency sub-phenotype (C.0): a plateau/fatigue cause that mimics overreach but needs iron screening, not rest. LOINC 24373-3.

Follow-up Item (Task)
An open tentative-signal item the coach opened from a low-commitment athlete signal and carries forward until it resolves (ADR 0080). code = cc-task#follow-up; cc-ext-follow-up-date is the day it is next due (re-ask/resolve); description is the item in the coach's words; priority carries urgency (routine/urgent); businessStatus records the resolution outcome (confirmed / lapsed) once closed. Lifecycle via Task.status: requested (open) → in-progress (re-asked, optional) → completed (resolved, businessStatus = confirmed lapsed) or cancelled (dropped). cc-ext-follow-up-scope (issue #638) shape-scopes a watch item to a session class; cc-ext-follow-up-situation (ADR 0080's situational amendment) links an item born from a temporary calendar situation to its CcAvailabilityBlock — the sweep resolves a linked item automatically when the situation ends, an unlinked item persists until answered.
HR-threshold Observation

A heart-rate anchor value (LTHR). method is required and distinguishes a field-test result from athlete acceptance (ADR 0090). The accepted-LTHR series is the HR-anchor update log, mirroring the FTP family (04 §15.2c); the anchor value lives in the live profile / prescription resolution.

Ingestion / Translation Provenance (Provenance)

Provenance for the ingestion / authoring chain (04 13 / 15.8): the activity that produced the target resource(s), the author agent that did it (a Device for coach/translator writes, the athlete for athlete writes), and — for translations — the source Binary the target derived from.

Lap Observation (per-segment record)

One provider lap (manual lap or provider interval split) as a component Observation: index, type (ACTIVE/REST/lap-button), duration, moving time, and the per-lap metric values (average/max/Weighted Power, mean/max HR, cadence, distance, elevation gain) as components. Linked to its ride via derivedFrom → CcActivityGroup, never via hasMember — the group's member walk stays the per-metric surface. The session-level decoupling/efficiency members stay on the group; per-lap drift math is computed downstream from these records. ADR 0176.

Life-log Event (Observation)

A dated life event the coach records from chat (ADR 0072): the free-text fact in valueString, when it happened in effectiveDateTime, optional elaboration in note. category = social-history. Read by the timed life-log reader, never charted.

Metric-altering Medication (MedicationStatement)

An athlete-declared medication that alters heart rate or training response, captured at onboarding so the coach interprets HR-based metrics correctly (ADR 0040). Athlete-declared; the medication is carried as a free-text CodeableConcept (athletes name a drug, not a code).

Microcycle Template (PlanDefinition)

An athlete-agnostic weekly microcycle template (04 §15.13, ADR 0048). type=workflow-definition; action[] references session ActivityDefinitions (CcWorkoutActivityDefinition) one per day, with relatedArtifact citations to the corpus. Used by the plan-authoring skills for slot assignment; not instantiated via $apply (the skills read it to enumerate sessions, then instantiate each day's ServiceRequest client-side).

Onboarding-capture Provenance (Provenance)

Stamps the resources written by the consent-gated onboarding transaction Bundle (ADR 0040 / ADR 0041). Its presence is the onboarding completion signal, replacing QuestionnaireResponse.status = completed: an abandoned interview writes nothing and leaves no Provenance, so onboarding simply restarts. activity = onboarding-capture; the author is the coach agent Device acting as a mechanical scribe under the athlete's own compartment-scoped token; target lists every resource the interview wrote.

Per-day Workout Prescription (ServiceRequest)

The instantiated per-day prescription (04 §15.4b, ADR 0048). intent=plan; basedOn → CarePlan (or absent for one-off No-plan); occurrenceDateTime = absolute date; code = session class; cc-ext:stepBlock carries the %FTP-relative step grammar snapshot; cc-ext:instantiatedFrom → the source ActivityDefinition template.

Plan / Experiment Outcome (DiagnosticReport)

Every plan ends in a DiagnosticReport — the coach's composed verdict on the block or experiment (04 §15.21, ADR 0009). basedOn → the CarePlan chain (a review can span the chain); result → the Observations that evidence the verdict; conclusion = narrative learnings.

Raw Provider Artifact (Binary)

A raw artifact downloaded from a provider before translation to canonical FHIR (04 13 / 16.1). contentType records the provider payload's media type; securityContext scopes the blob to its owning Patient. Its translation lineage is carried by a CcTranslationProvenance whose entity[source] points here.

Raw Provider File Index (DocumentReference)

Searchable index for a raw provider Binary (04 15.6 / 15.7). A Binary is not itself searchable (FHIR spec) and is not a valid Observation.derivedFrom target (R4), so a DocumentReference carries the discoverable metadata and points at the blob via content.attachment.url → Binary/{id}. Derived Observations (e.g. the CcActivityGroup and its sampled stream) reference THIS resource via derivedFrom; the download/translate lineage back to the raw blob is carried by the CcTranslationProvenance entity[source]. When the provider serves the original export file (e.g. the downloaded FIT), it is stored as a second Binary and indexed as a second content entry — the same document in its native format — so every raw blob is reachable over a FHIR edge (never only by id convention, issue #660).

Session Match Observation (athlete assertion)
The athlete's assertion of which session fulfilled a day's prescription (ADR 0178): one per athlete-local day per live prescription, keyed by the session-match {patientId} {date} {prescriptionId} business identifier. code = cc-plan session-match; basedOn = the CcWorkoutServiceRequest it answers; focus = the Activity Group asserted as the prescribed session. The explicit override layer above the ingest-time basedOn bridge (ADR 0096) and the earliest-start default in the shared matcher (core.plan.adherence): a final assertion wins, a cancelled assertion blocks re-defaulting until the athlete relinks. Unlink is a status flip in place — never a delete (the audit trail stays, issue #301 convention).
Session-assessment Response (QuestionnaireResponse)
One post-ride self-assessment (ADR 0062). Identifier session-assessment {patientId} {activityId} makes it non-resubmittable per activity; partOf points at the Activity Group. RPE/feel are also written as CcActivityMeasure members; vs-plan and notes stay on this QR.
Sex Assigned At Birth Observation
Sex assigned at birth — the clinical, physiological sex axis the coach uses to seed physiology defaults (FTP baselines, the sex-asymmetric mechanisms; C.0). Kept distinct from Patient.gender (administrative gender): birth sex is a clinical fact, gender is administrative (ADR 0036). LOINC 76689-9; the value reuses the standard administrative-gender codes (male female other) so onboarding's chooser is unchanged.
Soigneur Athlete (Patient)

The athlete. Athlete-owned, but the coach agent MAY write Patient as a mechanical, HITL-confirmed, Provenance-stamped scribe under the athlete's own compartment-scoped token — a blast-radius-1 write, no privileged worker (ADR 0040, superseding the earlier coach-never-writes-Patient guard). Timezone and the athlete-preference cc-ext-* (discipline, weekly hours, fixed days, scheduling mode, training age, communication register, plan authority, briefing time, per-channel data sources) are captured at onboarding and carried here (ADR 0040 §1), replacing the retired CcAthletePreferences Basic. birthDate is the age axis; sex-assigned-at-birth — the physiological axis (C.0) — is a clinical CcBirthSexObservation (LOINC 76689-9), NOT Patient.gender, which stays optional administrative gender (ADR 0036).

Soigneur Onboarding / Processing Consent

A versioned, hashed consent record captured at onboarding (ADR 0034; doc 14 4.1; 09 3/§14). Written server-side by the BFF using the athlete's own token (the athlete is the grantor). category is the consent type (Terms of Service and Privacy Policy are separate, independently-versioned records); policy.uri (url#version) pins the operative document version (and satisfies R4 ppc-1); the cc-ext-consent-text extension records the exact shown text's version, effective date, and SHA-256 hash so a wording/version change re-prompts on next login.

Subjective Observation (diary / session self-report)

One subjective self-report signal extracted from a daily-log or session-assessment QuestionnaireResponse (04 §15.11) — a Hooper-style score (valueInteger), an illness/vs-plan classification (valueCodeableConcept), a free-text note (valueString), or the review-declined marker (valueBoolean true, issue #491) — or captured conversationally by the coach (ADR 0093). category = survey; code from cc-subjective; QR-extracted values link the source QuestionnaireResponse via derivedFrom, coach-captured values carry note provenance instead.

Training Plan (CarePlan)

A phase-scoped training plan (04 §15.4a, ADR 0008; domain per ADR 0096). intent=plan; category = a cc-plan phase; strategy/scheduling-mode/coach-managed/plan-domain extensions; supportingInfo → the Frame Core version it was built against. Plan chains link via replaces; each ends in a DiagnosticReport. The strength plan is a CcTrainingPlan with cc-ext:planDomain = strength — a separate CarePlan managed independently of the cycling plan.

Training-overload Episode (Condition)

A past episode where training tipped into illness, injury or burnout, captured with timing so the coach learns the athlete's overload pattern (ADR 0041). Athlete-declared (verificationStatus unconfirmed); category marks it as an overload episode; onset[x] carries when it happened; code/note carry the detail.

Waist circumference Observation

Athlete waist circumference (LOINC 56086-2), a body-composition live value the coach tracks. Captured from the daily-log QR (manual entry); Garmin does not report waist.

Weekly Retro (DocumentReference)
The weekly consolidation review (ADR 0073), one per ISO week. type is the weekly-retro cc-doc code; content carries the digest narrative; context.period is the ISO week; a stable retro {patient} {isoWeek} identifier keeps the Sunday job idempotent.
Wellness Observation (per-day)

A per-day wellness/derived metric (weight, RHR, HRV, sleep, Body Battery, or a derived Fitness/Fatigue/Form/eFTP value). category per 05 14.9; code LOINC or cc-observations; effectiveDateTime = the date (04 15.2a/§15.2g).

Wellness Series Observation (per-week)

A per-week derived-metric series (Fitness/Fatigue/Form/Load) stored as one component-based valueSampledData Observation per ISO week (04 15.2a/15.2g, ADR 0059). effectivePeriod covers the week; each component carries one metric's 7 daily samples (SampledData period = 86400000 ms = 1 day). Replaces the per-day CcWellnessObservation shape for the PMC series (52 Obs/athlete/yr vs 1460). The optional pmcSeries business identifier (pmc-series|{patientId}|{weekStart}) is the idempotency key for the roller's conditional-create upsert (ADR 0092).

Workout Debrief (DocumentReference)
The coach's formal debrief of a completed session (ADR 0062/0093): authored by the coaching agent (Device) after the athlete submits their session assessment. type is the LOINC progress-note code; content carries the debrief markdown; context.related links the note back to the Activity Group Observation(s) it comments on. A stable identifier debrief {activityId} makes the write idempotent per activity.
Workout Template (ActivityDefinition)

An athlete-agnostic workout template (04 §15.13, ADR 0048). kind=ServiceRequest; code = the session class; useContext carries phase / athlete_state / min_aerobic_base; relatedArtifact cites corpus topics; cc-ext:stepBlock carries the rep_block / rep_set / alternating / microbursts / progressive / lift_set / continuous grammar. Warmup/cooldown templates reference sibling ActivityDefinitions via cc-ext:warmupRef / cooldownRef (or carry cc-ext:warmupKind themselves).

Structures: Extension Definitions

These define constraints on FHIR data types for systems conforming to this implementation guide.

Agent context

The serving lane and model that produced a coaching write, carried on the agent entry of a CcAgentProvenance (ADR 0144). Non-PHI audit facts: the coach agent itself is an identifier-only logical reference (there is no agent resource on the server), so this is where the audit trail records which skill and which model made the change.

Athlete

The athlete a provider Endpoint belongs to (04 §16.2).

Athlete home location

Where the athlete lives — city and/or postal code plus ISO 3166-1 alpha-2 country, with the offline-resolved label, centroid coordinates (4 decimals, ~11 m — the same precision cap MET Norway enforces on forecast queries; never a GPS position) and the resolved IANA timezone. Coach-memorized from conversation, the optional onboarding question, or the settings editor (ADR 0100); drives the local weather guidance (02 G.3, issue #252). Geocoding is offline (vendored GeoNames data, ADR 0100) — location strings never egress. At least one of postalCode / city must be present. Live-class: never dirties Frame Core (ADR 0040 6).

Athlete timezone (IANA)

IANA timezone captured at onboarding; drives all athlete-local scheduling (04 §15.1).

Availability-block flag

True on an Appointment that is a plan-independent availability/absence block (ADR 0071), NOT an external-planner training session. The hard guardrail that keeps availability blocks out of the plan-mode external-plan signal (cc-ext-external-planner).

Availability-block type

Why the availability block exists — drives the calendar label (ADR 0071).

Average temperature (°C)

Ride-average air temperature in degrees Celsius, stamped on the Activity Group for the FTP estimator's heat-exclusion check (above 28°C disarms heat-affected rides). The 1 Hz temperature stream is a separate SampledData Observation for intra-ride heat analysis; this scalar is the fast-access summary.

Briefing time (athlete-local)

Preferred daily-briefing time, athlete-local (ADR 0040 1 / 15 4).

CNS load

Central-nervous-system load of a template session (04 §16.2).

Chat message role

Who authored this in-app Communication payload — athlete, coach, or system notice (ADR 0044).

Coach-managed flag

True when a CarePlan/Appointment is coach-managed (04 15.4c / 16.2; custom SearchParameter coach-managed).

Committed training day

A weekday the athlete committed to (declared fixed day or an athlete-agreed addition from the build conversation). Cycling prescriptions may only land on committed days (ADR 0122).

Communication register

Technicality of the coach's language at constant explanatory depth — plain / intermediate / technical (ADR 0038 / ADR 0040 §1). Storage home moved from the retired invariant QR to this Patient extension.

Consent text version + hash

The exact consent text shown to the athlete, captured on each Consent (ADR 0034; 09 §14): a human-readable version label, the date that policy version took effect, and the SHA-256 hash of the rendered text (item 3 folds in the wellness-popup content hash). A changed version/hash re-prompts the item on next login; the effective date + Consent.policy (url#version) record which policy the athlete accepted.

Content hash

SHA-256 of the resource content (excluding server-managed meta fields and the hash carrier), stamped by ingress pipelines on every write so re-runs can skip unchanged resources (ADR 0055, as revised). Carried in meta.extension because a meta.tag display is not round-trip-safe on FHIR servers that normalize tag displays (fire-arrow-server issue #713).

Continuation credit

The executed bank this successor took from its mid-flight-superseded predecessor (ADR 0198): per-phase executed and credited weeks, the carried ramp position, the measurement basis, and the athlete's fresh-start override. Server-derived from the record (measured time-in-zone), documented once at commit — never a model input.

Cooldown template reference

Reference to the cooldown ActivityDefinition a workout template ends with (04 §15.13).

Debrief next decision

The scheduling decision a reviewed session led to — the second half of the debrief lead the coach call card renders above the debrief (ADR 0130 amendment 2026-09-25, ADR 0142). Since ADR 0144 a Reference to the CcDayCall the review wrote or confirmed (the single record of that day's decision): readers render the call as it stands and mark it updated when its meta.lastUpdated is later than the debrief's date (time, not version — servers strip versions from stored references). A valueString is the legacy frozen form (debriefs filed before ADR 0144), still readable. The headline rides DocumentReference.description.

Debrief takeaway

The lesson a reviewed session carries forward ("pace the first climb lower next time") — immutable historical text on the debrief, labelled as a takeaway and never a scheduling decision (ADR 0144). Scheduling decisions live on the referenced CcDayCall.

Default workout mode

The athlete's default workout locus for push rendering (ADR 0186 §4b): indoor (default when absent) → the power variant always; outdoor → the power variant when a bike power meter is declared, the HR variant otherwise. Read by the push worker; written by the athlete (web). Scheduling is unaffected (prescriptions are always scheduled indoor, ADR 0048/0049).

Derived against Frame Core version

On the Frame Live Composition: the Frame Core version this overlay was written against, so stale overlay entries can be dropped after a re-derive (04 §15.5).

Distance units

The athlete's distance axis (ADR 0219): kilometres (default) or miles for narration and display. The axis cascades: mi also renders speed as mph and elevation as ft; km renders km/h and m. Storage is unaffected — distances stay metres (UCUM m) on record.

External planner flag

True when an Appointment came from an external planner (04 §15.19).

Fixed training day

A day of the week the athlete can reliably train; repeats once per fixed day (ADR 0040 1 / 15 4).

Follow-up date

The date a follow-up Task is next due — the day the coach should re-ask/resolve it. Carried on prescription Tasks (04 §15.20a) and on tentative-signal follow-up Tasks (cc-task#follow-up, ADR 0080).

Follow-up scope

The shape a tentative-signal follow-up Task is scoped to (issue #638, amending ADR 0080): a cc-plan session-class code (session-class-z2, …) marks a shape-scoped watch item — an anomaly that belongs to rides of a similar shape, re-asked at the next ride of that class, with the follow-up date acting as the review horizon (past it the item escalates to the general list). ABSENT = general (raise it wherever relevant, until resolved; every legacy item).

Follow-up situation link

The CcAvailabilityBlock Appointment a tentative-signal follow-up Task was BORN from (ADR 0080's situational amendment): a Reference(Appointment/{id}) marking an item raised because of a temporary calendar situation (a fanless hotel week, a borrowed bike without power, a restricted span). The linked item is transient together with its situation — the daily-loop sweep resolves it lapsed once the block's span ends or the block leaves booked, deterministically, without an athlete reply. ABSENT = the item is independent of every situation and persists until answered. Never carries a block with cc-ext-external-planner (the availability-block guardrail invariant, ADR 0071).

Goal priority

Per-plan goal ranking (04 16.2 / 15.5 — goalPriority lives on the plan, not the frame). Repeat per goal.

HRmax anchor (athlete-confirmed)

The athlete's confirmed HRmax in bpm; the live anchor the Frame Live HR caps (HRmax × percentage) are derived from. Live-class — never dirties Frame Core (ADR 0040 6); the Live HR caps recompute when it moves (ADR 0047 3).

Has chest HR strap

The athlete owns a chest-strap HR monitor (≈ ECG-grade). A quality tier marker — strap HR is trusted for interval-average audits where wrist-optical smoothing is not (ADR 0090, corpus coaching-without-power).

Has head unit

The athlete rides with a head unit — a handlebar display unit, structured workout targets visible while riding.

Has indoor trainer

The athlete has an indoor trainer — a smart trainer, controlled-environment indoor riding with erg-mode power.

Has power meter

The athlete trains with a power meter on the bike(s) the plan covers (ADR 0090). When false/absent, prescriptions use the HR/RPE vocabulary and Load uses the hr-model/hr rungs.

Has sports watch

The athlete has a sports watch recording workout HR (the equipment-floor device, ADR 0090). Typically the connected-platform data source for workouts + wellness.

Indoor activity flag

True when the activity was performed indoors (trainer/controlled environment). Stamped on the Activity Group so the FTP estimator can select indoor rides for the Morton CP model without re-reading the raw stream.

Insight confidence rung

The ratcheting confidence rung the weekly consolidation job reinforces as an insight recurs (ADR 0070). Low-confidence stale insights are de-prioritised in injection — never deleted.

Insight last reinforced

The last time the consolidation job (or a write-time capture) reinforced this insight — the decay anchor (ADR 0070).

Instantiated from template

The ActivityDefinition template a per-day ServiceRequest prescription was built from (provenance only — the prescription is a durable snapshot, not a live reference; 04 §15.4b, ADR 0048).

Intensity distribution target

Target three-zone intensity distribution as percentages (04 §16.2). Sub-extensions z1Pct/z2Pct/z3Pct.

Intervals push fingerprint

SHA-256 of the last Intervals.icu events/bulk upsert body for this ServiceRequest (ADR 0081 write-back echo). The plan-push worker skips the live Intervals call when the fingerprint still matches. Carried in meta.extension — same round-trip rationale as cc-ext-content-hash (ADR 0055 revision).

Invariant snapshot (canonical JSON) this Frame Core was derived from

On the Frame Core Composition: the canonical JSON serialization of the invariant-class snapshot this Core was derived from (or was adopted against, per the frame-adopted Provenance) — the byte-exact old state for the frame-materiality gate's old-vs-new diff (ADR 0155). The SHA-256 over this exact payload is the cc-ext-derived-from-invariant-hash value, so the two stamps can never disagree.

Invariant snapshot hash this Frame Core was derived from

On the Frame Core Composition: the SHA-256 content hash of the invariant-class snapshot this Core was derived from — the deterministic materiality-diff anchor (ADR 0047). A live-class edit that bumps Patient.meta.lastUpdated without changing invariant content leaves this hash unchanged, so the lazy re-derive predicate collapses it to a no-op rather than re-running the expensive Opus derive.

LLM usage

Billed OpenRouter usage that produced this coach Communication — model slug, token counts, USD cost, and per-generation children (ADR 0088). Absent on athlete turns and chat-notices.

Load source

How a per-activity Load (tss) member was derived: power (computed from the ride's power stream), hr-model (estimated from the per-athlete power↔HR model, ADR 0067 / 15 §3.3), or hr (per-sample TRIMP over heart-rate reserve, ADR 0090). Stamped on the Load member so the UI and agent can distinguish measured from estimated Load.

Long-ride cap (minutes)

Maximum long-ride duration in minutes (04 §16.2).

Nutrition prescription scope
standing single — a standing routine the athlete will repeat (confirmed on the approval card) or a one-off for a single target day (confirmed by the athlete's own ask; expires via cc-ext-nutrition-valid-until).
Nutrition routine slot

The routine slot a fueling prescription lives in — morning, pre-ride, in-ride, post-ride or general-diet. One standing order per slot (the upsert's identity half); a multi-slot routine is one order per slot.

OAuth token reference

Key Vault secret reference for the Endpoint's OAuth tokens — tokens live in Key Vault, never in FHIR (04 15.17 / 16.2).

One-off valid until

The athlete-local target day a single-scope prescription is for — it is live through the end of this day, after which the read-side liveness predicate acknowledges it as past advice (no housekeeping write, status stays active). Absent on standing orders.

Open day (flexible mode)

A weekday marked loadable but never prescribed — flexible scheduling's open canvas. The briefing/ask suggestions and the athlete's spontaneous volume fill it; the plan itself carries no prescription for it (ADR 0122).

Per-channel data source

The per-connection enabled-channel set: binds one data-sync channel to the ecosystem serving it, repeating once per enabled channel (ADR 0041, as amended by ADR 0112 and narrowed by ADR 0237). channel is an inbound data type (completed workouts, wellness, sleep) or the outbound plan push; source is the ecosystem serving it. System-maintained — written only by the ingestion host on a completed connection and dropped on disconnect — never athlete-declared, so it can only ever mirror an actual connection. ADR 0237: the runtime surface is the plan binding (the push target the push worker routes on); inbound channels gate nothing on ingest (dedup + tagged multi-source reads) and are retired from new writes — a reconciled rewrite filters stale inbound rows so they self-clean on the athlete's next connection event. The inbound vocabulary stays the designed seam for a future per-connection ingest mute. Sub-values are spec-driven (cc-data-channel / cc-data-source), so no dialog hardcodes a platform or data type.

Phase sequence

Ordered phase → weeks sequence the plan periodizes through (04 §16.2). Repeat per phase. Each occurrence may carry that phase's weekly volume target (hours/week) and its per-phase recovery-cadence override (issue #704/A-7: a VO2max-heavy build narrowed to 2:1, a pure-Z2 base widened to 4:1 — absent keeps the plan-level cc-ext:recoveryCadence).

Plan authority (tri-state)

Who owns the plan — coach-authored / watch-external / no-plan (ADR 0022 / ADR 0040 §1). The athlete's explicit declaration is the enforced override of the watch-external evidence signal in the plan-mode classifier: external forces watch-external, coach suppresses the external evidence (the athlete's switch to Soigneur authority); an active coach-managed plan with scheduled prescriptions still wins (ADR 0022 amendment 2026-09-06).

Plan strategy

Training-intensity-distribution strategy for a CarePlan (04 §16.2).

Plan week grid

The plan's laid week grid (ADR 0236): one occurrence per plan week, stamped by the cycling plan writer from the construction grid — the build-time build/recovery/taper assignment. Absence-driven week conversions are not derivable from the cadence alone, so the grid is the truth consumers (the plan overview's week strip) read; a plan written before the stamp has none and consumers may derive a best-effort grid from period + phaseSequence + recoveryCadence, never present it as the laid truth. Absent on strength plans (no cadence grid) and legacy cycling plans.

Planned absence

A known planned absence the plan schedules around (04 §16.2). Repeat per absence.

Primary discipline

The athlete's primary cycling discipline (ADR 0040 1 / 15 4).

Provider source

The external provider a resource originated from (04 §16.2; custom SearchParameter provider-source).

Readiness call

Readiness verdict attached to a day's prescription (04 §16.2, ADR 0048). Carried on the per-day ServiceRequest.

Readiness may modulate

True when readiness is permitted to modulate this prescription (04 §16.2, ADR 0048). Carried on the per-day ServiceRequest.

Recovery cadence

Loading:recovery week cadence for a CarePlan (04 §16.2).

Resting heart rate (athlete-declared)

The athlete's declared resting heart rate in bpm — a one-time protocol measurement, the lowest-priority rung of the TRIMP resting-HR anchor ladder (ADR 0181): used only while the recorded trailing median is immature (< 7 distinct final RHR days). Never a §5 baseline input, never a wellness Observation. Absent = not declared.

Scheduling mode

Rigid vs flexible scheduling for a CarePlan or in the athlete's preferences (04 16.2 / 15 4). On Patient it is an athlete-owned preference (ADR 0040 §1).

Session class

Workout session class on a template ActivityDefinition (04 15.13 / 16.2; custom SearchParameter session-class).

Session purpose

The coaching intent a session exists for (ADR 0236): authored on the session template, copied onto the prescription snapshot. Content in data — never generated per prescription.

Strength-training equipment inventory

The athlete's available strength-training equipment as structured flags (ADR 0171): the planner designs the strength plan against this inventory, from 'confirmed none' (present with zero flags — the bodyweight floor, issue #415) to a fully equipped gym. The extension's ABSENCE means never declared — the build lane asks once, never guesses. Provenance travels with the flags: how they came to be (athlete-declared / classified from the athlete's words / the commercial-gym default applied to an unconfirmed 'gym' answer — an assumption never reads as a declaration), the source text, confidence, and when it was derived. Replaced whole on every write (full-state).

TRIMP anchor snapshot

The exact HR-anchor inputs a TRIMP-sourced Load (tss) member was computed from — hrMax, restingHR, the estimated flag, sex, the as-of-that-day LTHR, and the resting-HR source (recorded-median / settings-declared, ADR 0181) — as canonical JSON. Stamped beside cc-ext-load-source (ADR 0090 amendment) so the load heal can detect material anchor drift and re-translate the ride from its stored raw Binary.

Target variant (per-prescription executed-track override)

Per-prescription override selecting which dual target track renders (ADR 0190 / ADR 0223): target-variant-hr renders the HR twins on the connected-platform push, the web viewer, and the player; target-variant-power restores the primary power track. Absent falls back to the derived default (the workout-mode locus against the bike power-meter declaration). Cycling prescriptions only.

Temperature units

The athlete's temperature axis (ADR 0219): Celsius (default) or Fahrenheit — the unit weather and body observations are narrated in. Stored temperatures stay Celsius; conversion happens only at narration/display, server-side, never in model prose.

Training age

Structured-training experience band — new / developing / experienced (ADR 0040 1 / 15 4).

Training impact

How the availability block affects training; lock-step with core.plan Absence.category so blocks feed layer_absences (ADR 0071).

Training plan domain

The training domain a CarePlan belongs to (ADR 0096): cycling or strength. Strength is a separate plan managed independently — plan authority (ADR 0022) is scoped per domain. Absent on legacy plans (read as cycling).

Warmup / cooldown kind

Marks an ActivityDefinition as a warmup or a cooldown (04 §15.13, ADR 0048).

Warmup template reference

Reference to the warmup ActivityDefinition a workout template starts with (04 §15.13).

Weekly hours budget (planned load)

The athlete's stated weekly-hours budget the plan planned against at build time (planned load, ADR 0122/0126) — the availability ceiling as build-time reconciliation context. Delivery verdicts measure executed volume against the PRESCRIBED volume, never this ceiling (ADR 0128 amendment 2026-10-09).

Weekly training hours

Typical weekly training hours the athlete commits — the availability ceiling scheduling plans against (ADR 0040 1 / 15 4 / 08 §M.5).

Weekly volume target (hours)

Target weekly training volume in hours (04 §16.2).

Weight units

The athlete's body-weight axis (ADR 0219): kilograms (default) or pounds — the unit weight is asked, entered and narrated in. A manual entry in pounds is STORED in pounds (UCUM [lb_av]); readers convert to kilograms only where a computation needs them (per-bodyweight fuelling math, W/kg), never at ingest.

Why this Frame Core was (re)derived or adopted

On the Frame Core Composition: the durable answer to 'why did the frame update?' — the lazy predicate's dirty reason that triggered the write (derive:no_core, derive:invariant_content_changed, derive:invariant_newer_material, derive:core_age_exceeds_window, derive:narrated_anchor_stale) or, for a materiality-gate adoption (ADR 0155), the reason judged immaterial (adopt:<dirty-reason>). Nothing else on the record answers the question — the Composition's own date says when, never why.

Workout mode (per-prescription locus override)

Per-prescription push-rendering locus override (ADR 0186 §4b): workout-mode-indoor / workout-mode-outdoor force that locus for this prescription — indoor renders the power variant always; outdoor renders the power variant when a bike power meter is declared, the HR variant otherwise. Absent falls back to the athlete's default workout mode. Cycling prescriptions only.

Workout step block

One step of a workout template or prescription, encoding the rep_block / rep_set / alternating / microbursts / progressive / lift_set / continuous grammar (04 §15.13, ADR 0048). Targets are stored relative — one power track and one optional HR track per target-bearing piece (ADR 0190) — and resolved to watts at push time.

Terminology: Value Sets

These define sets of codes used by systems conforming to this implementation guide.

Adaptation level

The six escalating adaptation levels (04 §15.4a / cc-plan).

Athlete communication category

Communication.category for athlete-facing messages (04 §15.22, ADR 0046/0062). Excludes the in-app medium code. Headers carry conversation-header plus a thread-* kind.

Athlete goal type

What the athlete is training toward (ADR 0040 §1 — CcAthleteGoal.category).

Availability-block type

Why an availability block exists — drives the calendar label (ADR 0071). Extends the core.plan Absence.type vocabulary with illness/injury/work/equipment reasons.

CNS load

Central-nervous-system load of a session (cc-ext:cnsLoad).

Coach-insight category

The kind of durable thing the coach learned about the athlete (ADR 0070; strategy-hypothesis per ADR 0228).

Coach-insight confidence rung

Ratcheting confidence the weekly consolidation job reinforces as an insight recurs (ADR 0070).

Coaching phase

CarePlan phase categories (04 §15.4a).

Coaching-write data operations

The v3 DataOperation codes a CcAgentProvenance records (ADR 0144).

Communication register

Technicality of the coach's language at constant depth (ADR 0038 cc-ext:communicationRegister).

Data provider

External data providers (cc-ext:providerSource, Endpoint/Device identifiers).

Data-sync channel

What is synced with a connected ecosystem (ADR 0041 cc-ext:dataChannel) — inbound data types plus the outbound plan push. Extensible — see the cc-data-channel CodeSystem.

Day-call verdicts

The values a day-call Observation may carry (ADR 0086 amendment).

Default workout mode

The athlete's default push-rendering locus (ADR 0186 §4b / issue #839): indoor renders the power variant always (trainer execution implies trainer power); outdoor renders power iff a bike power meter is declared, HR otherwise (ADR 0090's equipment floor). Absent extension = indoor.

Distance units

The athlete's distance axis (ADR 0219 cc-ext:units-distance): how distances are narrated and displayed; cascades to speed (km/h vs mph) and elevation (m vs ft). Absent extension = km.

FTP-family observation codes

Codes carried by an FTP-family Observation (04 15.2c / 16.1).

HR-threshold observation codes

Codes carried by an HR-threshold Observation (ADR 0090). Extensible — e.g. a VT1 anchor may join later.

Illness tier

Coded illness tiers an illness-type Observation may carry (04 §15.2e).

In-app chat message role

Communication.cc-ext-message-role values (ADR 0044).

Lap step class

What a lap_button stepBlock actually is — the localized render label (ADR 0174; maps onto FIT workout_step intensity warm_up / cool_down).

Menstrual disturbance

Amenorrhoea / oligomenorrhoea as the RED-S sentinel (C.0). SNOMED.

Plan / experiment outcome category

DiagnosticReport.category for plan/experiment outcomes (04 §15.21).

Plan authority (tri-state)

Who owns the plan — coach-authored / watch-external / no-plan (ADR 0022 / ADR 0040 §1 cc-ext:planAuthority). Reuses the cc-plan plan-mode codes.

Plan week kind

The laid week's role in the load/recovery cadence (cc-ext:planWeekGrid sub-extension kind, ADR 0236) — stamped by the plan writer from the construction grid.

Primary discipline

Primary cycling discipline (ADR 0040 §1 cc-ext:discipline).

Provenance activity

Provenance.activity for the ingestion / authoring chain (04 13 / 15.8).

Readiness call

Readiness verdict bands (cc-ext:readinessCall).

Recovery cadence

Loading:recovery week cadence (cc-ext:recoveryCadence).

Scheduling mode

Rigid vs flexible scheduling (04 §16.2 cc-ext:schedulingMode).

Session class

Workout session classes (cc-ext:sessionClass on PlanDefinition/ActivityDefinition).

Session purpose

The coaching intent a session exists for (cc-ext:sessionPurpose on ActivityDefinition + ServiceRequest, ADR 0236) — authored session-library content stamped onto each prescription snapshot.

Soigneur Load-source Value Set

Allowed values for cc-ext-load-source.

Soigneur Nutrition Prescription Scope

The fueling-prescription scopes (standing / single).

Soigneur consent type

Consent.category for the onboarding/processing consents (ADR 0034).

Strength exercise origin

How a strength step's exercise entered the record (ADR 0173's tiered ad-hoc contract, #740 phase 4): curated (the hand-authored catalog layer), adhoc-in-pack (an uncurated library movement — the vendor's base text + animation), or adhoc-authored (out-of-pack — the coach authored the full WHAT+HOW at the write seam).

Strength movement pattern

Strength movement patterns (05 §14.8).

Strength-equipment basis

How the recorded inventory came to be (ADR 0171 cc-ext-strength-equipment.basis) — an assumption (the commercial-gym default on an unconfirmed 'gym' answer) never reads as a declaration.

Strength-training equipment

The closed vocabulary of strength-training equipment kinds the athlete can have available (ADR 0171 cc-ext-strength-equipment.flags). The empty set is 'confirmed none' — the bodyweight floor (issue #415); the extension's absence is 'never declared' (the build lane asks once, never guesses).

Supported data-source ecosystem

The training-data ecosystem serving a channel (ADR 0041 cc-ext:dataSource.source). Extensible — see the cc-data-source CodeSystem. 'No connected platform' is the absence of a binding, not a member.

Target variant (per-prescription override)

The per-prescription executed-target-track override (ADR 0223 / ADR 0190 amendment): target-variant-hr renders the HR twins, target-variant-power the primary power track — on the connected-platform push, the web viewer, and the player. Absent extension = the derived default (the workout-mode locus against the bike power-meter declaration). Cycling prescriptions only.

Temperature units

The athlete's temperature axis (ADR 0219 cc-ext:units-temperature): the unit weather and body observations are narrated in. Stored temperatures stay Celsius; conversion happens only at narration/display. Absent extension = Celsius.

Training age

Structured-training experience band (ADR 0040 §1 cc-ext:trainingAge).

Training impact of an availability block

How an availability block affects training — lock-step with core.plan.plan_construction.Absence.category so blocks feed layer_absences directly (ADR 0071).

Training plan domain

The training domain a CarePlan belongs to (cc-ext:planDomain, ADR 0096).

Training-intensity-distribution strategy

Plan strategy (04 §16.2 cc-ext:strategy).

Warmup / cooldown kind

Marks an ActivityDefinition as a warmup or a cooldown (04 §15.13, ADR 0048).

Weight units

The athlete's body-weight axis (ADR 0219 cc-ext:units-weight): the unit weight is asked, entered and narrated in. The stored Observation keeps its source UCUM unit (kg or [lb_av]); conversion happens only where a computation needs kilograms. Absent extension = kg.

Workout step kind

The step grammar encoded in cc-ext:stepBlock (04 §15.13, ADR 0048).

Workout target type

Relative/absolute target type for prescribed steps (04 §15.4b, ADR 0090: HR/RPE target types are the prescription vocabulary for no-power athletes).

Terminology: Code Systems

These define new code systems used by systems conforming to this implementation guide.

In-app chat message role

Who authored an in-app Communication payload (ADR 0044).

Soigneur Athlete Profile Codes

Coded athlete-profile preferences carried on Patient extensions (ADR 0040 §1 / ADR 0041): primary discipline, training age, communication register.

Soigneur Athlete-Dossier Section Codes

Composition.section.code for the athlete dossier — the athlete-owned narrative profile (ADR 0041). Distinct from cc-frame-section, which codes the hidden coach-derived frame Composition.

Soigneur Availability / Absence Codes

Availability-block type (why) and training-impact (how) codes for CcAvailabilityBlock Appointments (ADR 0071, issue #114). The impact codes mirror core.plan.plan_construction.Absence.category.

Soigneur Coach-Insight Codes

Durable coach-insight category + confidence codes (ADR 0070). Category classifies the kind of learned thing; confidence is the ratcheting certainty rung the consolidation job reinforces over time.

Soigneur Coaching-Frame Section Codes

Composition.section.code for the frame Core and Live compositions (04 §15.5). Sections are referenced by title internally and never quoted to the athlete (coach-safety).

Soigneur Communication Categories

Communication.category values (05 14.1, 04 15.22).

Soigneur Consent Types

Consent.category values for the onboarding/processing consents (ADR 0034; 09 3/14). Terms of Service + Privacy Policy are independent acknowledgements (each versions + re-prompts on its own); health-data-processing + wellness-scope are the blocking Art. 9 gate (a single all-or-nothing consent — no separate background-processing opt-in). internal-data-processing is an optional, non-blocking secondary-purpose consent (internal product improvement) whose permit/deny is recorded either way. weekly-retro-email is an optional, non-blocking channel consent (ADR 0207): whether the weekly coach review is delivered to the athlete's email address — recorded as permit or deny either way, latest record wins, never an existence check.

Soigneur Data-Sync Channels

What Soigneur syncs with a connected ecosystem, and in which direction — inbound data types (completed workouts, wellness, sleep) and the outbound plan push. ADR 0237 narrowed the runtime binding surface to plan (the push target; inbound ingest is source-agnostic and never consults a binding), but the channel vocabulary stays complete: inbound channels remain as spec-driven direction labels and the designed seam for a future per-connection ingest mute. A plan binding is what replaces the former keep-Garmin push flag. Extensible.

Soigneur Day Call Codes

The briefing's day-call verdicts (train / abstain), carried in Observation.valueCodeableConcept (ADR 0086 amendment).

Soigneur Document / Report Types

Composition.type and DiagnosticReport.category values (05 14.1, 04 15.5/§15.21).

Soigneur Internal Meta Tags

Internal meta-tag codes stamped on FHIR resources by Soigneur ingress pipelines. These are machine-managed tags (not user-facing) that support ingress idempotency and provenance. The codes are display-less markers: the per-resource VALUES ride in the cc-ext-content-hash / cc-ext-icu-push-hash meta extensions, because a value in a tag's display is not round-trip-safe — FHIR R4 fixes tag identity at system+code and lets servers merge tag displays on update (fire-arrow-server issue #713; ADR 0055 as revised).

Soigneur Load-source Codes

How a per-activity Load (tss) value was derived: measured from a power stream, estimated from the per-athlete power↔HR model, or computed from the HR stream via heart-rate-reserve TRIMP (ADR 0067 / 0090).

Soigneur Nutrition Prescription Scope Codes

The fueling-prescription scopes (standing / single), carried in cc-ext-nutrition-scope (ADR 0098 amendment).

Soigneur Observation Codes (cycling metrics without LOINC)

Cycling / training metrics that have no LOINC concept (05 14.4). The Code identifiers are internal, stable machine keys (np, if, tss, ctl, atl, tsb, …). The Display strings are the trademark-safe product vocabulary (15 1.1): Load, Weighted Power, Intensity, Fitness, Fatigue, Form — never the TrainingPeaks marks (TSS, NP, IF, TSB, PMC).

Soigneur Plan Codes

Session class, phase, block, plan mode, scheduling mode, adaptation level, strategy, recovery cadence, and the watchlist marker (05 §14.8).

Soigneur Provenance Activities

Provenance.activity values for the ingestion/authoring chain (05 14.1, 04 13/§15.8).

Soigneur Provider Codes

External data-provider identifiers (05 §14.8).

Soigneur Strength Codes

Movement pattern, load type, Garmin category, and equipment for strength work (05 §14.8).

Soigneur Subjective Scales (Hooper-style)

Hooper-style subjective diary scales (05 §14.5). valueInteger 1-5 unless noted.

Soigneur Supported Data-Source Ecosystems

The external training-data ecosystems Soigneur can sync an athlete's data with (Garmin founder/dev CLI; intervals.icu production OAuth — ADR 0081; later Polar/Wahoo as workout+plan targets, Fitbit/Apple/Google as wellness/sleep sources). The per-channel cc-ext-data-source Patient extension binds each channel to one of these; 'no connected platform' is the absence of a binding, not a code. Mirrored by the agent-side registry in agent.data_sources.

Soigneur Task Classes

Task.code classes used for narrow subscription filtering and DB hygiene (05 14.1, 04 15.20a). Subscriptions filter on Task?code={code}&status={status}, never a bare status.

Soigneur Units Preference Codes

Measurement-unit preference axes carried on Patient extensions (ADR 0219): distance (km / mi), weight (kg / lb), temperature (Celsius / Fahrenheit). Three INDEPENDENT axes, deliberately not one metric/imperial switch — the hybrid athlete (miles on the road, kilograms on the scale, Celsius in the weather) is the realistic case a bundled toggle cannot express. Absent extension on every axis means the metric default; storage is never affected (source units are kept, conversion happens only where a computation or a narration needs the other unit).

Soigneur Workout Prescription Codes

Target types for prescribed workout steps. Targets are stored RELATIVE (preferably %FTP) and resolved to absolute watts at push time (04 §15.4b).

Terminology: Naming Systems

These define identifier and/or code system identities used by systems conforming to this implementation guide.

sid-activity

Optional Soigneur-issued internal UID for a consolidated Activity Group. The Observation.id is the primary internal handle; this system is available when a stable business UID is also wanted (04 §13.6).

sid-agent

The coach agent's logical identity (ADR 0144) — value coach. Used as an identifier-only Reference wherever FHIR needs the agent as an actor (CcAgentProvenance.agent[author].who, NutritionOrder.orderer): there is no agent resource on the server, so a literal Type/id would dangle and fail referential integrity.

sid-conversation

AG-UI thread id for an in-app coach-ask conversation. Carried on Communication.identifier so the UI can hydrate a transcript by thread (ADR 0044).

sid-conversation-header

Idempotency key for one conversation-header Communication — value form conversation-header|{threadId} (ADR 0046).

sid-conversation-summary

Idempotency key for one conversation-summary Communication — value form conversation-summary|{threadId}|{throughTurn}; one per coverage boundary (issue #172).

sid-daily-briefing

One daily-readiness-briefing thread per athlete per date — value form daily-briefing|{patientId}|{date} (ADR 0062).

sid-daily-log

One daily-log QuestionnaireResponse per athlete per date — value form daily-log|{patientId}|{date} (04 §15.11).

sid-day-call

One CcDayCall Observation per athlete per athlete-local day — value form day-call|{patientId}|{date} (ADR 0086 amendment). The conditional-create key for the briefing's day-call write; a same-day revision (a revised briefing changing the call) updates the resource in place under the same identifier.

sid-debrief

One workout debrief per Activity Group — value form debrief|{activityId} (ADR 0062/0093). The idempotency key for the coach-review-workout debrief write.

sid-garmin-activity

Garmin activityId — the id of an activity at Garmin Connect. Stable across the unofficial Connect pull and the official Health API push; the key that bridges the pull→push migration (ADR 0025). Used on CcActivityGroup.identifier and the raw-file CcRawFileIndex.masterIdentifier.

sid-garmin-scheduled-workout

Garmin scheduled-workout event id written to CarePlan.identifier on outbound workout push (04 §18.2).

sid-garmin-summary

Garmin Health API summaryId — a per-summary/delivery id that changes on manual edits. Used to guard push delivery idempotency only; NOT the activity's identity (use GarminActivityId).

sid-intervals-icu-activity

intervals.icu activity id. A second activity source; an intervals.icu record may itself carry an upstream Garmin activityId (circular sharing), which is the preferred cross-source dedup match key (04 §13.6).

sid-intervals-icu-scheduled-workout

intervals.icu calendar event id written to Appointment.identifier on inbound watch-external entries and to ServiceRequest.identifier on outbound plan push (external_id = ServiceRequest.id, ADR 0081).

sid-llm-turn

Idempotency key for one captured in-app chat Communication — value form llm-turn|{threadId}|{turnIndex}|{role} (ADR 0044, 12 §2.1).

sid-pmc-series

One weekly CcWellnessSeriesObservation per athlete per ISO week — value form pmc-series|{patientId}|{weekStart} (ADR 0059/0092). The idempotency key for the roller's conditional-create upsert; the resource id itself is server-assigned and never assumed.

sid-session-assessment

One session-assessment QuestionnaireResponse per activity — value form session-assessment|{patientId}|{activityId} (ADR 0062). Member Observations use session-rpe|{activityId} / session-feel|{activityId} / session-vs-plan|{activityId} / session-note|{activityId} / session-fluid|{activityId} / session-fuel|{activityId} (the optional in-ride drink/fuel answers, issue #610) / session-review-declined|{activityId} (the save-without-review marker, issue #491) on the same system.

sid-session-match

One CcSessionMatch Observation per athlete per athlete-local day per prescription — value form session-match|{patientId}|{date}|{prescriptionId} (ADR 0178). The conditional-create key for the web's link/unlink upsert; a retarget (link another ride, promote the next ride on unlink) updates the resource in place under the same identifier.

sid-soigneur-player-activity

The workout player's own recorded-session id (ADR 0186 5): the UUID the web BFF mints per uploaded recording. Used on CcActivityGroup.identifier and as the CcRawFileIndex.masterIdentifier of the raw FIT artifact — same UUID, same ride (exact-match cross-source dedup, 04 13.6); a re-translated recording upserts in place.

sid-workout-review

One workout-review thread per Activity Group — value form workout-review|{activityId} (ADR 0062).

Example: Example Instances

These are example instances that show what data produced and consumed by systems conforming with this implementation guide might look like.

Athlete-asserted session match

A final (live) assertion: this ride — not the ingest bridge's pick — is the day's prescribed session. Identifies the day's prescription by basedOn and the asserted ride by focus; the identifier keys the per-day-per-prescription upsert.

Coaching-write Provenance: a session taken off the calendar

The review concluded the week's load was reached and revoked tomorrow's prescription after the athlete accepted the consent card (ADR 0144): the prescription and the Patient as targets, the prior version as the revision, the review thread as the source, the agent as an identifier-only author with its serving context.

Day call after a coach-implemented session edit

A train call whose session the coach changed in the same turn (ADR 0154): the plan-action stance edited claims the write the omission check anchors on — the focus is the day's prescription the edit landed on. Under the coach flag the write is cardless; the CcAgentProvenance written beside it is the audit trail.

Day call suggesting an open-day add

A train call on an open day (ADR 0154): the coach suggests ADDING a session — the plan-action stance suggest_add is the only trigger the web's 'Add workout as suggested' CTA gates on. The day holds no session, so the call carries no focus; the suggested shape rides in the note and the athlete's tap makes it real.

Day call with its briefing lead

A train call for the athlete-local day with its lead (headline + reason) as components and the day's diary panel as its source check-in.

Explicitly unlinked session match

A cancelled assertion: the athlete unlinked the ride and no promotable same-day ride existed (the next-by-start candidate skips rides that already carry a session assessment). The focus stays for the audit trail — the matcher reports the day as explicitly unlinked until the athlete relinks.

Synth FTP — athlete-set

An accepted/set FTP value; method is required (cc-inv-ftp-method).

Synth FTP — declined off the peak

The accepted FTP has fallen below its earlier peak even as Fitness rises — only a test/decoupling signal reveals it.

Synth PMC series — Fitness still rising (overreach trap)

Observable Fitness (ctl) is high and rising across the week — the reassuring signal that masks the latent decline (the trap). The FTP exemplar below shows the accepted FTP has already turned down.

Synth PMC series — Fitness/Fatigue/Form/Load (weekly)

One weekly CcWellnessSeriesObservation (ADR 0059): four components (ctl/atl/tsb/tss), each a 7-sample valueSampledData (1 sample/day). The home tiles decode the last non-null sample of each component.

Synth amenorrhoea — RED-S sentinel

Amenorrhoea as the RED-S / low-energy-availability sentinel under the female-athlete axis (C.0).

Synth athlete — hidden iron deficiency (female)

SoigneurSynth exemplar for the hidden-iron-deficiency phenotype (C.0): FTP stalls while ferritin falls and overreach debt stays low — iron screening, not rest, is indicated.

Synth athlete — overreach decline (male)

SoigneurSynth exemplar for the overreach trap (C.1): observable Fitness keeps rising while true FTP has already peaked and turned down under accumulating debt.

Synth daily-log member — fatigue (Hooper)

A subjective Hooper score extracted from the daily-log QR; valueInteger 1-5; derivedFrom the QR.

Synth daily-log member — free-text note

The athlete's optional free-text note to the coach, extracted from the QR as a valueString CcSubjectiveObservation (never parsed off the QR by agents).

Synth daily-log — QuestionnaireResponse (record of collection)

The raw morning daily-log submission. Agents never read this QR; the coded Observations below are extracted from it and read via read_diary_window / read_wellness_window.

Synth daily-log — panel (hasMember grouping)

Groups the extracted subjective member Observations for the morning submission; identifier makes it one-per-date; derivedFrom links the source QR.

Synth ferritin — below the low mark

Serum ferritin driven low under sustained load — the marker that separates the iron stall from overreach (C.0).

Synth follow-up — tentative illness (open)

An open tentative-signal follow-up the coach opened from a low-commitment athlete signal (ADR 0080): the athlete thinks they may be getting sick. Not durable memory and not a calendar change yet — carried forward until it confirms (→ availability block) or lapses (→ life-log + forget). Due tomorrow; routine urgency.

Synth prescription — per-day ServiceRequest

The instantiated per-day prescription (04 §15.4b, ADR 0048); the stepBlock carries a RELATIVE %FTP target resolved to watts at push time.

Synth provider translator Device

The translator Device that produced canonical FHIR from the raw provider Binary (the author agent on the translation Provenance).

Synth session measure — Load

The session Load member of the Activity Group (cc-observations tss, displayed 'Load').

Synth session — Activity Group

A completed ride as an Observation Activity Group (73985-4) with per-metric members via hasMember (ADR 0002).

Synth session — raw stream Binary

The raw packed 1 Hz stream for the session, stored as a Binary (04 §15.7). Not searchable and not a valid derivedFrom target — indexed by synth-iron-01-session-rawfile and lineage-linked by synth-iron-01-session-prov.

Synth session — raw-file index

The DocumentReference that indexes the raw stream Binary so derived Observations can reference it via derivedFrom (04 §15.6).

Synth session — translation Provenance

Lineage for the translated session: the Activity Group was produced by the provider translator Device from the raw stream Binary (entity[source]).

Synth session — workout debrief
The coach's formal debrief of the session, written a-priori from the session's latent outcome (here: on-target). context.related links it to the Activity Group it reviews; the debrief markdown is carried as base64 content.attachment.data; the debrief {activityId} identifier makes the write idempotent (ADR 0093).
Synth sex assigned at birth — female

Sex assigned at birth as a clinical Observation (LOINC 76689-9) — the physiological axis the coach reads to seed baselines (C.0), kept distinct from administrative Patient.gender (ADR 0036).

Synth training plan — base phase

A phase-scoped training plan (04 §15.4a). intent=plan; strategy/scheduling extensions; ≤18-week window (cc-inv-plan-max-18wk).

Synth waist circumference — manual (daily-log)

An objective body-composition vital extracted from the same daily-log QR (LOINC 56086-2). Read via read_wellness_window, not the subjective diary reader.

Workout debrief with a legacy frozen next decision

A debrief filed before ADR 0144: its next decision is frozen text (valueString). Readers still render it; new debriefs reference the day call instead.

Workout debrief with its lead

A debrief whose lead renders above the prose (ADR 0144): the assessment headline, the next decision as a reference to the CcDayCall the review wrote (readers render the call as it stands, marked updated when it was written after the debrief), and the takeaway the ride carries forward.