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.11 /

Session assessment (post-ride)

Post-ride self-assessment: session RPE, feel, vs-plan, optional notes (05 §14.5, ADR 0062). RPE/feel are also stamped as Activity Group members; vs-plan 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, 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 (category cc-comm:llm-turn / chat-notice, ADR 0044). 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-1-

Coaching Frame — Live (Composition)

The fast-moving overlay (11): watchlist seeds, current-phase pointer, current volume tier, standing flags, preserved patterns. Amended in place by weekly-retro / build-plan / adapt-plan; carries derivedAgainstCore → the Frame Core version it was written against (04 11): watchlist seeds, current-phase pointer, current volume tier, standing flags, preserved patterns. Amended in place by weekly-retro / build-plan / adapt-plan; carries derivedAgainstCore → the Frame Core version it was written against (04

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.
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).
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 / 13 /

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 / 13 /

Raw Provider File Index (DocumentReference)

Searchable index for a raw provider Binary (04 15.6 / 15.6 /

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 4.1; 09 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), or a free-text note (valueString) — 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 14.9; code LOINC or cc-observations; effectiveDateTime = the date (04

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.2a/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.

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 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

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 1 / 15

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 / 15.4c /

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).

Cooldown template reference

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

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).

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 1 / 15

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).

Goal priority

Per-plan goal ranking (04 16.2 / 16.2 /

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 6); the Live HR caps recompute when it moves (ADR 0047

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 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 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) or hr-model (estimated from the per-athlete power↔HR model, ADR 0067 / 15 §3.3). 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).

OAuth token reference

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

Per-channel data source

Binds one data-sync channel to the ecosystem that serves it; repeats once per active channel (ADR 0041). channel is an inbound data type (completed workouts, wellness, sleep) or the outbound plan push; source is the ecosystem serving it. So a future Garmin-workouts / Fitbit-sleep mix is representable, and 'push my plan out' is simply a plan binding — no platform-named push flag. 'No connected platform' is the absence of any binding. Sub-values are spec-driven (cc-data-channel / cc-data-source), mirrored by agent.data_sources, 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).

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).

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 1 / 15

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).

Scheduling mode

Rigid vs flexible scheduling for a CarePlan or in the athlete's preferences (04 16.2 / 15 16.2 / 15

Session class

Workout session class on a template ActivityDefinition (04 15.13 / 15.13 /

Training age

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

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 training hours

Typical weekly training hours the athlete commits — the availability ceiling scheduling plans against (ADR 0040 1 / 15 1 / 15

Weekly volume target (hours)

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

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 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).

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).

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.

FTP-family observation codes

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

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).

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.

Primary discipline

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

Provenance activity

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

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).

Soigneur Load-source Value Set

Allowed values for cc-ext-load-source.

Soigneur consent type

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

Strength movement pattern

Strength movement patterns (05 §14.8).

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.

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).

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 14.1, 04

Soigneur Consent Types

Consent.category values for the onboarding/processing consents (ADR 0034; 09 3/3/

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. Each channel is bound to the ecosystem serving it via the repeating complex cc-ext-data-source; a 'plan' binding is what replaces the former keep-Garmin push flag. Extensible; mirrored by the agent-side registry in agent.data_sources.

Soigneur Document / Report Types

Composition.type and DiagnosticReport.category values (05 14.1, 04 14.1, 04

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 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 14.1, 04

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 14.1, 04

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-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-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} on the same system.

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.

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.