Adding patients

Two ways to get patients into ForceIQ (one at a time from the patient list, or in bulk from a CSV) and a map of which fields actually drive behavior downstream. The fields you might be tempted to skip are usually the ones that quietly turn metrics off elsewhere in the app.

Updated May 10, 2026

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 headerMaps toNotes
code (required)Patient codeThe only required column. Duplicates against existing codes are flagged but not imported.
tagsTagsComma, semicolon, or pipe separated. Examples: ACL;right knee;post-op 3mo.
height_cmHeightValues above 3 are interpreted as cm, values 3 or below as meters. Stored internally in meters.
bodyweight_kgBodyweightKilograms.
injured_sideInjured sideAccepts left, right, L, R.
emailEmail (PHI)Used for report delivery. Only collected if your clinic has PHI enabled.
date_of_birth or dobDate of birth (PHI)ISO 8601 preferred (YYYY-MM-DD).
injury or diagnosisInjury (PHI)Free text.
injury_date or surgery_dateInjury or surgery dateDrives time-from-injury and post-op weeks displays.
sportSportFree text.
positionPositionFree 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 patientWhat goes quiet downstream
heightAll torque values, torque unit selector, normalized Nm/kg
bodyweightMass-normalized toggle (silent no-op)
injuredSideLSI panel, bilateral defaults on Capture
injuryDateTime-since-injury badge, post-op weeks indicator
tagsCohort 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.
Was this helpful?