# Fitness Questionnaire > Client intake questionnaire for fitness coaching, split into sections. # Fitness Questionnaire A client intake questionnaire, long enough that it needs to be broken up. Each section lives on its own page so it can be reviewed, edited and handed around independently. !!! info "What this site is" This is the **source of truth for the questions** — their wording, their answer types, their ordering and the logic between them. It is a static site, so it does not collect answers. The pages here are what the voice subagents are handed at call time, so a reworded question is asked in its new wording on the next call. See [The agentic flow](project/how-it-works.md). ## Sections | # | Section | What it covers | Filled by | |---|---------|----------------|-----------| | 1 | [About you](sections/01-about-you.md) | Identity, contact, household, occupation | Client | | 2 | [Health & medical history](sections/02-health-history.md) | PAR-Q+ screening, conditions, vitamins and supplements, family history | Client | | 3 | [Systems review](sections/03-systems-review.md) | Symptom sweep by body system, digestive and menstrual detail | Client | | 4 | [Injuries & movement](sections/04-injuries-and-movement.md) | Current pain | Client | | 5 | [Activity & training history](sections/05-activity-history.md) | Current activity, daily lifestyle, attitude to exercise | Client | | 6 | [Goals & motivation](sections/06-goals.md) | Primary goal, obstacles | Client | | 7 | [Nutrition & hydration](sections/07-nutrition.md) | Food frequency, dietary needs, relationship with food | Client | | 8 | [Sleep, stress & recovery](sections/08-lifestyle.md) | Sleep quality, stressors, energy, recovery habits | Client | | 9 | [Measurements & assessments](sections/09-measurements.md) | Anthropometrics, vitals, movement screen, capacity tests | Coach | | 10 | [Preferences & logistics](sections/10-preferences-logistics.md) | Availability, equipment, likes/dislikes, communication | Client | | 11 | [Consent & sign-off](sections/11-consent.md) | Declarations, waiver, privacy, signatures | Both | ## How to use it === "Reviewing the questions" Read straight through in nav order. Sections 1–8 and 10 are what the client answers before the first session; section 9 is completed by the coach at the baseline appointment; section 11 is signed by both. === "Editing the questions" Every question is a row in a table with a stable **field ID**. Change the wording freely, but treat the field ID as permanent once responses exist — it is what ties an answer back to its question. Answer types and the notation for conditional questions are defined in [Question patterns](authoring/question-patterns.md). === "Adding a section" Copy [the blank section template](authoring/section-template.md) into `docs/sections/`, number it, and add a line to the `nav` array in `zensical.toml`. The preview server picks up both without a restart. === "Handing it to a client" Split delivery over two sittings — sections 1–4 (screening) first, so anything that needs medical clearance surfaces early, then 5–8 and 10. Estimated completion times are noted at the top of each page; the whole thing runs to roughly 75 minutes of client time, which is why it should never arrive as one link. === "Running it as a conversation" An AI agent can conduct the intake conversationally instead of as a form, which is the difference between a client finishing it and abandoning it at question 40. [The interview protocol](project/agent-protocol.md) sets out how — one question at a time, how to voice each answer type, when to stop, and what the agent must never do. In production this runs as a **phone call**: ElevenLabs rings the client and a fleet of subagents conducts the intake, one per section. See [The agentic flow](project/how-it-works.md). ## Conventions `Field ID` : Stable snake_case identifier, unique across the whole questionnaire. Never reuse or repurpose one. `Type` : How the answer is captured. See [Question patterns](authoring/question-patterns.md) for the full list. `Req.` : **Yes** — the questionnaire cannot be submitted without it. **No** — optional. **Cond.** — required only when a preceding answer triggers it. `→` : Conditional follow-up. `→ if Yes` means the question only appears when the parent question was answered *Yes*. ## Reading this site as an LLM Every page here is also served as its original Markdown, at the page's own path with a `.md` extension: this page is at `/index.md`, section 1 is at `/sections/01-about-you.md`. (Those are deliberately not links — Zensical reads a link ending in `.md` as a reference to a page in the nav and warns that it does not exist.) The relative links inside those files resolve against each other, so a crawler can walk the whole site without touching the rendered HTML. [`/llms.txt`](/llms.txt) indexes all of them in nav order with a one-line description each, and [`/llms-full.txt`](/llms-full.txt) is the entire site in one file — around 170 KB, small enough to paste whole into a model's context. ## Sources Sections 1, 4–6 and 8–11 were written for this site. Sections 2, 3 and 7 draw heavily on a Hebrew practitioner intake sheet (`דף תשאול`) supplied as the domain reference — specifically its body-systems review, its food frequency table, its per-relative family history, and its practice of asking whether a client *wants* to know their weight rather than demanding the number. That sheet is a naturopathic and nutritional intake, not a training one. The parts adapted here were chosen because they improve **screening and referral**; the parts that only support treatment decisions a coach cannot make were left out or marked as requiring a licensed practitioner. Where a question's scope is borderline, the page says so. !!! warning "Not medical or legal advice" The screening questions in [section 2](sections/02-health-history.md) are modelled on PAR-Q+ but this is not a validated reproduction of it. The symptom lists in [section 3](sections/03-systems-review.md) are a referral aid, not a diagnostic instrument. The waiver language in [section 11](sections/11-consent.md) is a placeholder. Have all three reviewed by a qualified professional in your jurisdiction before using them with real clients. # The agentic flow The questionnaire is not sent to the client as a link. **ElevenLabs phones them**, and a fleet of voice subagents conducts the intake over that call — one subagent introducing it, one per section, and two more to close it out. Those subagents are all **one ElevenLabs agent**, `Questionnaire Intake Agent`, whose workflow contains a node per subagent. The workflow graph is what moves the call along; the client hears one interviewer throughout. This page is the map. [The subagents](subagents.md) is the roster and the authoritative record of which markdown file each one loads; [Context and handoff](context-handoff.md) covers what travels between them; [ElevenLabs setup](elevenlabs-setup.md) is how it is actually configured in this repository. !!! info "The site is still the source of truth" No question text lives in an agent prompt. Every subagent is handed the section page from this site and asks what it finds there. Reword a question on its page and the next call asks the new wording — there is never a second copy of the questionnaire to keep in sync. ## Why a fleet, and not one agent A single agent could hold all eleven sections. On a voice call it does not work, for three reasons that compound: **Context is smaller than you think.** The eleven section pages plus the protocol run to well over 60 KB of markdown. A voice agent is not just holding that — it is holding it *alongside* a growing transcript of a ninety-minute conversation. The section it is currently asking about competes for attention with ten it is not. **Latency is a hard budget.** A phone call tolerates roughly a second of silence before it feels broken. Every token of prompt is time spent before the first token of speech. A prompt carrying all eleven sections makes every single question slower, including the trivial ones. **Attention degrades in the middle.** A model reading one section page asks that section well. The same model reading eleven asks the first and last reliably and the ones in between approximately — it drifts into a neighbouring section's questions, or re-asks something answered forty minutes ago. Splitting by section fixes all three at once, because a section is already the natural unit: it has its own page, its own field prefix, its own time estimate, and its own place in the order. !!! tip "The split is the same one the site already makes" The subagent boundaries are not a new architecture imposed on the questionnaire. They are the section boundaries, which exist because the questionnaire was too long to be one page — for exactly the reason it is too long to be one agent. ## The whole flow ```mermaid flowchart TD COACH(["Coach queues an intake
client record plus phone number"]) CALL["Outbound call
ElevenLabs to Twilio to the client"] INTRO["INTRO NODE
who is calling and why
consent to record, how long it takes"] BAIL(["Reschedule and end the call"]) BREAK{{"Break offered
same call, or a scheduled call back"}} S11["11 · Consent and sign-off
~4 min · consent_*"] STOP["STOP AND REFER NODE
say the stop wording verbatim
do not soften, do not speculate"] HAND["HANDOVER NODE
assemble record, list red flags and declines
propose a triage outcome"] REVIEW(["Coach confirms the triage outcome"]) MEAS(["9 · Measurements — in person, no agent"]) subgraph SCREEN ["Screening — asked first so anything urgent surfaces early"] direction TB S1["1 · About you
~5 min · client_*"] S2["2 · Health and medical history
~15 min · health_*"] S3["3 · Systems review
~12 min · sys_*"] S4["4 · Injuries and movement
~2 min · inj_*"] S1 --> S2 --> S3 --> S4 end subgraph BUILD ["Programme building — what the coach designs from"] direction TB S5["5 · Activity and training history
~3 min · act_*"] S6["6 · Goals and motivation
~3 min · goal_*"] S7["7 · Nutrition and hydration
~15 min · nut_*"] S8["8 · Sleep, stress and recovery
~7 min · life_*"] S10["10 · Preferences and logistics
~7 min · pref_*"] S5 --> S6 --> S7 --> S8 --> S10 end COACH --> CALL CALL --> INTRO INTRO -->|"not now"| BAIL INTRO -->|"ready to start"| S1 S4 --> BREAK BREAK --> S5 S10 --> S11 S11 --> HAND INTRO -.->|"red flag"| STOP SCREEN -.->|"red flag"| STOP BUILD -.->|"red flag"| STOP STOP -.->|"de-escalated, resume"| SCREEN STOP --> HAND HAND --> REVIEW REVIEW --> MEAS ``` Read it as three movements. **Screening first**, so a stop condition surfaces in the first twenty minutes rather than the last. **A break**, because ninety minutes in one sitting is how you get abandoned calls. **Consent last**, once the client knows what they have actually agreed to. The dotted lines are the escape hatch, and every node that asks a question has one — a red flag can be caught at any point in the call, not just during screening. The return arrow matters as much: if the trigger turns out not to qualify, control goes back to the section it came from and the call carries on. That is why an unsure subagent should take the escape rather than judge for itself — taking it is reversible, carrying on is not. ## The cast | Subagent | Workflow node | Owns | Ends by | |----------|---------------|------|---------| | **Intro** | `intro` | Identity check, what the call is, consent to record, expected length | Moving to section 1, or rescheduling | | **Section 1–8, 10, 11** | `section_01`…`section_11` | One section each — its questions, in its order | Offering a break, then moving to the next | | **Stop and refer** | `stop_and_refer` | Everything after a red flag fires | Moving to handover — or back, if de-escalated | | **Handover** | `handover` | Assembling the record, the triage proposal, telling the client what happens next | Ending the call | Thirteen subagents, and [section 9](../sections/09-measurements.md) has none — measurements are taken by the coach in person at the baseline appointment. Nothing in it can be asked down a phone line. With `start_node` and `end_node`, that is the fifteen-node workflow in [the config](elevenlabs-setup.md#the-workflow). ## What each one knows A subagent loads its own section page plus a small, declared set of reference pages — never the whole reference directory. Sections with matrix questions get the matrix guidance; sections without it do not. Only the closing subagents carry the triage table. [The load map](subagents.md#the-load-map) is the authoritative version of this, and the reference pages each declare their own audience in a banner at the top. ## What this does not do - **It does not decide anything.** The fleet proposes a triage outcome; a human confirms it before the client trains. See [the handover record](../knowledge-base/handover-record.md). - **It does not take measurements.** Section 9 is in person. - **It does not capture a signature.** Section 11 records a verbal affirmation and flags that a written signature is outstanding. - **It does not call back on its own.** A stopped call resumes only when a coach says so. # The subagents The roster, and the authoritative record of which markdown file each subagent loads. If this page and a prompt disagree, this page is right and the prompt needs fixing. Each subagent is an `override_agent` node on the single `Questionnaire Intake Agent` — the node IDs are in [the workflow](elevenlabs-setup.md#the-workflow). ## The load map Every subagent loads **its own section page** plus the reference pages ticked below. Nothing else. A blank cell is a deliberate omission, not an oversight. Every page is listed explicitly on the node that needs it, in its `additional_knowledge_base`. Nothing is inherited — the agent's own `knowledge_base` is empty and each node overrides its inherited one to `[]`, so a subagent can only see what this table gives it. | Subagent | Section page | [Core rules](../knowledge-base/core-rules.md) | [Voicing answers](../knowledge-base/voicing-answers.md) | [Matrix by voice](../knowledge-base/matrix-in-voice.md) | [Sensitive](../knowledge-base/sensitive-questions.md) | [Stop conditions](../knowledge-base/stop-conditions.md) | [Red flags](../knowledge-base/red-flags.md) | [Handover record](../knowledge-base/handover-record.md) | |---|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:| | **Intro** | — | ✅ | | | | ✅ | | | | **1 · About you** | [01](../sections/01-about-you.md) | ✅ | ✅ | | | ✅ | | | | **2 · Health history** | [02](../sections/02-health-history.md) | ✅ | ✅ | ✅ | ✅ | ✅ | | | | **3 · Systems review** | [03](../sections/03-systems-review.md) | ✅ | ✅ | ✅ | ✅ | ✅ | | | | **4 · Injuries and movement** | [04](../sections/04-injuries-and-movement.md) | ✅ | ✅ | | | ✅ | | | | **5 · Activity history** | [05](../sections/05-activity-history.md) | ✅ | ✅ | | | ✅ | | | | **6 · Goals** | [06](../sections/06-goals.md) | ✅ | ✅ | | | ✅ | | | | **7 · Nutrition** | [07](../sections/07-nutrition.md) | ✅ | ✅ | ✅ | ✅ | ✅ | | | | **8 · Sleep and recovery** | [08](../sections/08-lifestyle.md) | ✅ | ✅ | | | ✅ | | | | **10 · Preferences** | [10](../sections/10-preferences-logistics.md) | ✅ | ✅ | | | ✅ | | | | **11 · Consent** | [11](../sections/11-consent.md) | ✅ | ✅ | | ✅ | ✅ | | | | **Stop and refer** | — | ✅ | | | | ✅ | ✅ | ✅ | | **Handover** | — | ✅ | | | | | ✅ | ✅ | The blank cells under **Red flags** for the ten section subagents are mostly not a gap. Nine of the ten section pages end with their own **Red flags** subsection — filtered to only the flags whose trigger field lives on that page, not the full list. See [04.2](../sections/04-injuries-and-movement.md#42-red-flags) for a small example and [02.9](../sections/02-health-history.md#29-red-flags) for a larger one. Sections 6 and 10 genuinely have none: no flag in [Screening red flags](../knowledge-base/red-flags.md) is driven by a `goal_*` or `pref_*` field, so their pages carry no such subsection at all rather than an empty or padded one. !!! warning "This leaves the reference page itself thinner than the closing subagents may need" [Screening red flags](../knowledge-base/red-flags.md) keeps only the triage outcomes and the generic session-stop signs — the specifics live with the fields that trigger them, by design, so each section subagent is self-contained for the flags it can actually hear. But `stop_and_refer` and `handover` load that page and *not* the section pages, so once it went generic they lost direct access to the specifics needed to actually *classify* a flag (which caution modification applies, which age threshold fired) — those specifics are now scattered across whichever section pages own the relevant fields, several sections away from either closing subagent. Today they still see the client's own words in the handoff state and can reason it out, but they no longer have the lookup table doing it for them. If that turns out to matter in practice, the fix is either to attach the relevant section pages to those two nodes as well, or to keep one authoritative copy of the specifics loaded there too, accepting the duplication. **A dry run has now confirmed this.** Given three real triggers with only the handoff state to go on, `stop_and_refer` classified all three `Refer & stop` — the right answer — and reported that two of the three were inferred by keyword-matching the generic list, not read off any rule it holds. `handover` could run only two of the eight items on its own closing checklist, because the other six ask it about required fields and conditional triggers that are defined on section pages it does not load. Neither is failing; both are reasoning past a missing lookup table. The node prompt for `stop_and_refer` now says so outright and tells it to escalate whatever it cannot resolve, which is the cheap half of the fix. The expensive half — attaching the section pages, or keeping one authoritative copy of the specifics on those two nodes — is still open. [Section 9](../sections/09-measurements.md) has no subagent — the coach takes those measurements in person. ### How the map was decided ```mermaid flowchart LR subgraph EVERY ["Loaded by everything"] CR["Core rules
the scribe role, one question
at a time, never infer"] end subgraph ASKING ["Loaded when the subagent asks questions"] VA["Voicing answers"] SC["Stop conditions"] end subgraph SOME ["Loaded only where the content demands it"] MX["Matrix by voice
sections 2, 3, 7"] SN["Sensitive questions
sections 2, 3, 7, 11"] end subgraph CLOSING ["Loaded only by the closing subagents"] RF["Red flags
triage outcomes, generic"] HR["Handover record"] end CR --> ASKING ASKING --> SOME SOME --> CLOSING ``` Four rules produce the whole table: 1. **[Core rules](../knowledge-base/core-rules.md) goes everywhere.** It is the only page with no exceptions, and it is listed on all thirteen nodes rather than shared from the agent. Repeating it is the price of every node being able to inherit nothing. 2. **A subagent that asks questions gets [voicing](../knowledge-base/voicing-answers.md) and [stop conditions](../knowledge-base/stop-conditions.md).** The intro, stop-and-refer and handover subagents do not ask questionnaire questions, so they do not get the voicing guide. The intro *does* get stop conditions — a client can disclose chest pain while you are still explaining the call. 3. **Content-specific pages follow the content.** Only three sections have matrix questions; only four have sensitive blocks. Shipping those pages everywhere would cost every subagent context for a problem it never meets. 4. **Recognition lives with the questions that can trigger it; classification lives at the end.** A section subagent needs to *recognise* a trigger and hand off — the flags its own fields can produce are filtered onto its own section page (or, for two sections, are simply absent, because none of their fields drive one), so it never needs [red flags](../knowledge-base/red-flags.md) loaded at all. What every question-asking subagent gets instead is [stop conditions](../knowledge-base/stop-conditions.md), which teaches the *behaviour* — say the wording, hand off, don't soften it — rather than the list. Turning a recognised trigger into one of the four triage outcomes is the closing subagents' job. !!! warning "Widening a page's audience costs every turn it is loaded on" Every page here is injected whole, not retrieved, so a page added to a node is in context for every question that node asks. Before widening a page's audience, check whether the subagents that would receive it actually act on it. The usual right answer is a new, smaller page on the two or three nodes that do. ## Intro Opens the call. Confirms it is the right person, says who is calling and why, gets consent to record, and sets expectations about length and the option to stop. - **Does not** ask any questionnaire question, including "just the easy first one". - **Does** carry [stop conditions](../knowledge-base/stop-conditions.md), because clients volunteer symptoms during the explanation. - **Ends by** handing to section 1, or by rescheduling if it is a bad moment. A client who says "now isn't great" gets a callback offer, not persuasion. The single most valuable thing it does is tell the client they can stop, skip any question, and decline anything without explaining why. Everything after depends on them believing that. ## Section subagents Ten of the thirteen. Each owns one section and runs the same three beats — announce, ask, hand back — described in [the interview protocol](agent-protocol.md#the-shape-of-the-call). They are ten nodes running the *same* base prompt. What differs between them is only: which section page is attached, which content-specific reference pages come with it, and which node the workflow moves to next. The shared scribe rules are written once, on the agent. !!! danger "A section subagent never asks another section's questions" Not even when the answer would obviously help, and not even when the client volunteers it. Volunteered answers get recorded against their field ID and passed on in the handoff state; the subagent that owns the field skips it and says so. Asking outside your section is how two subagents end up asking the same thing twice. ### Handing to the next one Each section subagent ends by offering a break and passing state. It does not announce the next section — the subagent that owns it does, because it is the one that knows how long its section takes and what it involves. The break matters more than it looks. Ninety minutes is too long for one sitting, and the natural break after section 4 is also the point where screening is complete, so an interrupted call has already produced the part that mattered most. ## Stop and refer Takes over the moment a red flag fires, from any subagent, at any point. - Delivers the stop wording from [stop conditions](../knowledge-base/stop-conditions.md) **verbatim**. No softening, no speculation about the cause. - Repeats the emergency-services line if the symptom is happening now. - Marks the record `Refer & stop` with the field that triggered it. - Can **de-escalate**: if the trigger turns out not to qualify, control returns to the section it came from and the call continues. This is why an unsure section subagent should escape rather than judge — escaping is reversible, carrying on is not. - Hands to handover. The de-escalation is not a second edge in the workflow. Every red-flag edge carries a `backward_condition` alongside its forward one, so the same edge that takes the call out of a section is the one that puts it back — see [edges](elevenlabs-setup.md#edges). ## Handover Closes the call and produces the record. Loads [the handover record](../knowledge-base/handover-record.md) and [red flags](../knowledge-base/red-flags.md) for the triage-outcome definitions. - Merges the handoff state from every subagent that ran. - Lists every red flag with its triggering field, and every decline. - **Proposes** a triage outcome with its reasoning visible — Clear, Proceed with caution, Clearance required, or Refer and stop. It does not decide one. - Tells the client what happens next and when. - Runs [the closing checklist](../knowledge-base/handover-record.md#before-finishing). A call that ended early still gets a handover. Sixty answered fields are worth having, and the record says where the call stopped and whether a callback is needed — see [partial calls](../knowledge-base/handover-record.md#partial-calls). # Context and handoff When the workflow moves to a new node, that subagent is working from its own instructions and its own pages — not from a replay of the call so far. Everything it needs to avoid re-asking, re-explaining or contradicting what came before has to be carried forward explicitly. That payload is the **handoff state**, and it is the one piece of the design that has to be got right — the rest degrades gracefully, this fails loudly and in front of the client. ## The context budget Why the workflow is split at all. A rough accounting of what a single undivided agent would carry: | | Approximate size | |---|---| | Eleven section pages | ~55 KB | | The full reference directory | ~25 KB | | A ninety-minute transcript, by the end | large and growing | | **The section currently being asked** | **~5 KB** | The last row is the point. Undivided, the thing the agent is actually doing occupies a few per cent of its attention, and the proportion gets worse with every turn as the transcript grows. A section subagent carries its own page, three or four short reference pages, and a handoff state measured in kilobytes. What it is doing dominates what it is holding. !!! tip "Budget per node, not per call" Splitting does not reduce the work the call does in total — it changes what is competing for attention *at any one moment*, and only that second number affects whether the client gets asked the right question. Nothing is shared from the agent down: every node lists its own pages and inherits none. Shared pages are repeated rather than pooled, which costs a little duplication in the config and buys the guarantee that a subagent cannot see a section it does not own. ## What travels The handoff state, carried as dynamic variables as the workflow moves from node to node. The four seeded at call time — `client_name`, `practice`, `coach`, `form_version` — are declared on the agent under `dynamic_variable_placeholders`; the rest accumulate as the call runs. | Key | Carries | Why the next subagent needs it | |-----|---------|-------------------------------| | `client_name` | What the client asked to be called | So subagent five doesn't reintroduce itself to someone forty minutes in | | `form_version` | The questionnaire version being asked | Goes in the handover; answers are meaningless without it | | `sections_done` | Which sections completed | Answering "how much is left?" honestly | | `answers` | Every field ID with its value and status | The whole record so far | | `volunteered` | Field IDs answered out of turn, with values | So the owning subagent skips them and says it already has them | | `declines` | Field IDs the client declined | **Never ask these again.** See below | | `flags` | Red flags found, with triggering fields | The handover assembles the triage proposal from these | | `stopped_at` | Set only if a stop condition fired | Tells stop-and-refer what it is dealing with | | `notes` | Free text a coach should read | Things that fit no field | Every entry in `answers` carries one of the four statuses from [the handover record](../knowledge-base/handover-record.md#what-to-record): `answered`, `declined`, `skipped — not triggered`, `skipped — section omitted`. !!! danger "A decline that arrives as a blank gets asked again" This is the failure mode the handoff exists to prevent, and it is the worst one available — the client declined something personal, was promised it would not come up again, and a later subagent asks it twenty minutes on because the decline reached it as an empty field. `declined` is a value, not an absence. Every subagent treats it as final, and [optional and sensitive questions](../knowledge-base/sensitive-questions.md) is loaded by all four sections where it matters most. ## The rules of a handoff 1. **Pass state before speaking.** The next subagent announces its section; it cannot do that correctly without knowing what has already been answered. 2. **Never pass a summary in place of fields.** "Client seems generally healthy" is not a handoff. Field IDs and values are. 3. **Never drop a key you did not use.** A section subagent that has no red flags still passes `flags` through untouched. State accumulates; it does not get rewritten by each hop. 4. **Volunteered answers move up, not down.** If section 2 catches an answer belonging to section 8, it goes in `volunteered` and section 8 skips it. It does not get re-asked "properly" in context. 5. **The client's own words survive.** Where phrasing carries information the option label loses, both travel. "I can't get down on the floor since the surgery" is worth more than a boolean. ## What deliberately does not travel - **The transcript.** Subagents get structured state, not a conversation log. Passing the transcript would reintroduce exactly the context growth the split removed. - **The previous subagent's reasoning.** Why section 3 thought something was worth flagging is not section 4's business; the flag itself is. - **Reference pages.** Each node carries its own, per [the load map](subagents.md#the-load-map). Nothing forwards documentation to the next node. ## When a call drops The state is the record. A call that ends at section 7 has produced a valid, partial intake — and because state is passed at every hop rather than held in one context, nothing is lost that had already been handed on. The handover subagent runs against whatever state exists, marks the remaining sections `skipped — section omitted`, and notes where the call ended. A callback resumes from `sections_done` rather than from the top; the client is not asked sections 1 to 6 a second time. # ElevenLabs setup How the fleet described in [The subagents](subagents.md) is actually configured in this repository, and how it gets deployed. ## One agent, thirteen subagent nodes There is exactly **one agent** in the ElevenLabs account: **Questionnaire Intake Agent**. The subagents are not separate agents — they are `override_agent` nodes inside that agent's workflow, and the workflow graph is what moves the call from one to the next. ```text elevenlabs/ ├── agents.json the one agent, and its ID once pushed ├── tools.json custom tools (none yet) └── agent_configs/ └── questionnaire-intake-agent.json the agent, workflow included ``` That single file holds everything: the shared prompt, the voice and ASR settings, and the fifteen-node workflow. There is no per-subagent config file and no linking step. !!! warning "Always invoke the CLI through `bunx`" Not `npx`, and not a global install. See `CLAUDE.md` at the repository root. The CLI must also be run from inside `elevenlabs/`, since that is where `agents.json` lives. ## The workflow `workflow.nodes` and `workflow.edges` are both **objects keyed by ID**, not arrays. Fifteen nodes: | Node ID | Type | Label | |---------|------|-------| | `start_node` | `start` | — | | `intro` | `override_agent` | Intro | | `section_01` … `section_11` | `override_agent` | One per section (ten of them) | | `stop_and_refer` | `override_agent` | Stop and refer | | `handover` | `override_agent` | Handover | | `end_node` | `end` | — | Each `override_agent` node carries: | Field | Holds | |-------|-------| | `label` | What shows in the workflow editor | | `additional_prompt` | This subagent's own instructions, appended to the shared prompt | | `additional_knowledge_base` | The pages this subagent loads — see [the load map](subagents.md#the-load-map) | | `entry_behavior` | `wait_for_user` for the intro, `generate_immediately` for the rest | | `position` | `{x, y}` so the editor lays out cleanly | The shared scribe rules live once in the agent's base `conversation_config.agent.prompt.prompt`, not thirteen times. A node's `additional_prompt` is appended to it, which is what makes a subagent a *specialisation* of the interviewer rather than a fresh one. ### Edges Twenty-six of them. Each has a `source`, a `target`, and a `forward_condition` that is either `{"type": "unconditional"}` or `{"type": "llm", "condition": "…"}`. ```json "section_02_to_section_03": { "source": "section_02", "target": "section_03", "forward_condition": { "type": "llm", "condition": "Section 2 is complete and a break has been offered." } } ``` The eleven red-flag edges also carry a **`backward_condition`**, which is how de-escalation is expressed without a second edge: ```json "section_02_to_stop": { "source": "section_02", "target": "stop_and_refer", "forward_condition": { "type": "llm", "condition": "An answer in section 2 matches the stop and refer immediately list…" }, "backward_condition": { "type": "llm", "condition": "The trigger was checked against the red flags reference and does not qualify, so section 2 resumes where it left off." } } ``` Every question-asking node has one of these, so a red flag can be caught anywhere in the call and, if it turns out not to qualify, control returns to exactly the section it came from. !!! note "Fifteen nodes exceeds the usual guidance" ElevenLabs suggests keeping workflows to four to seven nodes. This one is deliberately larger: one node per section *is* the context-isolation strategy, and collapsing sections together would undo it. See [why a fleet](how-it-works.md#why-a-fleet-and-not-one-agent). ## Deploying One pass. There are no cross-agent IDs to resolve, so the two-step deploy the old fleet needed is gone. ```bash bunx @elevenlabs/cli agents push ``` Preview first with `--dry-run`. Note that `--dry-run` does not validate against the server schema — it only reports which agents would be sent. ## The knowledge base Every node carries its own pages explicitly, and **inherits nothing**. Two fields do that job together: | Field on the node | Set to | Effect | |---|---|---| | `conversation_config.agent.prompt.knowledge_base` | `[]` | Inherit nothing from the agent | | `additional_knowledge_base` | Its own pages, listed one by one | The node's entire knowledge base | The agent's own `knowledge_base` is `[]` as well, so there is nothing to inherit even by accident. A subagent sees exactly the pages named against it in [the load map](subagents.md#the-load-map) — never a neighbouring section's. ```json "conversation_config": { "agent": { "prompt": { "knowledge_base": [] } } }, "additional_knowledge_base": [ { "type": "file", "id": "AOekAr0fqiJvLIxCfWbn", "name": "section-02-health-history", "usage_mode": "prompt" }, { "type": "file", "id": "834jHRo5jDGXEUoEnGhh", "name": "ref-core-rules", "usage_mode": "prompt" } ] ``` Seventeen documents are uploaded — the ten client-facing section pages and the seven reference pages subagents load. Upload with: ```bash curl -X POST "https://api.elevenlabs.io/v1/convai/knowledge-base/file" \ -H "xi-api-key: $ELEVENLABS_API_KEY" \ -F "file=@docs/sections/02-health-history.md;type=text/markdown" \ -F "name=section-02-health-history" ``` !!! warning "Attach documents through the config, not a PATCH" `workflow.nodes` replaces rather than merges, so a partial `PATCH` that sends one node drops the other fourteen — the API rejects it for having no start node. Edit the config file and `agents push`; the CLI always sends the workflow whole. !!! danger "`usage_mode` is `prompt`, and RAG stays off" `rag.enabled` is `false` and every document is attached with `"usage_mode": "prompt"`, so a section page is injected whole rather than retrieved against. This is a correctness decision. Retrieval optimises for relevance; asking a questionnaire needs completeness — every question, in order, with its conditional logic intact. A question that is not retrieved is silently never asked, and the handover record cannot then tell that apart from *skipped — not triggered*. The full reasoning, and the one narrow exception, are recorded in `CLAUDE.md`. Each node holds one section — 12.8 KB at worst, ~3.5k tokens — which is what makes injecting it whole affordable. That is the [context budget](context-handoff.md#the-context-budget) doing its job: the workflow split already solved the problem RAG would otherwise be solving. Safety-critical material never goes in the knowledge base at all. The scribe rules and the stop-and-refer triggers live in the agent's base **prompt**, where they are present on every turn rather than depending on a retriever. !!! tip "Re-upload when a question changes" The site stays the source of truth only if the uploaded copy tracks it. Reword a question here, re-upload that section's page, and the next call asks the new wording. ## Placing a call One agent means one entry point — there is no risk of dialling into the middle of the questionnaire. ```bash curl -X POST "https://api.elevenlabs.io/v1/convai/twilio/outbound-call" \ -H "xi-api-key: $ELEVENLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_id": "", "agent_phone_number_id": "", "to_number": "+972500000000", "conversation_initiation_client_data": { "dynamic_variables": { "client_name": "Dana", "practice": "the practice", "coach": "Inbal", "form_version": "2026-08" } } }' ``` Those four dynamic variables seed the call; everything else accumulates as the workflow runs. They are declared under `dynamic_variable_placeholders` so a test call still works when they are not supplied. ## Language The agent is set to `"language": "he"`, with the questionnaire pages in English — each subagent reads the English page and asks in Hebrew. Per `CLAUDE.md`, all prompt and `first_message` strings in the config are written in English regardless of the spoken language. Change `language` in the config, not the strings, if the agent should speak something else. ## Voice settings Set once on the agent and inherited by every node, which is what keeps the call sounding like one interviewer rather than fifteen. | Setting | Value | Why | |---------|-------|-----| | `voice_id` | one voice | Fifteen nodes, one apparent interviewer | | `model_id` | `eleven_v3_conversational` | Built for turn-taking | | `asr.provider` | `scribe_realtime`, high quality | Numbers and medication names have to survive | | `turn_timeout` | 10s | Longer than default: these questions need thinking time | | `silence_end_call_timeout` | 60s | Ends a dead call without chasing | | `max_duration_seconds` | 7200 | A full intake runs ~90 minutes, with breaks | | `temperature` | 0 | A scribe should not be creative | !!! danger "One voice is a presentation choice, not a disclosure choice" The client is told once, by the intro subagent, that they are talking to an automated system. A single voice across the workflow stops the call feeling broken; it must never be used to imply a human is on the line. # The interview protocol How an agent runs this questionnaire as a conversation instead of a form. A form gets abandoned at question 40; a conversation doesn't, but only if the agent behaves like a good intake interviewer rather than a survey being read aloud. This page is the front door. The protocol itself is split across the pages below, because it is not read by one agent — it is read by [a fleet of subagents](subagents.md), each of which loads only the parts that govern its own stretch of the call. !!! info "Why the protocol is split into small pages" A voice agent has a limited context window and a latency budget measured in hundreds of milliseconds. Every page loaded into a subagent competes with the section it is actually there to ask. So each page here has a declared audience, stated in the banner at the top of it, and no subagent loads a page it does not need. [The context budget](context-handoff.md) explains the sizing. ## The pages | Page | Covers | Loaded by | |------|--------|-----------| | [Core rules](../knowledge-base/core-rules.md) | Scribe role, one question at a time, never infer, voice-specific handling | **Every** subagent | | [Voicing each answer type](../knowledge-base/voicing-answers.md) | How to ask each answer type out loud and map the reply | Every section subagent | | [Matrix questions by voice](../knowledge-base/matrix-in-voice.md) | The cluster rule for grid questions | Sections 2, 3, 7 | | [Optional and sensitive questions](../knowledge-base/sensitive-questions.md) | Declines, disclosures, and how they survive a handoff | Sections 2, 3, 7, 11 | | [Stop conditions](../knowledge-base/stop-conditions.md) | Recognising a trigger and getting out of the way | Every section subagent, stop & refer | | [The handover record](../knowledge-base/handover-record.md) | Field-ID record format, triage proposal, closing checklist | Handover, stop & refer | | [Screening red flags](../knowledge-base/red-flags.md) | The triage-outcome framework, generic | Stop & refer, handover | | [Question patterns](../authoring/question-patterns.md) | The answer-type data model | Nobody — authoring reference | | [Blank section template](../authoring/section-template.md) | Starting a new section | Nobody — authoring reference | The authoritative mapping of subagent → pages is [the load map](subagents.md#the-load-map). This table is its summary, read from the other direction. ## The shape of the call Every subagent, whichever section it owns, runs the same three beats: 1. **Announce.** One sentence on what's coming and roughly how long, then straight into the first question. Don't preview the questions themselves. > Next is the health and medical history — about fifteen minutes, and it's > the longest stretch. Some of it is routine screening. First one: has a > doctor ever told you that you have a heart condition or high blood > pressure? 2. **Ask.** One question at a time, in the order on the section page, honouring conditionals, per [Core rules](../knowledge-base/core-rules.md). 3. **Hand back.** Offer a break, then pass the state on. The subagent does not introduce the next section — the subagent that owns it does, because it is the one that knows how long it takes. ## Writing a subagent prompt Each subagent's prompt is assembled from three parts, and only the third differs between them: ```text [1] The role block — identical in every subagent [2] The pages this subagent loads — from the load map [3] The section it owns, and where it hands off ``` The role block: ```text You are conducting one section of a fitness intake questionnaire for [practice] on behalf of [coach], over the phone. You are a scribe: you ask, record and flag. You never diagnose, interpret, reassure, or give training, medical or nutrition advice. You own ONE section. Ask only its questions, in the order given on its page. When it is finished, hand back — do not start the next section, and do not answer questions belonging to a section you do not own. If the client answers one anyway, record it against its field ID and pass it on. Ask ONE question per turn. Never batch questions. Never read out a numbered list of questions. Let the client answer in their own words, then map their answer to the field's declared answer type. Do not make them speak in option labels. Do not fill in, infer or complete any answer they did not give. If the client gives an obviously unreasonable, nonsensical or irrelevant answer, acknowledge it briefly and playfully, without mocking or embarrassing them, then ask the same question again in plain language. Do not use playful handling for health, safety, distress or other sensitive disclosures; treat those seriously and follow the normal screening rules. Only ask a conditional question when its trigger has fired. Never re-ask something already answered or declined — the handoff state tells you which, and both are final. If any answer matches the "Stop and refer immediately" list, stop the questionnaire, say the stop wording verbatim, and hand to the stop & refer subagent. Never soften this and never speculate about the cause. Record every answer against its field ID, marking each as answered, declined, skipped-not-triggered, or skipped-section-omitted. Offer a break before handing back. ``` !!! tip "Give the subagent the pages, not a copy of the questions" Attach the section page from this site rather than pasting its question table into the prompt. When a question is reworded here, the subagent picks it up — and there's only ever one version of the questionnaire. ## Why this is split across subagents The split exists because **voice** agents cannot hold all eleven sections at once: the context is limited, the latency budget is tighter, and a prompt carrying all eleven sections degrades the asking of every one of them. [Why subagents](how-it-works.md#why-a-fleet-and-not-one-agent) has the argument in full. # 1. About you Basic identity and contact details, plus the two things that matter for programme design before anything else: what the working day looks like, and who to call if something goes wrong. ## 1.1 Identity | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `client_full_name` | What is your full name? | Short text | — | Yes | | `client_dob` | Date of birth | Date | `YYYY-MM-DD` | Yes | | `client_gender` | Gender identity | Single choice | Female / Male / other | No | ## 1.2 Contact | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `client_email` | Email address | Email | — | Yes | | `client_phone` | Mobile number | Phone | Include country code | Yes | | `client_address` | City / country | Short text | — | Yes | | `client_contact_pref` | Best way to reach you | Multi-select | Email / WhatsApp / Phone call | Yes | ## 1.3 Household | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `client_relationship_status` | Relationship status | Single choice | Single / In a relationship / Married / Separated or divorced / Widowed / Prefer not to say | Yes | | `client_children` | Do you have children? | Yes/No | — | No | | `client_children_count` | How many, and how old? | Short text | — | Cond. | | `client_children_health` | Is there any important information I should know about your children's health? | Yes/No | — | Cond. | | `client_children_health_detail` | What should I know? | Short text | — | Cond. | `client_children_count` → if `client_children` = Yes `client_children_health` → if `client_children` = Yes `client_children_health_detail` → if `client_children_health` = Yes !!! tip "This is a logistics question, not a personal one" Young children, shared custody and caring duties are the most common reason a training schedule fails. Ask here, and read it against `life_caregiving` in [section 8](08-lifestyle.md) and `pref_days_which` in [section 10](10-preferences-logistics.md). ## 1.4 Work & daily routine | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `client_occupation` | What is your occupation? | Short text | — | No | | `client_work_satisfaction` | How do you feel about your work? | Single choice | Satisfied / It's fine / Not satisfied / It's a major source of stress / I want to change it | No | | `client_work_activity` | How physically active is your working day? | Single choice | Seated most of the day / Mix of sitting and standing / On my feet most of the day / Physically demanding / Not currently working | Yes | | `client_work_hours` | Typical working hours per week | Number | hours | No | !!! note "A question doing real work" `client_work_satisfaction` is a stress measure disguised as a demographic — it predicts adherence better than working hours do, and it comes from the practitioner sheet, which asked it as `מרוצה / לא מרוצה / מביא לדחק`. ## 1.5 How you found us | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `client_referral_source` | How did you hear about us? | Single choice | Search / Social media / Friend or family / Existing client / Gym / Healthcare referral / Other | No | | `client_referral_detail` | Who referred you? | Short text | — | No | `client_referral_detail` → if `client_referral_source` is *Friend or family*, *Existing client* or *Healthcare referral*. ## 1.6 Red flags Age, from `client_dob`, sets three thresholds that change what happens later in the questionnaire and at the assessment: | Condition | Additional step | |-----------|-----------------| | Under 18 | Guardian consent required (`sign_guardian_*` in [section 11](11-consent.md)); no maximal loading | | Over 65 and previously sedentary | Extended progressive onboarding; balance and fall-prevention work included | | Over 40, sedentary, with two or more cardiovascular risk factors | Consider clearance before vigorous-intensity work | "Previously sedentary" and the cardiovascular risk factor count are answered elsewhere — `act_currently_active` in [section 5](05-activity-history.md), and `health_smoking` / `health_family_matrix` in [section 2](02-health-history.md#29-red-flags). Age alone doesn't resolve either threshold; it just determines whether they need checking. Full outcome definitions: [Screening red flags](../knowledge-base/red-flags.md). --- **Next:** [2. Health & medical history](02-health-history.md) # 2. Health & medical history The gate. Everything downstream depends on this section being answered honestly, so it comes early and its wording should stay plain and non-judgemental. !!! danger "Stop rule" A *Yes* to any question in [2.1 Pre-exercise screening](#21-pre-exercise-screening) means **no exercise testing and no programming** until, where indicated, written medical clearance is on file. See [Screening red flags](../knowledge-base/red-flags.md). ## 2.1 Pre-exercise screening Modelled on the PAR-Q+. All are required, all are Yes/No unless noted. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `parq_1_heart` | Has your doctor ever said you have a heart condition **or** high blood pressure? | Yes/No | — | Yes | | `parq_2a_breathlessness` | Do you experience shortness of breath? | Single choice | No / Yes, at rest / Yes, during physical activity / Yes, both at rest and during physical activity | Yes | | `parq_2b_heart_rate` | Do you experience changes or irregularities in your heart rate? | Single choice | No / Yes, while resting / Yes, while sleeping / Yes, both while resting and sleeping | Yes | | `parq_3_dizziness` | Have you lost balance because of dizziness, or lost consciousness, in the last 12 months? | Yes/No | — | Yes | | `parq_4_condition` | Have you ever been diagnosed with another chronic medical condition? | Yes/No | — | Yes | | `parq_5_medication` | Are you currently taking prescribed medication for a chronic condition? | Yes/No | — | Yes | | `parq_6_msk` | Do you have a bone, joint or soft-tissue problem that could be made worse by becoming more physically active? | Yes/No | — | Yes | ## 2.2 Conditions | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_conditions` | Have you been diagnosed with any of the following? | Multi-select | High blood pressure / High cholesterol / Type 1 diabetes / Type 2 diabetes / Pre-diabetes / Heart disease / Stroke / Asthma / COPD or other lung condition / Thyroid disorder / Osteoporosis or osteopenia / Arthritis / Autoimmune condition / Cancer (current or past) / Epilepsy / Kidney disease / Liver disease / Digestive or GI condition / Anxiety / Depression / Other / None of these | Yes | | `health_conditions_other` | Please describe the other condition(s). | Long text | — | Cond. | | `health_diabetes_mgmt` | How is your diabetes managed? | Multi-select | Diet / Oral medication / Insulin / Other | Cond. | `health_conditions_other` → if `health_conditions` includes *Other* `health_diabetes_mgmt` → if `health_conditions` includes any diabetes option ## 2.3 Vitamins and dietary supplements | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_supplements` | Do you currently take any vitamins or dietary supplements? | Multi-select | None / Multivitamin / Vitamin D / Vitamin C / Vitamin B12 or B-complex / Iron / Magnesium / Calcium / Zinc / Omega-3 / Probiotics / Fiber supplement / Protein powder / Collagen / Creatine / Herbal or hormonal supplement / Other | No | | `health_supplements_other` | Please specify. | Short text | — | Cond. | | `health_supplements_detail` | For each supplement selected, list the product name, dosage and how often you take it. | Repeating group | Product name, Dosage, How often | Cond. | | `health_allergies` | Do you have any allergies? | Long text | Include severity | Yes | | `health_drug_sensitivity` | Do you react badly to any medication or substance? | Long text | — | No | `health_supplements_other` → if `health_supplements` includes *Other* `health_supplements_detail` → if `health_supplements` is not *None* ## 2.4 Surgical & hospital history | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_surgeries` | Have you had any surgery? | Yes/No | — | Yes | | `health_surgeries_detail` | List each operation and its approximate date. | Repeating group | Procedure, date, fully recovered? | Cond. | `health_surgeries_detail` → if `health_surgeries` = Yes ## 2.5 Family history The source sheet asks per relative rather than in aggregate, which surfaces noticeably more than a single yes/no does. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_family_matrix` | Has any of these relatives been diagnosed with the conditions listed? | Matrix | **Rows:** Mother · Father · Sibling · Maternal grandparent · Paternal grandparent · Aunt or uncle. **Columns:** Diabetes · Heart disease · Stroke · High blood pressure · Cancer · Epilepsy · Osteoporosis · Autoimmune · Other | No | | `health_family_matrix_other` | Which relative, and what condition? | Long text | — | Cond. | | `health_family_detail` | Anything you'd like to add about family health? | Long text | — | No | `health_family_matrix_other` → if `health_family_matrix` includes *Other* for any relative ## 2.6 Blood tests & other practitioners | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_bloods_file` | Upload the results if you have them. | File upload | PDF or image | No | | `health_practitioners` | Are you seeing, or have you recently seen, any of these? | Multi-select | Dietitian / Naturopath / Acupuncturist / Osteopath / Chiropractor / Physiotherapist / Psychologist or therapist / Other complementary practitioner / None of these | No | | `health_practitioners_detail` | Who, what for, and are they treating you now? | Long text | — | Cond. | `health_practitioners_detail` → if `health_practitioners` is not *None of these* !!! tip "`health_practitioners` prevents contradictory advice" Clients frequently arrive already working with someone else and don't mention it. Finding out on day one avoids a programme that pulls against a physiotherapist's plan or a dietitian's protocol. ## 2.7 Reproductive health Safety-critical questions only. Cycle detail lives in [section 3.7](03-systems-review.md#37-menstrual-hormonal) — don't duplicate it here. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_births` | How many pregnancies and births have you had? | Short text | — | No | ## 2.8 Lifestyle risk factors | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `health_smoking` | Do you smoke or vape? | Single choice | Never / Former, quit over a year ago / Former, quit within a year / Occasionally / Daily | Yes | | `health_alcohol_units` | How much alcohol do you typically consume in an average week? Indicate the quantity for each type. | Multi-select | I do not drink alcohol / Wine / Beer / Spirits / Other | Yes | | `health_alcohol_wine_qty` | Wine — glasses or bottles per week | Short text | — | Cond. | | `health_alcohol_beer_qty` | Beer — bottles or cans per week | Short text | — | Cond. | | `health_alcohol_spirits_qty` | Spirits — shots or drinks per week | Short text | — | Cond. | | `health_alcohol_other_qty` | Other — please specify | Short text | — | Cond. | `health_alcohol_wine_qty` → if `health_alcohol_units` includes *Wine* `health_alcohol_beer_qty` → if `health_alcohol_units` includes *Beer* `health_alcohol_spirits_qty` → if `health_alcohol_units` includes *Spirits* `health_alcohol_other_qty` → if `health_alcohol_units` includes *Other* *I do not drink alcohol* is an exclusive escape option: selecting it clears every other option, and selecting any other option clears it. See [Multi-select conventions](../authoring/question-patterns.md#multi-select-conventions). ## 2.9 Red flags The PAR-Q+ screening in 2.1, and the conditions and history below, drive most of triage. Full outcome definitions are in [Screening red flags](../knowledge-base/red-flags.md); what follows is the subset this section's own fields feed. **Stop and refer immediately** — no assessment, no session, today: - Shortness of breath at rest (`parq_2a_breathlessness` = *Yes, at rest* or *Yes, both at rest and during physical activity*) - Loss of consciousness or unexplained collapse in the last 12 months (`parq_3_dizziness` = Yes) !!! note "Chest pain is not on this list, and that is correct" No field in this section asks about it — `parq_1_heart` asks about a *diagnosis*, and `parq_2a_breathlessness` asks about breath. Chest pain is asked once, as an option on `sys_cardio` in [3.3](03-systems-review.md#33-cardiorespiratory), and its stop entry lives on that page with the field that produces it. **Clearance required before training** — written clearance from the client's doctor, on file, before anything else: - Any *Yes* on the PAR-Q+ (2.1) that is not otherwise resolved by the rest of the questionnaire - A known heart condition, previous cardiac event, or cardiac surgery (`health_conditions` includes *Heart disease* or *Stroke*) - Uncontrolled diabetes, or diabetes with complications — neuropathy, retinopathy, kidney involvement (`health_conditions`, `health_diabetes_mgmt`) - Cancer treatment currently underway or completed within the last 6 months (`health_conditions` includes *Cancer*) - Epilepsy with seizures in the last 12 months (`health_conditions` includes *Epilepsy* — cross-check against `sys_head` / `sys_neuro` in [3.10](03-systems-review.md#310-red-flags)) - Recent surgery — within 12 weeks, or outside the surgeon's stated return timeline (`health_surgeries_detail`) - Osteoporosis with a previous fragility fracture (`health_conditions` includes *Osteoporosis*) **Proceed with caution** — train, but with documented modifications and a note of what was changed and why: | Flag | Source field | Typical modification | |------|--------------|----------------------| | Controlled asthma | `health_conditions` | Extended warm-up; inhaler present and accessible | | Controlled type 2 diabetes | `health_conditions` | Fixed session timing, glucose checked pre-session, fast-acting carbohydrate on hand | | Osteopenia, no fracture history | `health_conditions` | No spinal flexion under load, no twisting under load; build impact gradually | | Under active physio care | `health_practitioners` | Coordinate with the clinician before loading the affected area | `health_smoking` and `health_family_matrix` also count toward the cardiovascular risk factors used by the age thresholds in [1.6](01-about-you.md#16-red-flags). If a stop condition fires here, use the wording in [Stop conditions](../knowledge-base/stop-conditions.md#the-wording) and hand off immediately — do not finish this section first. --- **Previous:** [1. About you](01-about-you.md) · **Next:** [3. Systems review](03-systems-review.md) # 3. Systems review A symptom sweep by body system, adapted from the practitioner intake sheet (`דף תשאול`). It exists to catch things the PAR-Q+ in [section 2](02-health-history.md) does not ask about — and to catch them *before* a training programme starts, not after a client mentions them in passing eight weeks in. !!! danger "Screening tool, not a diagnostic one" This section identifies **when to refer out**. It does not identify what is wrong, and nothing here should be interpreted, treated or "supported" by a coach. A cluster of symptoms is a reason to say *please see your doctor about this* and to note the modification it forces on the programme — nothing more. Several blocks below (`sys_endocrine`, `sys_pancreas`, `sys_adrenal`) sit inside a **licensed practitioner's scope** — dietitian, naturopath, doctor. If your registration doesn't cover them, delete those blocks rather than collecting answers you cannot act on. Collecting health data you have no lawful basis to process is a problem in its own right. ## 3.1 How to answer Each block lists symptoms as prompts. The client ticks what applies and adds detail only where something is present — the prompt list is deliberately long so that nothing is missed, not so that every line gets an answer. For anything ticked, the follow-up asks the same four things: **since when, how often, what makes it worse, what makes it better.** ## 3.2 Head & neurological | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_head` | Do you experience any of these? | Multi-select | Headaches / Migraines / Dizziness / Fainting / Tremors / Memory problems / Difficulty concentrating / None of these | Yes | | `sys_head_detail` | Since when, how often, what triggers it, what relieves it? | Long text | — | Cond. | | `sys_head_triggers` | Do any of these seem to bring it on? | Multi-select | Food / Stress / Alcohol / Dehydration / Tiredness / Screen time / Menstrual cycle / Weather / Don't know | Cond. | | `sys_neuro` | And any of these? | Multi-select | Muscle weakness / Muscle pain / Numbness or pins and needles / Seizures / Insomnia / None of these | Yes | | `sys_neuro_detail` | Where, and since when? | Long text | — | Cond. | `*_detail` and `sys_head_triggers` → if the parent is anything other than *None of these* `sys_cardio_exertion` → if `sys_cardio` includes *Breathlessness on exertion*. A client who reports *Breathlessness at rest* has already fired a stop, so this question is never reached down that branch. !!! danger "Refer before training" Fainting, seizures, tremors, or numbness and weakness in a limb are **Refer & stop** — see [Screening red flags](../knowledge-base/red-flags.md). Dizziness is already captured as `parq_3_dizziness`; if it appears here but not there, go back and resolve the contradiction with the client. ## 3.3 Cardiorespiratory | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_cardio` | Do you experience any of these? | Multi-select | Breathlessness at rest / Breathlessness on exertion / Chest pain / Heart palpitations / Persistent cough / Wheezing / Night sweats / Swelling in the ankles or feet / None of these | Yes | | `sys_cardio_detail` | Describe what you ticked. | Long text | — | Cond. | | `sys_cardio_exertion` | At what level of effort does breathlessness start? | Single choice | At rest / Walking slowly / Walking briskly / Climbing stairs / Only during hard exercise / Not applicable | Cond. | !!! danger "Overlaps the PAR-Q+ deliberately" Breathlessness is asked twice — here and as `parq_2a_breathlessness` in [2.1](02-health-history.md#21-pre-exercise-screening). That redundancy is intentional: clients under-report on a form headed "screening" and report more freely on a symptom checklist. **Any disagreement between the two is resolved in the client's favour**, meaning the more serious answer stands and clearance is required. Chest pain is **not** asked twice. `sys_cardio` is the only field on the questionnaire that asks about it, so this page carries its stop entry alone — see [3.10](#310-red-flags). ## 3.4 Musculoskeletal Joint and spine symptoms are covered in depth in [section 4](04-injuries-and-movement.md). This block only catches the systemic pattern — symmetrical, migratory or inflammatory joint pain that suggests something other than a training injury. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_msk` | Do you experience any of these? | Multi-select | Joint pain in several joints at once / Joint pain that moves around / Morning stiffness lasting over 30 minutes / Joint swelling / Joint redness or heat / Chronic widespread pain / None of these | Yes | | `sys_msk_detail` | Which joints, and since when? | Long text | — | Cond. | !!! tip "Inflammatory versus mechanical" Morning stiffness over 30 minutes, symmetrical joint involvement, or swelling with heat point away from a mechanical problem you can program around. Refer, and don't load the affected joints until someone qualified has looked. ## 3.5 Digestive | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_digestive_appetite` | Do you have any issues with your appetite? | Yes/No | — | Yes | | `sys_digestive_portions` | Do you have any issues with portion sizes (eating too much or too little)? | Yes/No | — | Yes | | `sys_digestive_nausea` | Do you experience nausea? | Yes/No | — | Yes | | `sys_digestive_reflux` | Do you experience reflux or heartburn? | Yes/No | — | Yes | | `sys_digestive_bloating` | Do you experience bloating? | Yes/No | — | Yes | | `sys_digestive_wind` | Do you experience excessive wind? | Yes/No | — | Yes | | `sys_digestive_pain` | Do you experience abdominal pain? | Yes/No | — | Yes | | `sys_digestive_vomiting` | Do you experience vomiting? | Yes/No | — | Yes | | `sys_digestive_constipation` | Do you experience constipation? | Yes/No | — | Yes | | `sys_digestive_diarrhoea` | Do you experience diarrhoea? | Yes/No | — | Yes | | `sys_digestive_snacking` | Do you snack between meals? | Yes/No | — | Yes | | `sys_bowel_empty` | Do you feel that you fully empty your bowels? | Yes/No | — | No | | `sys_bowel_frequency` | How often do you have a bowel movement? | Short text | — | No | | `sys_laxatives` | Do you use laxatives? | Single choice | Never / Occasionally / Weekly / Daily | No | !!! danger "The three that are referrals, not notes" Blood in the stool, black or tarry stools, and unexplained vomiting were on the source sheet as matrix rows. They are **not** matrix rows — they are urgent referrals, and burying them in a grid makes them easy to skim past. They are asked separately below and they are not something a coach manages. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_gi_urgent` | Have you noticed any of these? | Multi-select | Blood in your stool / Black or tarry stools / Vomiting you can't explain / Unintentional weight loss / Difficulty swallowing / None of these | Yes | | `sys_gi_urgent_detail` | Since when? | Long text | — | Cond. | | `sys_gi_other` | And any of these? | Multi-select | Haemorrhoids / Anal fissures / Hernia / None of these | No | !!! danger "Stop rule" Any tick in `sys_gi_urgent` other than *None of these* means **Refer & stop**: no assessment, no programme, direct the client to their doctor today. Unintentional weight loss in particular is often mistaken for progress — it is not. ## 3.6 Urinary & pelvic | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_urinary` | Do you experience any of these? | Multi-select | Difficulty passing urine / Needing to go very frequently / Urgency / Pain or burning / Blood in urine / Recurrent infections / Kidney stones / Leaking when you cough, laugh or jump / None of these | Yes | | `sys_urinary_detail` | Describe what you ticked. | Long text | — | Cond. | | `sys_urine_frequency` | How frequently do you urinate during the day and at night? | Short text | — | No | | `sys_urine_colour` | How would you describe the usual color of your urine? | Short text | — | No | Blood in urine is a referral. ## 3.7 Menstrual & hormonal Every question is optional. Ask `sys_menses_status` of **every** client — it is the gate, and its *Not applicable* option is how a client for whom this block is irrelevant says so in one turn. Do not decide in advance who to skip it for: `client_gender` in [section 1](01-about-you.md#11-identity) is not a reliable proxy for whether someone menstruates, and pre-judging it is both wrong often enough to matter and unpleasant when it is wrong. If `sys_menses_status` is *Not applicable* or *Prefer not to say*, skip the rest of the block and record those fields as `skipped — not triggered`. Any other answer opens the block. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_menses_status` | Which describes you? | Single choice | Cycling regularly / Cycling irregularly / Pregnant / Postpartum / Perimenopausal / Post-menopausal / On hormonal contraception / Not applicable / Prefer not to say | No | | `sys_menses_age` | Age at first period | Number | years | No | | `sys_menses_length` | Typical cycle length | Number | days | No | | `sys_menses_duration` | How many days of bleeding? | Number | days | No | | `sys_menses_flow` | How heavy is the bleeding? | Single choice | Light / Moderate / Heavy / Very heavy | No | | `sys_menses_symptoms` | Do you get any of these around your cycle? | Multi-select | Cramping / Sugar cravings / Increased appetite / Low mood / Irritability / Mood swings / Bloating / Joint aches / Hot flushes / Fatigue / Headaches / None of these | No | | `sys_menses_training` | Does your cycle change what training feels possible? | Single choice | Significantly / Somewhat / Not really / Prefer not to say | No | | `sys_pregnancy_plans` | Are you planning a pregnancy in the next year? | Single choice | Yes / No / Maybe / Prefer not to say | No | `sys_menses_age`, `sys_menses_length`, `sys_menses_duration`, `sys_menses_flow`, `sys_menses_symptoms`, `sys_menses_training` and `sys_pregnancy_plans` → if `sys_menses_status` is anything other than *Not applicable* or *Prefer not to say* !!! tip "Why the detail earns its place" Cycle length, flow and symptom load are the difference between periodising training around a client's cycle and ignoring it. Heavy bleeding with fatigue is also worth an iron-status conversation with their doctor — `sys_menses_flow` = *Very heavy* alongside `sys_endocrine` fatigue is a common and very fixable pattern. Absent periods in a client who trains hard or eats little is a **referral**, not a training variable. Read it with `nut_disordered_history` in [section 7](07-nutrition.md). ## 3.8 Endocrine & metabolic !!! warning "Scope" Delete 3.8 unless a licensed practitioner is reading the answers. For a coach, the only actionable output is *refer to a doctor*, which [section 2](02-health-history.md) already achieves. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_endocrine` | Do you experience any of these? | Multi-select | Unusual sensitivity to cold / Unusual sensitivity to heat / Hair loss / Unexplained weight change / Persistent fatigue / Racing heart / Tremor / Very dry skin / None of these | No | | `sys_pancreas` | And any of these? | Multi-select | Shakiness when meals are delayed / Light-headedness before eating / Sweating between meals / Strong sugar cravings / Excessive thirst / None of these | No | | `sys_adrenal` | And any of these? | Multi-select | Exhausted on waking despite sleeping / Energy crash mid-afternoon / Second wind late at night / Light-headed on standing quickly / Craving salty food / None of these | No | | `sys_endocrine_detail` | Anything you'd like to add? | Long text | — | No | !!! note "On the last two blocks" `sys_pancreas` symptoms are worth flagging because they change **when** a client should eat relative to training, and because they may indicate undiagnosed glucose dysregulation — which is a doctor's question. `sys_adrenal` describes a real and common fatigue pattern, and the answers usefully shape session timing. But "adrenal fatigue" is not a recognised medical diagnosis, and these symptoms overlap heavily with poor sleep, under-eating, depression, anaemia and thyroid disease — all of which are diagnosable and treatable. Treat a positive cluster as a prompt to check [section 8](08-lifestyle.md) and to refer, never as a finding. ## 3.9 Anything else | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `sys_other` | Is there any other symptom that bothers you regularly? | Long text | — | No | | `sys_worst` | If you could fix one physical complaint, which would it be? | Long text | — | No | !!! tip "`sys_worst` is the one clients answer honestly" It routinely surfaces the thing they came in for but didn't put under "goals" — a knee that stops them playing with their kids, reflux that makes evening training miserable. Read it against `goal_primary` in [section 6](06-goals.md). ## 3.10 Red flags A symptom sweep is exactly where the largest share of the stop-and-refer list surfaces. Full outcome definitions are in [Screening red flags](../knowledge-base/red-flags.md). **Stop and refer immediately** — no assessment, no session, today: - Chest pain, pressure or tightness (`sys_cardio` includes *Chest pain*). Stop whether it comes on at rest or only on exertion — the distinction changes the urgency for the doctor, not whether you stop. Record whatever the client already said in `sys_cardio_detail`; do **not** ask a follow-up first. This is the trigger the whole stop-and-refer path was built for. - Breathlessness at rest or on minimal exertion (`sys_cardio_exertion` = *At rest* or *Walking slowly*, or `sys_cardio` includes *Breathlessness at rest*). *Walking slowly* is in the trigger deliberately: someone who is breathless crossing a room is not a training candidate today. - New, unexplained swelling in one leg with pain or warmth (`sys_cardio` includes *Swelling in the ankles or feet*, reported with pain or warmth) - Blood in the stool, black or tarry stools, or unexplained vomiting (`sys_gi_urgent`) - Unintentional weight loss (`sys_gi_urgent`) — easily mistaken for progress, and never treated as it - Difficulty swallowing that is new or getting worse (`sys_gi_urgent`) - Blood in the urine (`sys_urinary`) - Seizures, fainting or unexplained tremor (`sys_head`, `sys_neuro`) - New numbness or weakness in a limb (`sys_neuro`) — if it's pain-related rather than a standalone neurological symptom, see [4.2](04-injuries-and-movement.md#42-red-flags) too **Clearance required before training:** - Epilepsy with seizures in the last 12 months (`sys_head` or `sys_neuro` includes *Seizures* — cross-check against `health_conditions` in [2.9](02-health-history.md#29-red-flags)) - A concussion in the last 3 months without a return-to-activity clearance — there is no dedicated field yet; treat a head injury reported under `sys_head` as this trigger until one exists **Proceed with caution:** | Flag | Source field | Typical modification | |------|--------------|----------------------| | Pelvic floor symptoms | `sys_urinary` | Avoid impact and heavy intra-abdominal pressure; refer to a pelvic health physio | | Inflammatory joint pattern — several joints, migratory, morning stiffness over 30 min | `sys_msk` | Don't load affected joints; refer for a rheumatology opinion | | Symptoms of glucose dysregulation — shakiness when meals are delayed, excessive thirst | `sys_pancreas` | Fixed session timing, carbohydrate available, refer for blood glucose testing | | Absent periods in a client training hard or eating little | `sys_menses_status` | Reduce training load, refer; do not treat as a training variable | | Very heavy menstrual bleeding with fatigue | `sys_menses_flow`, `sys_endocrine` | Refer for iron studies; expect endurance work to feel disproportionately hard | If a stop condition fires here, use the wording in [Stop conditions](../knowledge-base/stop-conditions.md#the-wording) and hand off immediately — do not finish this section first. --- **Previous:** [2. Health & medical history](02-health-history.md) · **Next:** [4. Injuries & movement](04-injuries-and-movement.md) # 4. Injuries & movement What hurts now. Answers here feed the exercise exclusion list, so they need to be specific — "bad back" is not actionable, "left-sided low back pain on flexion, worse in the morning" is. ## 4.1 Current pain | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `inj_current_pain` | Are you currently in pain, or experiencing discomfort anywhere? | Yes/No | — | Yes | | `inj_pain_sites` | Where is it? | Multi-select | Neck / Shoulder or arm / Elbow, wrist or hand / Upper back / Low back / Hip or groin / Knee or leg / Ankle or foot / Somewhere else | Cond. | | `inj_pain_sites_detail` | For each site: which side, what brings it on, how long it has been there, and whether there is any numbness, tingling or weakness. | Long text | — | Cond. | `inj_pain_sites` → if `inj_current_pain` = Yes `inj_pain_sites_detail` → if `inj_current_pain` = Yes !!! tip "Don't read the nine options out" Ask "whereabouts?" and map what comes back. People know where they hurt and say so in their own words; the list exists to normalise the answer, not to be recited. It is the one multi-select on the questionnaire that should almost never be voiced — reading nine body parts down a phone invites the client to agree with whichever one they heard last. Only offer the options, grouped and in two passes, if they genuinely cannot place it. *Shoulder or arm* and *Knee or leg* deliberately span a whole limb, because the answer this section most needs to hear — pain that radiates from the back into a limb — is not a point on the body. Record the source in `inj_pain_sites` and the radiation in `inj_pain_sites_detail`. `inj_pain_sites_detail` is where this section earns its place. "Bad back" does not change a programme; "left low back, worse on flexion, three months, no numbness" does. Ask for the side every time — the client will not volunteer it. It is also the field that carries the neurological detail the red flag below depends on, so do not let it collapse into one word. !!! danger "Refer out, don't train through" Pain that wakes the client at night, or pain with numbness, tingling or weakness radiating into a limb, is a referral, not a programming problem. See [Screening red flags](../knowledge-base/red-flags.md). ## 4.2 Red flags **Stop and refer immediately:** - Pain with numbness, tingling or weakness spreading into a limb, or any loss of bladder or bowel control (`inj_pain_sites_detail`) **Proceed with caution:** | Flag | Source field | Typical modification | |------|--------------|----------------------| | Arthritis or joint pain | `inj_pain_sites` | Low-impact options, avoid end-range loading, longer warm-up | | Ongoing pain that limits daily activity | `inj_pain_sites_detail` | Work around the region, monitor session to session | Full outcome definitions: [Screening red flags](../knowledge-base/red-flags.md). If a stop condition fires here, use the wording in [Stop conditions](../knowledge-base/stop-conditions.md#the-wording) and hand off immediately — do not finish this section first. --- **Previous:** [3. Systems review](03-systems-review.md) · **Next:** [5. Activity & training history](05-activity-history.md) # 5. Activity & training history Where the client is starting from: what they currently do, how much of their day is spent moving, and how they feel about exercise in the first place. ## 5.1 Current activity | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `act_currently_active` | Are you exercising at the moment? | Yes/No | — | Yes | | `act_types` | Which types of physical activity or mind-body practices do you currently engage in? Select all that apply. | Multi-select | **Cardiovascular exercise:** walking, running, cycling, swimming, aerobic dance, or using cardiovascular equipment at the gym / **Resistance or strength training:** free weights, resistance machines, resistance bands, functional training, or bodyweight exercises / **Core-strengthening exercise:** Pilates, Callanetics, or other core-training exercises / **Flexibility and mobility exercise:** yoga, stretching, or Feldenkrais / **Mind-body and relaxation practices:** meditation, mindfulness, breathing exercises, relaxation techniques, or guided imagery / **I do not currently engage in regular physical activity or mind-body practices** | Yes | | `act_sessions_per_week` | How many sessions in a typical week? | Number | sessions | Cond. | | `act_session_length` | How long is a typical session? | Short text | — | Cond. | `act_sessions_per_week`, `act_session_length` → if `act_currently_active` = Yes *I do not currently engage in regular physical activity or mind-body practices* is an exclusive escape option: selecting it clears every other option, and selecting any other option clears it. ## 5.2 Daily movement & attitude | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `act_daily_lifestyle` | How would you describe your typical daily lifestyle, excluding planned exercise? | Single choice | Sedentary, I spend most of the day sitting / Active, I spend most of the day standing or moving | Yes | | `act_attitude` | How do you feel about physical activity? | Single choice | I enjoy it / I exercise, but do not particularly enjoy it / I do not enjoy physical activity / I have not yet found an activity that suits me | Yes | !!! tip "`act_attitude` shapes how the programme is sold, not just written" *I have not yet found an activity that suits me* is the most useful answer on the page — it invites variety and experimentation early rather than committing the client to a modality they will quietly abandon. *I do not enjoy physical activity* calls for the smallest viable starting dose and adherence built on habit rather than enthusiasm. ## 5.3 Red flags `act_currently_active` = No is one of the cardiovascular risk factors counted toward the age-and-load thresholds in [1.6](01-about-you.md#16-red-flags) — being sedentary at over 40, with one other risk factor from [2.9](02-health-history.md#29-red-flags), is enough to consider clearance before vigorous-intensity work. No flag in this section stands alone. --- **Previous:** [4. Injuries & movement](04-injuries-and-movement.md) · **Next:** [6. Goals & motivation](06-goals.md) # 6. Goals & motivation What the client wants, and what is likely to get in the way. ## 6.1 The goal | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `goal_primary` | What are your most important goals? | Multi-select | Health / Lose weight / Lose body fat / Build muscle / Get stronger / Improve endurance / Improve health markers / Move without pain / Improve mobility and flexibility / Look better / Feel better in my body / Perform better in a sport / Return to training after a break / General fitness / **Weight isn't what I'm here for** / **I'm not sure yet** | Yes | !!! note "The last two options are the important ones" The source sheet offers `לא מעניין אותי משקל` — *weight doesn't interest me* — and `לא יודעת`, *I don't know*, alongside the conventional goals. Both are worth copying exactly. Without an explicit opt-out, a client who doesn't want to talk about weight has no way to say so and picks the nearest weight-shaped option instead; you then spend twelve weeks optimising something they never asked for. Without *I'm not sure yet*, an undecided client invents a goal to finish the form — and the invented one is what gets programmed. *I'm not sure yet* is a useful answer, not a failed one. It means the first session includes a goal-setting conversation instead of starting from a fixed target. Both are exclusive escape options: selecting either clears every other goal, and selecting any goal clears them. ## 6.2 Obstacles | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `goal_obstacles` | What is most likely to get in the way? | Multi-select | Time / Work schedule / Family commitments / Energy levels / Motivation / Money / Injury / Travel / Social eating and drinking / Not knowing what to do / Other | Yes | | `goal_obstacles_plan` | When that happens, what should we do about it? | Long text | — | Cond. | | `goal_support` | Who at home or work supports you in this? | Long text | — | No | | `goal_accountability` | What kind of accountability works for you? | Single choice | Frequent check-ins / Weekly summary / Just the programme, leave me to it / Group or community / Not sure yet | Yes | `goal_obstacles_plan` → if `goal_obstacles` names at least one obstacle The question is worded as a follow-up — "when *that* happens" — so it only makes sense once the client has named something. A client who says nothing gets in the way is not asked what to do about it. --- **Previous:** [5. Activity & training history](05-activity-history.md) · **Next:** [7. Nutrition & hydration](07-nutrition.md) # 7. Nutrition & hydration !!! warning "Scope check" Only include this section if nutrition is within your scope of practice and your registration allows it. Where it isn't, cut the section down to 7.1, 7.3 and 7.7 — enough to train the client safely and to know when to refer to a dietitian. The food frequency grid in 7.2 in particular is a dietitian's tool. ## 7.1 Typical intake | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_typical_day` | Walk us through what you ate and drank yesterday, from waking to bed. | Long text | Include drinks and snacks | Yes | | `nut_typical_representative` | Was yesterday typical? | Single choice | Yes / No, better than usual / No, worse than usual | Yes | | `nut_meals_per_day` | How many meals and snacks on a normal day? | Number | count | No | | `nut_first_meal` | When do you usually eat your first meal? | Short text | Time of day | No | | `nut_last_meal` | When do you usually eat your last meal? | Short text | Time of day | No | | `nut_weekend_differs` | Do weekends look different from weekdays? | Long text | — | No | ## 7.2 Food frequency A frequency grid, adapted from the food table on the practitioner sheet. It catches what a 24-hour recall misses — the client who reports a clean Tuesday and eats very differently the rest of the week. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_ffq` | How often do you eat each of these? | Matrix | **Columns:** Daily · A few times a week · Weekly · Occasionally · Never. **Rows:** see the group list below | Yes | | `nut_ffq_notes` | Anything about your eating the grid doesn't capture? | Long text | — | No | Rows for `nut_ffq`: | Group | Examples to show the client | |-------|-----------------------------| | Bread & baked goods | Bread, rolls, pita, bagels | | Crackers & crispbreads | Crackers, rice cakes, breadsticks | | Breakfast cereals | Cereal, granola, oats | | Rice, pasta & grains | Rice, pasta, couscous, buckwheat, ptitim | | Starchy vegetables | Potato, sweet potato, corn, chips | | Legumes | Lentils, chickpeas, beans, peas | | Salad vegetables | Tomato, cucumber, pepper, carrot, radish, beetroot | | Leafy greens & herbs | Lettuce, spinach, rocket, parsley, coriander, dill | | Cruciferous & other cooked vegetables | Broccoli, cauliflower, cabbage, courgette, aubergine, mushrooms, pumpkin | | Fresh fruit | Apple, banana, berries, melon, grapes, stone fruit | | Dried fruit | Dates, raisins, figs, dried mango | | White cheeses & yoghurt | Cottage, labneh, Bulgarian, plain yoghurt | | Hard & yellow cheeses | Yellow cheese, goat's cheese, cream cheese | | Milk & milk alternatives | Cow's milk, oat, soy, chocolate milk | | Sweetened dairy desserts | Fruit yoghurt, dairy desserts | | Eggs | Boiled, omelette, fried, shakshuka | | Fish | Salmon, tuna, mackerel, sardines, sea bass, tilapia | | Poultry | Chicken breast, thighs, turkey, schnitzel | | Red meat & offal | Beef, goulash, liver, hearts | | Processed meat | Salami, pastrami, sausages, burgers | | Plant proteins | Tofu, seitan, soy | | Nuts & seeds | Almonds, walnuts, cashews, sunflower, pumpkin, chia, flax, sesame | | Oils & fats | Olive, canola, sesame, coconut oil | | Spreads & dips | Tahini, hummus, avocado, mayonnaise | | Savoury snacks | Crisps, Bamba, Bisli, pretzels, nachos | | Fried & street food | Falafel, shawarma, bourekas, jachnun, malawach, pizza | | Cakes, biscuits & pastries | Cakes, biscuits, wafers | | Chocolate, sweets & ice cream | Chocolate, sweets, ice cream | | Sweetened drinks | Cola, squash, iced coffee, milkshakes, energy drinks | | Hot drinks | Coffee, instant coffee, tea | | Water | — | | Alcohol | Wine, beer, spirits | !!! tip "Localise the examples, keep the groups" The examples above follow the source sheet and are Israeli by default — ptitim, jachnun, Bamba, bourekas. That specificity is the point: clients recognise their own food and answer accurately, where "refined grains" gets a shrug. Swap the examples for whatever your clients actually eat, but keep the group structure so answers stay comparable between clients. !!! warning "A frequency grid is not a diet analysis" `nut_ffq` shows patterns — no vegetables, daily sweetened drinks, protein only at dinner. It does not produce an intake estimate, and it should not be scored or converted into calories. If you need that, refer to a dietitian. ## 7.3 Dietary pattern & restrictions | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_pattern` | Do you follow a particular way of eating? | Single choice | No specific pattern / Vegetarian / Vegan / Pescatarian / Halal / Kosher / Low carb or keto / Paleo / Intermittent fasting / Mediterranean / Other | Yes | | `nut_pattern_other` | Describe it. | Short text | — | Cond. | | `nut_intolerances` | Any food allergies or intolerances? | Long text | Include severity | Yes | | `nut_dislikes` | Any foods you strongly dislike or won't eat? | Long text | — | No | | `nut_medical_diet` | Are you on a diet prescribed for a medical reason? | Yes/No | — | Yes | | `nut_medical_diet_detail` | Who prescribed it, and what does it involve? | Long text | — | Cond. | | `nut_eating_limitation` | Is any injury, pain or physical limitation affecting how you eat — chewing, swallowing, shopping, standing to cook, or getting food to your mouth? | Yes/No | — | Yes | | `nut_eating_limitation_detail` | Explain how. | Long text | — | Cond. | `nut_pattern_other` → if `nut_pattern` = *Other* `nut_medical_diet_detail` → if `nut_medical_diet` = Yes `nut_eating_limitation_detail` → if `nut_eating_limitation` = Yes !!! note "Why a physical question sits in the nutrition section" `nut_eating_limitation` used to live in [section 4](04-injuries-and-movement.md) under an `inj_*` ID, where it displaced that section's pain-location question and never reached anyone reading the nutrition record. It belongs here: a shoulder that cannot reach a cupboard changes what the client eats, and it is the nutrition plan, not the exercise exclusion list, that has to absorb that. ## 7.4 Cooking & environment | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_who_cooks` | Who does most of the cooking in your household? | Single choice | Me / Partner / Shared / Someone else / Nobody, we eat out or order in | No | | `nut_cooking_confidence` | How confident are you cooking from scratch? | Scale 1–5 | 1 = not at all, 5 = very | No | | `nut_meals_out` | How many meals per week are eaten out, ordered in, or bought ready-made? | Number | meals | No | | `nut_who_shops` | Who does the food shopping? | Single choice | Me / Partner / Shared / Someone else | No | | `nut_household_eating` | Does anyone you live with eat very differently from you? | Long text | — | No | ## 7.5 Hydration & stimulants | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_water` | How much water do you drink on a typical day? | Single choice | Under 1 L / 1–2 L / 2–3 L / Over 3 L / No idea | Yes | | `nut_caffeine` | How many caffeinated drinks per day? | Number | cups or cans | No | | `nut_caffeine_latest` | When do you consume caffeinated beverages? | Multi-select | Immediately after waking / Morning / Noon / Afternoon / Evening / Night / No specific time | No | | `nut_beverage_sugar` | Do you add sugar or a sugar substitute to your beverages? | Yes/No | — | No | | `nut_sugary_drinks` | Sugary or energy drinks per week? | Number | drinks | No | !!! note "Tea counts" `nut_caffeine` is routinely under-reported because clients count coffee and energy drinks but not tea. Black, green and white tea all contain caffeine, as do matcha and most iced teas. Say so next to the question — herbal and rooibos infusions are the exceptions. *No specific time* in `nut_caffeine_latest` is an exclusive escape option: selecting it clears every other option, and selecting any other option clears it. Alcohol is captured once, in [section 2](02-health-history.md#28-lifestyle-risk-factors) as `health_alcohol_units`. Don't duplicate it here. ## 7.6 Tracking & training nutrition | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_tracked_before` | Have you tracked your food before? | Single choice | Currently tracking / Have before, not now / Never / Tried and disliked it | Yes | | `nut_tracking_app` | Which app? | Short text | — | Cond. | | `nut_around_training` | Do you eat before or after training? | Long text | — | No | `nut_tracking_app` → if `nut_tracked_before` is *Currently tracking* or *Have before, not now* Supplements are **not** asked here. They are captured once in [section 2](02-health-history.md#23-vitamins-and-dietary-supplements) as `health_supplements`. If the client raises them, record against that ID and carry it forward — do not open a second supplement conversation. ## 7.7 Relationship with food !!! danger "Handle with care" These questions can surface an eating disorder. Ask them plainly, without follow-up interrogation in the form itself, and make every one skippable. A positive answer to `nut_disordered_history` is a **referral to a registered dietitian or clinician** — not a prompt to design a stricter plan, and not a reason to run [section 9](09-measurements.md). !!! warning "This is a referral, not a stop — do not end the call" `nut_disordered_history` = *Yes* is **not** a [stop condition](../knowledge-base/stop-conditions.md). Do not deliver the stop wording, do not hand to **stop & refer**, and do not end the questionnaire. Follow [sensitive questions](../knowledge-base/sensitive-questions.md): thank them, say it will shape how the coach works with them, and carry on with the next question. The referral is made by the coach from the handover record, after the call. Stopping here punishes the disclosure. A client who is told the interview is over the moment they mention a history of anorexia learns that honesty ends the call — and the section's remaining questions, including `nut_support_wanted`, are exactly the ones the coach needs answered in that case. | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `nut_appetite` | How would you describe your appetite? | Single choice | Low / Normal / Large / Varies a lot | No | | `nut_emotional_eating` | Do you eat in response to stress, boredom or emotion? | Single choice | Often / Sometimes / Rarely / Never / Prefer not to say | No | | `nut_disordered_history` | Have you ever had, or been treated for, a diagnosed eating disorder? | Single choice | Yes / No / Prefer not to say | No | | `nut_support_wanted` | How much nutrition support would you like? | Single choice | Full plan / General guidelines / Just accountability / None, training only | Yes | ## 7.8 Red flags | Flag | Source field | Typical modification | |------|--------------|----------------------| | Eating disorder history | `nut_disordered_history` | No weighing, no measurements, no photos, no calorie targets; refer to a dietitian | This section has **no** *Stop and refer immediately* entry — the one flag it carries is a caution flag, acted on by the coach after the call, not during it. See the warning in [7.7](#77-relationship-with-food). Full outcome definitions: [Screening red flags](../knowledge-base/red-flags.md). --- **Previous:** [6. Goals & motivation](06-goals.md) · **Next:** [8. Sleep, stress & recovery](08-lifestyle.md) # 8. Sleep, stress & recovery Training load has to fit the recovery capacity that's actually available. A client sleeping five broken hours under high stress cannot absorb the same programme as one sleeping eight — same body, different ceiling. ## 8.1 Sleep | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `life_sleep_hours` | How many hours do you sleep on a typical night? | Single choice | Under 5 / 5–6 / 6–7 / 7–8 / 8–9 / Over 9 | Yes | | `life_bedtime` | What time do you usually go to bed? | Short text | Time of day | No | | `life_waketime` | What time do you usually wake up? | Short text | Time of day | No | | `life_sleep_quality` | How would you rate your sleep quality? | Scale 1–5 | 1 = very poor, 5 = excellent | Yes | | `life_screens_bed` | Do you use screens in the hour before bed? | Single choice | Always / Usually / Sometimes / Rarely | No | | `life_naps` | Do you nap during the day? | Single choice | Daily / A few times a week / Rarely / Never | No | | `life_wake_state` | How do you usually feel on waking? | Single choice | Refreshed and energetic / Slow but fine / Tired / Exhausted | Yes | | `life_sleep_continuity` | Is your sleep usually unbroken? | Single choice | Straight through / Wake once / Wake two or three times / Wake repeatedly | No | !!! note "Sleep apnoea is a referral" Loud snoring plus daytime sleepiness plus waking unrefreshed is a pattern worth flagging to the client's doctor. It also caps what any training programme can achieve until it's addressed. ## 8.2 Schedule | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `life_shift_work` | Do you work shifts, nights or an irregular schedule? | Yes/No | — | Yes | | `life_shift_pattern` | Describe the pattern. | Long text | — | Cond. | | `life_travel` | How often do you travel for work or otherwise? | Single choice | Never / A few times a year / Monthly / Weekly / Constantly | Yes | | `life_caregiving` | Do you have caring responsibilities — children, parents, others? | Long text | — | No | `life_shift_pattern` → if `life_shift_work` = Yes ## 8.3 Stress | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `life_stress_level` | How stressed do you feel on an average day? | Scale 1–10 | 1 = completely relaxed, 10 = overwhelmed | Yes | | `life_stress_coping` | What do you currently do to unwind? | Long text | — | No | ## 8.4 Energy & recovery | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `life_energy_pattern` | When is your energy highest? | Single choice | Early morning / Late morning / Afternoon / Evening / It's low all day / It varies | Yes | | `life_energy_crash` | Do you get a noticeable energy slump during the day? | Single choice | Yes, most days / Sometimes / Rarely / No | No | | `life_recovery_habits` | What do you do regularly to recover? | Short text | — | No | | `life_socialising` | Do you get out and see people? | Single choice | Regularly / Occasionally / Rarely / Almost never | No | | `life_holidays` | Do you take proper holidays or time off? | Single choice | Regularly / Occasionally / Rarely / Never | No | !!! note "Two questions that look like small talk" `נוהגת לבלות?` and `נוהגת לצאת לחופשות?` — *do you go out?*, *do you take holidays?* — sit on the source sheet among the medical questions, and they belong there. Someone who never socialises and never takes time off has no slack in their week, which caps recovery no matter what the programme says, and rarely presents it as a problem because it has become normal. Read them with `life_stress_level`. A client who is highly stressed and never off needs the training volume dialled *down* at the start, which is the opposite of what they will ask for. !!! tip "Cross-reference before setting frequency" Read `life_energy_pattern` against `pref_time_of_day` in [section 10](10-preferences-logistics.md). A client whose energy peaks in the morning but who has only booked evening slots will have harder sessions than the programme assumes — and will report it as the programme being too hard. ## 8.5 Red flags | Flag | Source field | Typical modification | |------|--------------|----------------------| | Sleep under 5 hours or high stress | `life_sleep_hours`, `life_stress_level` | Reduce volume and intensity; expect slower progression | | Waking unrefreshed with snoring and daytime sleepiness | `life_wake_state`, `life_sleep_continuity` | Refer for sleep apnoea assessment; cap intensity until addressed | | No socialising, no time off, high stress | `life_socialising`, `life_holidays`, `life_stress_level` | Start below capacity; build recovery into the plan rather than adding volume | Full outcome definitions: [Screening red flags](../knowledge-base/red-flags.md). --- **Previous:** [7. Nutrition & hydration](07-nutrition.md) · **Next:** [9. Measurements & assessments](09-measurements.md) # 9. Measurements & assessments Completed by the coach at the baseline appointment, not by the client at home. Every field is optional at the form level — what gets measured depends on the goal, the client's consent, and what [section 2](02-health-history.md) allowed. !!! danger "Prerequisites" Do not run any of section 9.5 until: 1. [Section 2](02-health-history.md) is complete and any *Yes* on the PAR-Q+ has been resolved, with clearance on file where indicated. 2. Resting blood pressure and heart rate (9.3) are within safe limits — see [Screening red flags](../knowledge-base/red-flags.md). 3. The client has given explicit consent for physical measurement (`consent_measurement` in [section 11](11-consent.md)). Skip 9.4 entirely if `meas_weight_aware` indicates the client would rather not know, or `nut_disordered_history` is *Yes*. ## 9.1 Session details | ID | Field | Type | Options / units | |----|-------|------|-----------------| | `meas_date` | Assessment date | Date | `YYYY-MM-DD` | | `meas_assessor` | Assessed by | Short text | Coach name | | `meas_type` | Assessment type | Single choice | Baseline / 6-week review / 12-week review / Ad hoc | | `meas_conditions` | Conditions | Long text | Time of day, fasted or fed, footwear, clothing | !!! tip "Repeatability beats precision" Note the conditions and reproduce them at every re-test. A tape measure used the same way each time tells you more about the trend than a DEXA scan taken once. ## 9.2 What the client already knows Asked before anything is measured, and asked of the client rather than the scale. | ID | Field | Type | Options / units | |----|-------|------|-----------------| | `meas_weight_aware` | Do you know roughly what you weigh? | Single choice | Yes, and I'm happy to say / Yes, but I'd rather not say / No, and I'd rather not know / No, but I'd like to find out | | `meas_weight_self` | If you're happy to, what is it? | Number + unit | kg or lb — self-reported | | `meas_bodyfat_aware` | Do you know your body fat percentage? | Single choice | Yes / No / I don't want to discuss body fat | | `meas_blind_weigh` | Would you prefer to be weighed without seeing the number? | Single choice | Yes / No / I'd rather not be weighed at all | !!! tip "Borrowed directly from the source sheet" The practitioner sheet asks `מודעת למשקל` and `מודעת ל-% שומן` — literally *aware of your weight* / *aware of your body fat* — rather than demanding the figures. It's a better question than the one I had, for two reasons. It captures the client's *relationship* with the number, which determines whether the number is safe to use at all. And it gives a graceful way to decline that isn't a blank field, so you can tell "won't say" apart from "skipped the form." `meas_blind_weigh` follows from it: weighing a client while turning the display away is standard practice in eating-disorder-aware settings, and costs nothing to offer to everyone. !!! danger "These answers are binding" *I'd rather not know*, *I don't want to discuss body fat*, or *I'd rather not be weighed at all* override the rest of this section. Do not weigh, do not measure, do not mention the number later. Read alongside `nut_disordered_history` in [section 7](07-nutrition.md). ## 9.3 Vitals & anthropometrics | ID | Field | Type | Options / units | |----|-------|------|-----------------| | `meas_height` | Height | Number + unit | cm or in | | `meas_weight` | Body weight | Number + unit | kg or lb | | `meas_bmi` | BMI | Calculated | kg/m² — derived, not entered | | `meas_resting_hr` | Resting heart rate | Number | bpm, seated, after 5 min rest | | `meas_bp_systolic` | Blood pressure — systolic | Number | mmHg | | `meas_bp_diastolic` | Blood pressure — diastolic | Number | mmHg | | `meas_bp_repeat` | Repeat reading if first was elevated | Short text | `systolic/diastolic` | ## 9.4 Body composition Requires `consent_measurement`. Skip per the prerequisites above. | ID | Field | Type | Options / units | |----|-------|------|-----------------| | `meas_waist` | Waist circumference | Number | cm, at narrowest point | | `meas_hip` | Hip circumference | Number | cm, at widest point | | `meas_whr` | Waist-to-hip ratio | Calculated | derived | | `meas_chest` | Chest circumference | Number | cm | | `meas_arm_l` / `meas_arm_r` | Upper arm, left / right | Number | cm, relaxed, mid-belly of biceps | | `meas_thigh_l` / `meas_thigh_r` | Mid-thigh, left / right | Number | cm | | `meas_calf_l` / `meas_calf_r` | Calf, left / right | Number | cm | | `meas_bodyfat_pct` | Estimated body fat | Number | % | | `meas_bodyfat_method` | Method used | Single choice | Skinfolds / Bioimpedance / DEXA / Visual estimate / Not measured | | `meas_photos_taken` | Progress photos taken | Yes/No | Requires `consent_photos` | ## 9.5 Movement screen Score each: **0** = unable or painful · **1** = compensated · **2** = competent · **3** = clean and controlled. Record *where* the compensation appeared, not just the number. | ID | Test | Type | Notes to capture | |----|------|------|------------------| | `screen_overhead_squat` | Overhead squat, 5 reps | Score 0–3 | Heel lift, knee valgus, forward torso, arm drift | | `screen_hip_hinge` | Hip hinge with dowel | Score 0–3 | Lumbar flexion, dowel contact points | | `screen_shoulder_mobility` | Back-scratch / Apley's | Score 0–3 | Distance between hands, left vs right | | `screen_ankle_dorsiflexion` | Knee-to-wall | Number + score | cm from wall, each side | | `screen_single_leg_balance` | Eyes-open single leg stand | Number + score | Seconds held, each side, max 60 | | `screen_thoracic_rotation` | Seated rotation | Score 0–3 | Degrees, left vs right | | `screen_active_slr` | Active straight leg raise | Score 0–3 | Each side | | `screen_pain_provoked` | Did any test provoke pain? | Yes/No + text | **Stop the screen if yes** | !!! danger "Pain ends the screen" If `screen_pain_provoked` is *Yes*, stop testing, record what provoked it, and route back to [section 4](04-injuries-and-movement.md). Do not proceed to 9.6. ## 9.6 Capacity tests Select only what is appropriate for the client's screening status and goal. | ID | Test | Type | Options / units | |----|------|------|-----------------| | `test_pushup` | Push-up test to failure | Number | reps, note full or knee variation | | `test_sit_to_stand` | 30-second sit-to-stand | Number | reps | | `test_plank` | Front plank hold | Number | seconds, stop on form breakdown | | `test_grip_l` / `test_grip_r` | Grip strength, left / right | Number | kg, dynamometer | | `test_step_test` | 3-minute step test | Number | recovery HR at 1 min | | `test_walk_6min` | 6-minute walk test | Number | metres | | `test_vo2_estimate` | Estimated VO₂max | Calculated | ml/kg/min, state the protocol used | | `test_squat_est_1rm` | Estimated squat 1RM | Number + unit | From a submaximal set, note reps and load | | `test_deadlift_est_1rm` | Estimated deadlift 1RM | Number + unit | As above | !!! warning "Estimate, don't max out" On a first assessment, use submaximal sets and an estimation formula rather than a true 1RM attempt. The number is barely less accurate and the risk is an order of magnitude lower. ## 9.7 Coach notes | ID | Field | Type | Options / units | |----|-------|------|-----------------| | `meas_priorities` | Top three training priorities from this assessment | Long text | — | | `meas_contraindications` | Confirmed exclusion list | Long text | Carried over from section 3, plus anything found today | | `meas_referrals` | Referrals made | Long text | Who, why, date | | `meas_next_review` | Next review date | Date | `YYYY-MM-DD` | | `meas_notes` | Anything else | Long text | — | ## 9.8 Red flags **Stop and refer immediately** — no assessment, no session, today: - Resting blood pressure at or above **180/110 mmHg** on two readings (`meas_bp_systolic` / `meas_bp_diastolic`) - Resting heart rate below **40** or above **120 bpm** in an asymptomatic client, unexplained by medication (`meas_resting_hr`) **Clearance required before training:** - Resting blood pressure at or above **160/100 mmHg** (`meas_bp_systolic` / `meas_bp_diastolic`) **Proceed with caution:** | Flag | Source field | Typical modification | |------|--------------|----------------------| | Blood pressure 140–159 / 90–99 | `meas_bp_*` | Avoid Valsalva, breath-holding, heavy isometrics and inverted positions; recheck each session | | Declines to know or discuss weight | `meas_weight_aware`, `meas_blind_weigh` | Skip 9.2–9.4 entirely; progress by performance and how clothes fit | If a stop condition fires here, use the wording in [Stop conditions](../knowledge-base/stop-conditions.md#the-wording) and route the client to their doctor before continuing. --- **Previous:** [8. Sleep, stress & recovery](08-lifestyle.md) · **Next:** [10. Preferences & logistics](10-preferences-logistics.md) # 10. Preferences & logistics The constraints the programme has to live inside. Answers here override anything ideal — a perfect four-day split is worthless to someone with three hours a week and a set of adjustable dumbbells. ## 10.1 Availability | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `pref_days_per_week` | How many days a week can you realistically train? | Single choice | 1 / 2 / 3 / 4 / 5 / 6 / 7 | Yes | | `pref_days_which` | Which days work best? | Multi-select | Mon / Tue / Wed / Thu / Fri / Sat / Sun / Flexible | Yes | | `pref_time_of_day` | What time of day suits you? | Multi-select | Early morning / Morning / Lunchtime / Afternoon / Evening / Late evening / Varies | Yes | | `pref_session_length` | How long can a session be? | Single choice | Up to 20 min / 20–30 min / 30–45 min / 45–60 min / 60–90 min / As long as needed | Yes | | `pref_minimum_week` | On your worst week, what could you still commit to? | Short text | e.g. "two 20-minute sessions" | Yes | !!! tip "10.1 last question is the safety net" `pref_minimum_week` defines the deload-by-life plan. Write it into the programme as a named fallback week from the start, so a bad week is a documented option rather than a failure. ## 10.2 Where and with what | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `pref_location` | Where will you train? | Multi-select | Commercial gym / Home / Outdoors / Studio / Work gym / Hotel gyms when travelling | Yes | | `pref_gym_name` | Which gym? | Short text | Helps match the programme to available kit | No | | `pref_equipment` | What equipment do you have access to? | Multi-select | Barbell and plates / Squat rack / Dumbbells / Kettlebells / Resistance bands / Cable machine / Selectorised machines / Bench / Pull-up bar / Treadmill / Bike or spin bike / Rower / Mat only / Nothing, bodyweight only | Yes | | `pref_equipment_home` | If training at home, describe the space. | Long text | Ceiling height, floor, noise limits, storage | Cond. | | `pref_travel_setup` | What do you have access to when travelling? | Short text | — | Cond. | `pref_equipment_home` → if `pref_location` includes *Home* `pref_gym_name` → if `pref_location` includes *Commercial gym* or *Studio* `pref_travel_setup` → if `pref_location` includes *Hotel gyms when travelling* ## 10.3 Style | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `pref_training_social` | How do you prefer to train? | Single choice | Alone / With a coach one-to-one / With a training partner / In a small group / In a class | Yes | | `pref_coaching_style` | What coaching style gets the best out of you? | Single choice | Direct and demanding / Encouraging and supportive / Collaborative, explain the why / Hands-off, just give me the plan | Yes | | `pref_enjoy` | Which of these do you enjoy? | Multi-select | Lifting heavy / High-intensity intervals / Steady cardio / Circuits / Mobility and stretching / Sport and games / Outdoor activity / Machines / Free weights | No | | `pref_avoid` | Which would you rather avoid? | Multi-select | Same list as above | No | | `pref_music_env` | Anything about the training environment that matters to you? | Long text | Busy gyms, music, mirrors, changing rooms | No | !!! note "Take `pref_avoid` seriously" An exercise the client dislikes has a compliance rate close to zero, whatever its merits. Almost every training stimulus has a substitute they will actually do. ## 10.4 Communication | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `pref_channel` | How should we communicate between sessions? | Single choice | Email / SMS / WhatsApp / In-app messaging / Phone call / No contact needed | Yes | | `pref_frequency` | How often? | Single choice | Daily / Every few days / Weekly / Fortnightly / Only when I ask | Yes | | `pref_checkin_day` | Preferred check-in day | Single choice | Mon–Sun | No | | `pref_wearable` | Do you use a fitness tracker or watch? | Single choice | Apple Watch / Garmin / Fitbit / Whoop / Oura / Phone only / None / Other | No | | `pref_app_comfort` | How comfortable are you using an app to follow your programme? | Scale 1–5 | 1 = not at all, 5 = very | No | ## 10.5 Practical | ID | Question | Type | Options / units | Req. | |----|----------|------|-----------------|------| | `pref_blackout_dates` | Any dates you already know you'll be unavailable? | Long text | Holidays, work trips, events | No | | `pref_accessibility` | Do you have any accessibility needs we should plan for? | Long text | Language, hearing, vision, mobility, neurodivergence | No | | `pref_budget` | Is there a budget we should work within? | Short text | Optional | No | | `pref_anything_else` | Anything else that would help us work well together? | Long text | — | No | --- **Previous:** [9. Measurements & assessments](09-measurements.md) · **Next:** [11. Consent & sign-off](11-consent.md) # 11. Consent & sign-off !!! danger "Placeholder wording — get it reviewed" The statements below are a structural template showing **which consents you need and how to record them**. The wording is not legal advice and is not valid in any particular jurisdiction. Have a qualified lawyer draft the final text for the country you operate in, your insurance requirements, and your professional body's rules, before this goes anywhere near a client. ## 11.1 Declaration of accuracy | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_accuracy` | I confirm that the information I have given in this questionnaire is accurate and complete to the best of my knowledge. | Checkbox | Yes | | `consent_update` | I will tell my coach promptly if my health, medication or circumstances change. | Checkbox | Yes | ## 11.2 Assumption of risk | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_risk` | I understand that physical exercise carries inherent risks, including muscle soreness, injury and, in rare cases, serious medical events. | Checkbox | Yes | | `consent_voluntary` | I am taking part voluntarily and may stop at any time. | Checkbox | Yes | | `consent_stop` | I will stop exercising and tell my coach immediately if I feel unwell, dizzy, short of breath or in pain. | Checkbox | Yes | | `consent_own_pace` | I understand I am responsible for working at a level appropriate to me and for speaking up when something feels wrong. | Checkbox | Yes | ## 11.3 Medical clearance | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_medical_advice` | I understand my coach is not a doctor and that nothing provided is medical treatment or diagnosis. | Checkbox | Yes | | `consent_clearance_confirm` | Where medical clearance was requested, I confirm it has been provided. | Checkbox | Cond. | `consent_clearance_confirm` → required if any PAR-Q+ answer in [section 2](02-health-history.md) was *Yes*. ## 11.4 Physical contact & measurement | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_measurement` | I consent to body measurements being taken as part of my assessment. | Single choice — Yes / No | Yes | | `consent_touch` | I consent to hands-on coaching cues and spotting. I understand I can withdraw this at any time, without giving a reason. | Single choice — Yes / No | Yes | | `consent_photos` | I consent to progress photographs being taken and stored. | Single choice — Yes / No | Yes | | `consent_photos_marketing` | I consent to my photographs being used in marketing or social media. | Single choice — Yes / No | Yes | !!! danger "A refused consent is an answer, not a failure — and never a stop" Record *No* against the field and go straight to the next statement. Do not re-ask, do not explain the consequences to talk them round, and do not end the call. A refusal is not a [stop condition](../knowledge-base/stop-conditions.md); **stop & refer** is for clinical red flags only. Which refusals actually block training is the coach's decision, made from the handover record — not the agent's, and not something to announce on the call. The only thing the agent says is what it says after every other answer: thank you, and then the next question. Carry every refusal into the handover as `No`, never as blank and never as `declined` — the client answered, and *No* is the answer. Any consent whose **Req.** column says *Yes* gets flagged as a refused required consent, so the coach sees it without reading all seventeen rows. `consent_data_processing` is the one to put at the top: a coach cannot lawfully hold the rest of the record without it. Flag it; do not argue it. !!! warning "Four separate consents, four separate answers" Never bundle these. Consent to being measured is not consent to being photographed, and consent to a progress photo on file is emphatically not consent to it appearing on Instagram. Each must be independently answerable and independently withdrawable, and *No* must be as easy to select as *Yes*. ## 11.5 Data & privacy | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_data_processing` | I consent to my personal and health data being stored and processed for the purpose of delivering coaching. | Checkbox | Yes | | `consent_data_sharing` | I consent to relevant information being shared with named healthcare professionals where it supports my safety. | Single choice — Yes / No | Yes | | `consent_marketing_email` | I would like to receive newsletters and offers. | Single choice — Yes / No | No | !!! note "Fill these in before use" The privacy notice this section links to must state, in plain language: who the data controller is, what is collected, the lawful basis for processing health data, how long it is kept, who it is shared with, and how to request access, correction or deletion. ## 11.6 Policies | ID | Statement | Type | Req. | |----|-----------|------|------| | `consent_cancellation` | I have read and accept the cancellation and rescheduling policy. | Checkbox | Yes | | `consent_emergency_treatment` | In an emergency, I consent to first aid being administered and emergency services being called on my behalf. | Checkbox | Yes | ## 11.7 Signatures | ID | Field | Type | Req. | |----|-------|------|------| | `sign_client_name` | Client name, typed | Short text | Yes | | `sign_client_signature` | Client signature | Signature | Yes | | `sign_client_date` | Date signed | Date | Yes | | `sign_guardian_name` | Parent or guardian name | Short text | Cond. | | `sign_guardian_signature` | Parent or guardian signature | Signature | Cond. | | `sign_coach_name` | Coach name | Short text | Yes | | `sign_coach_signature` | Coach signature | Signature | Yes | | `sign_coach_date` | Date countersigned | Date | Yes | `sign_guardian_*` → required if `client_dob` indicates the client is under 18. !!! tip "Store the version, not just the signature" Record which version of the questionnaire and waiver the client signed — a field like `form_version = "2026-08-02"`. When the wording changes later, you need to know what each client actually agreed to. ## 11.8 Red flags `sign_guardian_*` above already implements the one flag that belongs here: guardian consent is required whenever `client_dob` shows the client is under 18 — see [1.6](01-about-you.md#16-red-flags) for the full age-and-load table. --- **Previous:** [10. Preferences & logistics](10-preferences-logistics.md) · **Back to:** [Overview](../index.md) # Core rules The rules that hold for every subagent in the fleet, at every point in the call. This is the one page that goes into all of them, so it is deliberately short — everything that only some subagents need lives in its own page. !!! danger "The agent is a scribe, not a clinician" The agent's entire job is to **ask, record and flag**. It does not interpret, reassure, advise, diagnose or design anything. Every judgement the questionnaire feeds into is made afterwards by a qualified human. An agent that answers "is that normal?" has exceeded its role, however harmless the answer sounds. ## The rules 1. **One question at a time.** Never ask two questions in one turn. Never read out a numbered list of questions. The client answers one thing, the agent acknowledges, the agent asks the next. The only exception is matrix rows — see [Matrix questions by voice](matrix-in-voice.md). 2. **Follow section order.** Questions within a section run in the order listed on that section's page. The screening sections come first for a reason. 3. **Use the question's meaning, not its exact characters.** Reword for conversational flow — "And how old were you then?" instead of re-reading the full prompt — but never change what is being asked or narrow it. 4. **Let the client answer in their own words.** Do not make them speak in option labels. Ask "how's your sleep been?", then map the answer onto the field's answer type yourself. 5. **Confirm anything ambiguous by reflecting it back.** "So that's about three times a week, mostly evenings — have I got that right?" 6. **Never fill in a blank.** No inference, no "I'll assume", no completing a partial answer from context. Unanswered is a valid state; invented is not. 7. **Honour conditional logic.** A follow-up is asked only when its trigger fires. Never ask a client about their pregnancy follow-ups when they answered *No*. 8. **Never re-ask what has already been answered.** If a client volunteers their knee history while discussing sleep, store it against `inj_current_pain` and skip that question when you reach it — telling them you already have it. This holds **across subagents**: the handoff state tells you what is already answered. 9. **Stop when a stop rule fires.** See [Stop conditions](stop-conditions.md). 10. **Hand back when your section is done.** Do not wander into the next section's questions. Another subagent owns them, and it has the pages for them. See [The handoff contract](../project/context-handoff.md). ## Never - Diagnose, name a likely condition, or speculate about a cause - Interpret blood results, imaging, or a previous clinician's findings - Comment on medication — dose, timing, whether to keep taking it - Say "that's normal", "that sounds fine", or "nothing to worry about" - Give exercise, nutrition or supplement advice during the intake - Continue after a stop condition - Infer, assume, or fill in an unanswered field - Batch questions to save time - Use clinical vocabulary the client didn't use first - Ask a question that belongs to a section you do not own ## Situations that come up | The client… | The agent… | |-------------|-----------| | asks "what should I put?" | Restates the question in plainer words. Never suggests an answer, never gives a "most people say". | | asks whether a symptom is serious | Declines: "I'm not able to judge that — I'll make sure it's flagged for the coach." Continues or stops per the red-flag list. | | asks for training or diet advice mid-intake | Defers: "Let's get through this first — that's exactly what the coach will build from it." | | gives a long rambling answer | Extracts the answer, reflects it back for confirmation, moves on. Doesn't ask them to be more concise. | | gives an obviously unreasonable, nonsensical or irrelevant answer | Acknowledges it briefly and playfully, without mocking or embarrassing the client, then asks the same question again in plain language. Treats any answer involving health, safety, distress or another sensitive subject seriously rather than playfully. | | answers a question from a later section | Records it against the right field ID in the handoff state so the subagent that owns it can skip it. | | contradicts an earlier answer | Raises it gently and asks which is right. Records the more cautious of the two if unresolved. | | seems distressed or upset | Pauses the interview and offers to stop. Does not counsel. | | wants to skip a whole section | Fine, except the screening in sections 2–4 and the consents in section 11. Records what was skipped. | | goes quiet mid-interview | Saves progress, offers once to pick up later, then ends the call. Doesn't chase. | | asks how long is left | Answers honestly with sections remaining and rough minutes. | ## Voice-specific The fleet runs over the phone, so a few things that are free in chat are not free here. - **No visual fallback.** Never say "as you can see on the list". Nothing is on screen. - **Spell back anything that must be exact.** Email addresses and phone numbers get read back character by character and confirmed. - **Expect transcription noise.** If an answer looks like a mishearing — a number an order of magnitude off, a word that doesn't fit — reflect it back rather than recording it. - **Silence is not a decline.** Ask once more, then offer to move on. - **Barge-in is normal.** If the client interrupts, stop talking and listen. # Stop conditions Some answers end the interview. When one fires, the subagent stops asking questions immediately, hands to the **stop & refer** subagent, and does not finish its section first. !!! danger "Do not soften a stop" Not "it's probably nothing, but". Not "just to be safe". The client should understand that a real threshold was crossed. Equally, do not speculate about what it might be — that's the diagnosing the agent must not do. ## What triggers one Anything in the **Stop and refer immediately** list. Each section page carries only the entries its *own* fields can actually produce, in that page's own **Red flags** subsection — for example [4.2](../sections/04-injuries-and-movement.md#42-red-flags), which has the neurological-symptom trigger because `inj_current_pain` lives there. Chest pain at rest, fainting in the last 12 months, blood in the stool, unexplained weight loss, new numbness or weakness in a limb, and the rest of that list are each attached to exactly the section whose field can produce them — see [the load map](../project/subagents.md#the-load-map). !!! warning "Two sections carry no trigger list at all" [Goals](../sections/06-goals.md) and [Preferences](../sections/10-preferences-logistics.md) have no fields that map to any entry in [Screening red flags](red-flags.md), so their pages have no Red flags subsection — nothing was filtered out by mistake. That also means a client who volunteers "I've been having chest pains" while one of those two subagents is running has no repo-authored trigger list to match it against — only [Core rules](core-rules.md)'s rule 9, "stop when a stop rule fires," which names no specifics of its own and points back to this page. Whatever recognises the disclosure there is the model's general judgement, not anything written down here. The dry runs of both subagents confirmed the margin holds, but only barely: each recognised a volunteered symptom and delivered the stop wording correctly, and each reported afterwards that it had *invented* the recognition. That is judgement working, not a rule working. So the base prompt now closes the gap from the other side — a subagent that hears a symptom it has no list for hands to **stop & refer** rather than deciding, because that step can send it back. If that still proves too thin, the fix is a short, deliberately generic fallback list on those two pages — not copying the full trigger set back in. A section subagent does not need the full triage table to do its job — only the trigger list relevant to it. It needs to recognise a trigger and get out of the way. The classification that follows — Clear, Proceed with caution, Clearance required, Refer & stop — belongs to the [handover](handover-record.md), which loads [Screening red flags](red-flags.md) for the outcome definitions. !!! tip "When in doubt, hand off" A section subagent that is unsure whether something qualifies should treat it as though it does. The stop & refer subagent can de-escalate and return control; a section subagent that carried on cannot undo it. ## The wording > Thanks for telling me. I'm going to stop the questionnaire here — that's > something a doctor needs to look at before we go any further with training, > and it isn't something I'm able to assess. I'll flag it to [coach] now and > they'll be in touch today. > > If it's happening right now, or it's getting worse, please contact your > doctor or emergency services rather than waiting for us. Say this, then hand off. Do not add to it, and do not answer follow-up questions about what it might mean — refer those to the coach too. ## What happens next The stop & refer subagent owns everything after the trigger: 1. Confirms the client has understood, and repeats the emergency-services line if the symptom is happening now. 2. Marks the record `Refer & stop` with the field that triggered it. 3. Hands to the handover subagent, which notifies the coach. The call does **not** resume, in this conversation or a later one, unless a human says so. A callback is scheduled by the coach, not by the fleet. # Voicing each answer type How to ask each answer type out loud, and how to map what comes back onto the field. The types themselves are defined in [Question patterns](../authoring/question-patterns.md) — that page is the data model, this page is the delivery. | Type | How to ask it by voice | |------|------------------------| | `Short text` / `Long text` | Ask openly. Don't cap the length. For the reflective questions, let silence do work — resist filling it with a follow-up prompt. | | `Yes/No` | Ask directly. Accept "yeah", "nope", "I think so" — but treat "I think so" as *not sure* and ask which. | | `Number` | Repeat the number back. Transcription turns "fifty" into "fifteen" often enough to matter. | | `Number + unit` | Accept whatever unit they use and record which one. Don't convert silently, and don't ask them to convert. | | `Single choice` | Ask openly first. If the answer doesn't map cleanly, then offer the options. Don't lead with a menu. | | `Multi-select` | Name the options and say **"tell me any that apply — could be none"**. Always voice the escape option. Over the phone, cap a spoken list at five items and split longer ones into two passes. | | `Scale 0–10` / `1–5` | Give both anchors every time: "nought is no pain, ten is the worst you can imagine." Never assume they remember from a previous scale — and never assume they remember one a *different subagent* gave them. | | `Score 0–3` | Coach-assigned. No subagent asks this. | | `Date` | Accept "about three years ago". Store the approximation as-is; don't force a calendar date. | | `Checkbox` | Read the statement in full, then ask for an explicit yes. A consent cannot be inferred from "mm-hm" — see [section 11](../sections/11-consent.md). | | `Signature` | Cannot be captured by voice. Record a verbal affirmation plus a timestamp and flag that a written signature is still outstanding. | | `File upload` | Ask them to send it after the call, note that it's pending, and continue. Don't block. | | `Repeating group` | One entry at a time, complete, then: "any others?" | | `Calculated` | Never asked. Derived after the call. | | `Matrix` | See [Matrix questions by voice](matrix-in-voice.md) — this is the one that goes wrong. | ## Reading options aloud A list that works on a page does not work in an ear. Three rules: 1. **Group before you list.** "There are a few about digestion, then a few about energy" beats nine ungrouped items. 2. **Put the escape last and say it plainly.** "…or none of those" — clients who hear no escape will invent an answer. 3. **Offer the list once, then stop offering.** If they answer in their own words the second time, map it yourself rather than re-reading options. ## Recording what you hear Store the **normalised value** matching the declared answer type, and keep the client's own words wherever the wording carries information the option label loses. "I can't get down on the floor since the surgery" is worth more than `mobility_limited = Yes`, and the handover needs both. Mark every field as one of: answered, **declined**, **skipped — not triggered**, or **skipped — section omitted**. These are four different things and collapsing them into "blank" destroys the record. The full record format is in [The handover record](handover-record.md). # Optional and sensitive questions Applies to anything marked optional, and to all of: - [3.7 Menstrual & hormonal](../sections/03-systems-review.md#37-menstrual-hormonal) - [3.8 Endocrine & metabolic](../sections/03-systems-review.md#38-endocrine-metabolic) - [7.7 Relationship with food](../sections/07-nutrition.md#77-relationship-with-food) - the drug and alcohol questions in [2.8 Lifestyle risk factors](../sections/02-health-history.md#28-lifestyle-risk-factors) ## The three rules - **Say it's optional before asking, not after.** "This one's completely optional, and skipping it won't affect anything." - **Accept a decline instantly.** No rephrasing, no "are you sure", no gentle second attempt. Record it as declined and move on. - **Never follow up on a disclosure inside the interview.** If a client discloses an eating disorder history, the correct response is to thank them, note that it will shape how the coach works with them, and continue — not to ask what happened. !!! warning "A declined question is a completed question" Coming back to it later, in any form, is a breach of what you told them. This includes "circling back" at the end. !!! danger "A decline does not survive a handoff as an unanswered field" The subagent that follows you has no memory of the call and cannot tell a decline from a gap. If it reads `nut_binge_history` as blank it will ask again, and the client will have been asked twice about something they declined once. Declines travel in the handoff state as `declined`, explicitly, and every subagent treats that value as final. See [The handoff contract](../project/context-handoff.md). ## On the phone specifically Voice raises the cost of these questions. The client may not be alone, and they cannot skim ahead to see what is coming. - **Give a beat before the sensitive block.** "The next few are a bit more personal — say pass on any of them." - **Don't fill a pause.** Silence after a sensitive question is thinking time or it is a decline forming. Both need the same thing: quiet. - **A whispered or clipped answer is still an answer.** Don't ask them to repeat it louder. Reflect it back quietly and move on. - **If they say someone just walked in**, offer to skip the block entirely and note it for the coach rather than pausing the call. # Matrix questions by voice Three sections contain matrix questions and the rest do not. Loading this page into all eleven section subagents would spend context on a problem most of them never meet, so it ships only to the three that do: - [2.5 Family history](../sections/02-health-history.md#25-family-history) — one row per relative - [3. Systems review](../sections/03-systems-review.md) — symptom sweep by body system - [7.2 Food frequency](../sections/07-nutrition.md#72-food-frequency) — one row per food group ## Why it goes wrong A grid cannot be read aloud. Dumping nineteen rows into one turn gets nineteen answers of "fine" — the client stops listening around row four and starts producing the shape of an answer rather than an answer. Asking one row per turn fails the other way: nineteen turns of "and your shoulders?" is intolerable on a phone call and the client hangs up. ## The cluster rule - Walk the rows in **thematic clusters of four or five**. - State the response options **once per cluster**, then just name the items. - Let the client answer several in one reply. This is the single exception to the one-question-at-a-time rule in [Core rules](core-rules.md), and it applies to matrix rows only. > For each of these, just tell me if it's more than normal, less than normal, > or about right: appetite, portion sizes, snacking between meals. ## Handling the reply A cluster reply arrives unordered and incomplete. "The first one's fine, and I definitely snack more" leaves portion sizes unanswered. - **Map what you got, then ask only for the gaps.** "Got it — and portion sizes?" - **Never spread one answer across the cluster.** "All fine" covers the cluster only if the client heard every item; if they interrupted, re-name the ones they missed. - **A cluster is not a section.** Leaving one row blank is a *skipped* field, recorded as such, not a reason to re-run the cluster. ## Food frequency specifically For the grid in [section 7.2](../sections/07-nutrition.md#72-food-frequency), go by food group and accept rough answers. "Most days", "hardly ever" and "only weekends" are all usable — normalise them to the declared scale and keep the client's phrasing alongside. # Screening red flags The triage framework that decides what happens after a questionnaire comes back. This page is for the coach, not the client. !!! danger "Not clinical guidance" These thresholds are a reasonable default for a general fitness setting, assembled to show how the questionnaire's answers map to actions. They are not clinical guidance and they are not a substitute for the standards of your professional body, your insurer or your local regulator. Have them reviewed and adjusted before use, and when in doubt, refer. !!! info "The specifics live with the questions, not here" The actual trigger list — which answer means what, and which field ID drives it — is copied in full at the end of **every section page**, in that page's own "Red flags" subsection. For example, see [4.2](../sections/04-injuries-and-movement.md#42-red-flags). This page defines only the outcomes those triggers feed into and the rules that apply regardless of which section is running. Keeping the specifics on the section page means whoever — or whatever — is asking that section's questions can recognise a trigger the moment it is said, without a separate reference open at the same time. ## Triage outcomes | Outcome | Meaning | Action | |---------|---------|--------| | **Clear** | No flags | Proceed to assessment and programming | | **Proceed with caution** | Manageable flags | Programme with documented modifications; note the reasoning | | **Clearance required** | Needs a clinician's sign-off first | No exercise testing or programming until written clearance is on file | | **Refer & stop** | Potentially urgent | Do not train. Direct to a doctor or emergency services as appropriate | ## How the outcome is reached A flag can come from any section — the questionnaire does not confine risk information to one place, so triage does not either. - **Any flag anywhere pushes toward the more cautious outcome, never the less cautious one.** A single **Refer & stop** flag overrides every other finding in the record, however clear the rest of it is. - **The more serious of two conflicting answers wins.** If the same risk is asked about twice in different words and the answers disagree, treat the more serious one as authoritative rather than averaging or picking the first. - **A flag is recorded even when the decision is to proceed.** The reasoning for proceeding despite a flag is exactly what a later reviewer — or a regulator — will ask to see. Record the flag itself, not just the outcome: which field triggered it, its value, and which outcome it points to. See [the handover record](handover-record.md) for the exact format. ## During any session Stop the session, regardless of what the paperwork said: - Chest pain or pressure - Dizziness, light-headedness or confusion - Unusual shortness of breath - Pale, grey or clammy appearance - Irregular or racing heartbeat - Sharp joint pain, or any pain that changes movement quality - Anything the client describes as "not right" !!! note "Record the decision either way" Log the triage outcome against the client's record, with the date, the fields that drove it, and who made the call. If a flag was found and the decision was to proceed, that reasoning is the thing you will need later. # The handover record What the fleet produces at the end of a call, and the checks that run before it is handed to the coach. Only the closing subagents load this page — a section subagent that had it would be tempted to summarise, and its job is to ask. ## What to record Store answers against **field IDs**, never as a transcript summary. For each: the field ID, the normalised value matching the declared answer type, and the client's own words where the wording carries information the option label loses. Mark each field as one of: | Status | Means | |--------|-------| | `answered` | The client gave an answer and it was normalised to the field's type | | `declined` | The client was offered the question and chose not to answer | | `skipped — not triggered` | A conditional whose trigger never fired. Correct behaviour, not a gap | | `skipped — section omitted` | The client opted out of a whole section, or the call ended first | These are four different things and collapsing them into "blank" destroys the record. A coach reading `declined` knows not to raise it; a coach reading `blank` will ask again. ## The handover At the end, produce a record for the coach containing: - Every red flag found, with the field that triggered it - Every declined question - The triage outcome from [Screening red flags](red-flags.md#triage-outcomes) — Clear, Proceed with caution, Clearance required, or Refer & stop - Anything the client said that doesn't fit a field but a coach should read - Which sections completed, and which subagent was holding the call if it ended early - The questionnaire version the client answered (`form_version`) !!! warning "The agent proposes a triage outcome, it doesn't decide one" A human confirms it before anyone trains. Present it as a suggestion with its reasoning visible. ## Before finishing - [ ] Every non-conditional required field is answered or explicitly declined - [ ] No conditional question was asked without its trigger firing - [ ] No triggered conditional was missed - [ ] Consents in [section 11](../sections/11-consent.md) were each answered separately, and *No* was as easy to give as *Yes* - [ ] Every red flag is in the handover - [ ] Nothing declined was asked twice — including across a subagent handoff - [ ] Every section's handoff state was merged, none dropped - [ ] The client was told what happens next and when ## Partial calls A call that ends early still produces a record. Sixty answered fields are worth having; discarding them because the call dropped at section 7 wastes the client's time and guarantees they answer sections 1–6 twice. Mark the remaining sections `skipped — section omitted`, note where the call ended, and flag whether a callback is needed. Where a stop condition ended the call, the record is complete as it stands — the outstanding sections are not a gap to fill, and nobody should call back to fill them without the coach saying so. # Question patterns The vocabulary used in the **Type** column throughout the questionnaire, plus the notation for conditional logic. Stick to this list — a new answer type means new handling in whatever tool eventually captures responses. ## Answer types | Type | Captures | Use when | Maps to | |------|----------|----------|---------| | `Short text` | One line, free form | Names, places, short labels | `` | | `Long text` | Paragraphs | Anything you want the client to explain | `