Skip to content
ImplementedFor eCRF designers, data managers, medical monitors

Units and normal ranges

Last updated Oct 21, 2026

What this is, and who it is for

A unit says what a number means (kg, mmHg). A normal range says which values are usual, so a value outside it is brought to a reviewer's attention without being refused. A haemoglobin of 11.2 g/dL is normal for one participant and low for another, so a range can differ by the participant's sex, their age at the visit, or the answer to another field. This page is for the designer who sets them and the data manager who will read the queries they open.

Where to find it

  • Unit: builder → select a Text or Number field → CDMS tab → Unit label and Unit code.
  • Normal range: builder → select a Number, Range or Scale field → Validation tab → Normal range. (A Range ignores it: see Field types.)
  • A table column's range: the column's Edit checks (Normal range low, Normal range high, one range only).

What you can do

Set a unit

Type the Unit label (what is shown after the box, for example kg) and the Unit code (an internal code, for example KG). Only Text and Number fields carry a unit.

Where: Form builder > LB. Role: eCRF Designer.
  1. A number field shows its unit beside the box.

Set one normal range

Under Normal range leave One range for everyone chosen and type Normal min and Normal max. Either may be left empty to leave that side open.

Set different ranges by value

  1. Choose Different ranges by value. The range you had becomes All other values.
  2. Choose Add range for… and pick Sex, Age or Another field. Each makes a row.
  3. For a row: a Sex row asks Male, Female or Other; an Age row asks under, at most, over or at least a number of years; an Another field row asks a field of the same form, a comparison and a value (the same comparisons as a visibility condition). Then type the row's Minimum and Maximum.
  4. Rows are read from the top. The first row whose conditions all hold is the range of the value; if none holds, All other values applies. A row can have several conditions (for example female and age under 18); all must hold.
  5. Use Try it (preview in the builder) to enter a sample sex, age and value and see which row applies and what happens, using the same resolver the form and the server use.
Where: Form builder > Validate > Normal range. Role: eCRF Designer.

Choose what happens when a value is outside its range

Under When the value is outside its range choose Query (the default), Block or Warn. This is the same setting as Normal range under When a check fails (Validation, edit checks and their severities).

Every option

PartMeaning
Sex rowThe participant's sex as recorded at screening (male, female or other). If sex was not recorded, a sex row does not match and the general range applies, and the query says the sex was missing
Age rowAge in whole years: the year of the visit's date less the participant's birth year recorded at screening (not a birthday-exact age). If the birth year is unknown the row does not match and the query says so
Another field rowA field of the same form compared with a value. If that field is empty the row does not match
Minimum / Maximum of a rowEither may be left empty for an open side. A row with no limits at all is a warning in the issues list
All other valuesThe field's own Normal min and Normal max

The query names the value, its unit and the range that applied, so the person answering need not open the form: Haemoglobin 11.2 g/dL is outside the normal range for this subject (female: 12 to 16). With one range for everyone it reads Haemoglobin 11.2 g/dL is below the normal range (12 to 16). When the participant’s sex or age was not known it says so (sex not recorded, so the general range applied). A value outside a range opens a query with normal priority (other checks are high); a value equal to a limit is inside.

Problems the builder reports for ranges: a minimum above a maximum (error); two rows that apply to exactly the same subjects, so the second can never be reached (error); a row that depends on a field no longer on the form (error); a row with no limits (warning). The server refuses to make a form active that has the first two.

What the system records

Units, ranges and severities are part of the form's design revision and snapshot. A unit is exported with the design (data dictionary and ODM-XML metadata). In an amendment's change summary, giving a field a unit or changing its label or range is a Controlled change; changing or removing a unit on a field that holds Live data is Breaking, because it changes what the captured numbers mean.

What you cannot do, and why

  • Convert a captured value when the unit changes. A unit is a label; the system does not recalculate stored numbers. Change a unit on a Live study only through an amendment, and only after considering what it does to data already entered.
  • Use a unit on a date, choice, Range or Scale field.
  • Have a range depend on the participant's weight, race or any value not recorded at screening or on the form. Only sex, age and another field of the same form are available.
  • Have a range vary by visit. Use an Another field row on a field that carries the visit's information, or use two fields.
  • Make the unit part of the stored value. The value is a number; the unit is part of the design.

Compliance Q&A

Compliance Q&ABuiltICH E6 data-correctionsALCOA+ accuratePart 11 11.10(f)
Are out-of-range values flagged for review rather than silently accepted or refused?

Yes. By default a value outside the participant's normal range is saved and an automatic query is opened for a reviewer. The designer can instead set it to refuse the save (Block) or to show a message only (Warn); that choice is part of the tested and signed design.

Limits: the system has one range for each combination of sex, age band and field value that the designer writes. It has no laboratory-specific reference ranges loaded from a central lab (Not built yet).

Evidence: server/src/modules/study/data-capture/domain/validation-engine.ts (normal_range, priority normal)vendor/form-engine/engine/normal-range.tssimulation of 20 Oct 2026 (laboratory queries)

Validation, edit checks and their severities · Field properties · Work with queries · Not built yet