ForceIQ is built around a single de-identified patient code. Everything else is optional. That is on purpose: clinics with strict PHI handling can run the platform end to end with nothing but a code, and the workflow still produces every metric. But "optional" doesn't mean "no consequences." A few of those optional fields are what unlock torque conversion, mass normalization, and LSI. If they aren't entered, the corresponding view downstream silently falls back to a less informative version, and the most common "why is this metric missing" question turns out to be a missing field on the patient record.
This article covers both paths to get a patient in, plus a map of which field drives what.
Two ways to add a patient
From the patient list
Patients → Add Patient opens an inline form on the patient list. The only required field is the code. Everything else is editable later from the patient profile, so it's fine to add a patient with just a code, run their first session, and fill in the rest when you have a minute.
From a CSV
Patients → Import CSV opens the bulk-import modal. Use this when migrating from a spreadsheet, a previous tool, or a sports-medicine roster. The parser auto-detects delimiter (comma or tab) and matches column headers case-insensitively. The header row must include at least a code column; every other column is optional.
Recognized columns (header names match fuzzy, so Patient Code, code, and patient_code all work):
| CSV header | Maps to | Notes |
|---|---|---|
code (required) | Patient code | The only required column. Duplicates against existing codes are flagged but not imported. |
tags | Tags | Comma, semicolon, or pipe separated. Examples: ACL;right knee;post-op 3mo. |
height_cm | Height | Values above 3 are interpreted as cm, values 3 or below as meters. Stored internally in meters. |
bodyweight_kg | Bodyweight | Kilograms. |
injured_side | Injured side | Accepts left, right, L, R. |
email | Email (PHI) | Used for report delivery. Only collected if your clinic has PHI enabled. |
date_of_birth or dob | Date of birth (PHI) | ISO 8601 preferred (YYYY-MM-DD). |
injury or diagnosis | Injury (PHI) | Free text. |
injury_date or surgery_date | Injury or surgery date | Drives time-from-injury and post-op weeks displays. |
sport | Sport | Free text. |
position | Position | Free text. |
The modal previews every parsed row before commit, with duplicates filtered out. Nothing is written until you click confirm.
Which fields actually drive behavior
Most fields are display-only (sport, position, tags, dates). A handful change the math. These are the ones to fill in if you can:
Height
Sets the moment arm used to convert force into torque. ForceIQ estimates the segment-specific moment arm from the patient's height using an anthropometric model that covers the joint and action being assessed.
Without height: torque fields are null on every session for this patient. The Session Detail view falls back to force units and shows a prompt: Enter patient height to enable torque conversion. The dashboard radar and trend grid render in force as well. Mass-normalized torque (Nm/kg) is unavailable. You can still measure progress in force units; you just lose the comparison to literature and reference ranges that are expressed in Nm.
Bodyweight
Drives mass normalization (Nm/kg, N/kg). The peak tile on the Session Detail page and the dashboard can be toggled to show the normalized value, but only if bodyweight is present.
Without bodyweight: the "Normalized" toggle does nothing for this patient. Peak still renders in absolute units. No error is thrown; the toggle just produces the same number. The unit selector on the dashboard also won't offer N/kg or Nm/kg for that patient.
Injured side
Tells the platform which side is involved when an assessment is bilateral. Used by the LSI panel (involved vs uninvolved split) and by the Capture protocol setup (the bilateral switch defaults to the involved side).
Without injured side: LSI cannot be computed for bilateral assessments. The panel shows a "no involved side specified" state rather than the weighted radar and headline. On the Capture page, you have to pick the involved side manually each time you start a bilateral set. If the patient's injury isn't unilateral (post-stroke, bilateral surgery, performance baseline) leaving this blank is correct.
Injury date
Drives time-from-injury badges on the patient row and the post-op weeks indicator on the patient detail. The session list also uses it to organize visits relative to the surgical date when present.
Without injury date: those badges and the post-op timeline don't render. Sessions still aggregate normally; they're just timestamped against the absolute date rather than the post-op timeline. If the patient isn't post-surgical, leaving this blank is correct.
Tags
Used for filtering on the patient list and for grouping in the clinic dashboard. Tags also propagate into the report cover. They don't change any computation.
Without tags: the patient list can still be searched by code, but cohort filters (e.g. "all ACLR post-op 6 month") won't pick them up.
Code
Required. Used as the patient label everywhere a name would normally appear (chart annotations, report headers, dashboards). Two patients in the same clinic cannot share a code.
PHI fields (name, email, date of birth, injury, clinical notes)
Optional and only collected if your clinic has enabled PHI in Settings → Clinic. If PHI is enabled, these fields show up on the patient profile and on PDF reports; if it isn't, they're hidden. The platform never requires PHI to compute or display any metric.
Without PHI enabled: all clinical workflows still function. The patient code is the only identifier. Reports use the code only. There is no degraded behavior, only less identifying information surfaced.
The "why is this metric missing" cheat sheet
If you find yourself wondering why a number isn't there, this is usually the answer:
| Missing on the patient | What goes quiet downstream |
|---|---|
height | All torque values, torque unit selector, normalized Nm/kg |
bodyweight | Mass-normalized toggle (silent no-op) |
injuredSide | LSI panel, bilateral defaults on Capture |
injuryDate | Time-since-injury badge, post-op weeks indicator |
tags | Cohort filters on the patient list |
The platform never warns you that one of these is missing before you start a session; it just falls back. If you're seeing force units when you expected Nm, the first place to check is Patients → <patient> → height.
What to do next
- Set up your first patient with just a code, then capture immediately. Fill in height, bodyweight, and injured side before the second session. The first session is for learning the workflow.
- For bulk migrations, export from your existing system into a CSV and import. A column-mapping audit takes a few minutes and saves a lot of one-at-a-time data entry.
- If you can't enter height or bodyweight up front, that's fine. The patient profile is editable inline. Add the fields when you have them and the next session will pick them up; existing sessions don't backfill (computation is immutable per session for audit), but the longitudinal view will show the change going forward.