RIDING BYTES
← All insights

October 17, 2026 · 6 min read

Result options: when a picklist beats a number

Present or absent, positive or negative, a colour on a scale. How SENAITE stores categorical results as numbers with a label, why that keeps reports, specifications and calculations working, and where manual entry punches a hole into it.

Result options: when a picklist beats a number

Some analyses do not produce a measured number. A coliform test reads present or absent, a rapid test positive, negative or invalid, a colour is judged against a scale. Typed as free text, these results end up as “pos”, “Positive”, ”+” and “POS.” in the same column, and no report or query can count them reliably.

SENAITE handles them with predefined results on the Analysis Service, on its Result Options tab.

A number with a label

Each predefined result has two parts:

  • Result Value: a number. This is what SENAITE stores as the result of the analysis.
  • Display Value: the text the analyst picks from and the report prints.

So 0:Negative, 1:Positive, 2:Invalid store 0, 1 or 2 and show the word. SENAITE validates both columns: the Result Value must be a number (at most five characters) and unique within the service, the Display Value is required and unique as well.

Storing a number is what makes the rest of the system work with categorical results:

  • Specifications. A specification can set a range on the stored value. With Max 0 on the coliform test, every Present (stored as 1) is flagged out of range, exactly like a numeric result above its limit. See specifications.
  • Calculations. A formula reads the stored number. A calculation that sums the results of four pathogen tests counts the positives.
  • Integrations. Over the JSON API the result is the stable number, regardless of how the label is worded or translated.
Result options tab of the service Colour: result type Selection list, predefined results 0 colorless, 1 brownish, 2 undefined, default result 0, sorting by Display Value ascending.
Result options of a colour test: the stored value is a number, the analyst and the report see the label.

Result types

The Result type field decides how the analyst enters the result. Besides Numeric, String and Text, plus Date and Datetime, there are four types that use predefined results:

Result typeAnalyst picksStored as
Selection listone option from a dropdownone value
Multiple selectionseveral options from a lista list of values
Multiple selection (with duplicates)options, the same one repeatedlya list of values
Multiple choicesseveral options, all shown at oncea list of values

For the list types, a specification flags the result only if none of the selected values is in range.

Default result pre-fills the entry when the analysis is created. For selection types it must be one of the Result Values.

Sorting: alphabetical unless you say otherwise

The Sorting criteria default to the Display Value in ascending order. A scale entered as Weak, Moderate, Strong therefore appears as Moderate, Strong, Weak in the dropdown. Set the sorting to “Keep order above” or to the Result Value when the order carries meaning. This only affects the dropdown, not stored results.

Manual entry: the escape hatch

SENAITE 2.7 adds Allow Manual Entry per option. When the analyst selects such an option, a text field appears and the typed text is stored as the result. Typical use is an “Other” option for the rare case the list does not cover. An option whose value or display text is “Other” behaves this way even without the checkbox.

Use it knowing what it costs. A manually entered result is free text, not one of the numbers:

  • a calculation that depends on it gets no usable input,
  • a specification cannot judge it,
  • reports and statistics cannot group it with the predefined outcomes.

Every manual entry option is a gap in the consistency the list was meant to provide. If the same “Other” text keeps coming up, turn it into a predefined result.

Result variables

On the same tab, Result variables add extra fields next to the result, such as “Sediment visible: yes/no” on a colour assessment. They take the same value:text choices, for example 0:No|1:Yes, can be printed on the report as a footnote under the result, and can be read by a calculation. Their keywords must be unique across the whole system; many labs prefix them, for example x_sediment.

A worked example

E. coli as a presence/absence test in drinking water:

SettingValue
Result typeSelection list
Predefined results0 Absent, 1 Present
Sorting criteriaKeep order above
Default result0
Specification (drinking water)Max 0

The analyst sees “Absent” pre-selected and changes it only for a positive sample. A Present result is flagged out of range, the report prints “Present” with the out-of-range mark, and an export of the month’s results counts positives by the value 1.

Result entry for the analysis Colour: a selection list showing colorless and a second selection list for the result variable Sediment visible set to No.
At result entry the options become a dropdown, here next to a result variable of the same service.

When not to use them

  • Rare observations. A remark field is the better place than an option nobody picks twice.
  • Numbers in disguise. If “low”, “medium”, “high” are really bands of a measured value, record the value and let a specification judge it. When the band limits change, the measured values stay comparable; results stored as “medium” do not.

Integer Result Values that never change are worth deciding before go-live. They end up in calculations, instrument import mappings and exports, which all keep working when a label is reworded later.

Two people reviewing notes on paper next to a laptop

Bring this to your lab

Whether you are evaluating SENAITE, scaling it across sites, or wiring up instruments and monitoring, the team that wrote the platform is the team you talk to.