Schema Care

How Abnormal Flags Are Printed on Lab Reports

By Schema CarePublished Updated

Abnormal flags are printed on lab reports as letters such as H, L, A, HH or LL in a flag column, as a symbol beside the value, or as bold type. To capture one, copy the mark exactly as printed, map it to a standard code only when its meaning is clear, and leave a blank flag blank.

Abnormal flag codes labs print: H, L, A, HH, LL, AA

Abnormal flag codes are the short letters a lab prints next to a result to mark it against the lab's own reference range. The common letters are H, L and A, and their doubled forms HH, LL and AA. Most match codes in the HL7 observation interpretation code system, which makes that system a sensible target vocabulary for stored flags.

The HL7 ObservationInterpretation code system gives each of these letters a code and a display name. The table below lists the printed mark, where it usually appears on a fictional report, and the value to store. The display names are HL7's; this post does not say what any flag means for a patient.

Printed mark (example)Where it is printedStored flag codeHL7 display name
HFlag columnHHigh
LFlag columnLLow
AFlag column, often on text resultsAAbnormal
HHFlag columnHHCritical high
LLFlag columnLLCritical low
AAFlag columnAACritical abnormal
*Beside the valueOnly what the report's legend definesNone by itself
Bold typeThe value itselfOnly what the report's legend definesNone by itself

The code system has more codes than labs usually print, including HU and LU (significantly high and low) and N (normal). Some reports print N on every row. When a report does, store it, because the lab printed it.

Watch for marks that look like flags but belong to the value. HL7 also defines < and > as "off scale low" and "off scale high", but a printed "<5" or ">1000" is a value with a comparator, not a flag. Keep the sign with the result fields and leave the flag field to whatever the flag column shows.

Where does the abnormal flag sit on a lab report row?

An abnormal flag usually sits in its own column between the result and the reference range, but labs also print it directly after the value, in front of it, or only as a change in type. Where it sits decides how you find it, and the legend on the report decides what it means.

The placements you are likely to meet on fictional sample reports:

  • Its own column, headed "Flag", "Abn" or nothing at all. This is the easiest case; the column header and the letters line up.
  • After the value, as in "182 H". Split the letter into the flag field and keep the number as the result.
  • As a symbol, such as an asterisk or an exclamation mark before or after the value. The report legend, usually in the footer, says what the symbol stands for.
  • As formatting, with the value in bold, inverse or a colored box. A text layer may not carry the formatting at all.
  • In a separate summary block at the top of the report that lists only flagged results. Treat it as a copy, and check it agrees with the flags on the rows.

Formatting-only flags are where source format matters most. A digital PDF may keep the bold font in its text layer, while a scan or fax keeps only the image. The guide to scanned vs digital lab reports covers what each source preserves.

Is a missing abnormal flag the same as a normal result?

A missing abnormal flag is not the same as a normal result. A blank flag cell records that the lab printed no flag, and nothing more. Store it as empty, not as N, because N is a code the lab chose not to print, and adding it puts a statement in the record that the page does not make.

The difference matters later. A query that counts N flags should count only what labs actually printed. If blanks are filled with N, the count mixes printed flags with assumptions, and nobody can tell them apart afterward.

Blanks have several causes that look the same on the page:

  • The lab prints flags only when a result is outside its range, so a blank is the lab's usual output.
  • The test has no reference range, so there was nothing to flag against.
  • The result is a comment, such as "Specimen rejected", with no value at all.
  • The flag was lost in scanning or cropped off the edge of the page.

Only the last one is an extraction problem, and only a look at the page tells it apart from the others. When the flag column is cut off or unreadable, mark the field as unreadable instead of empty and send it to a person.

Capturing abnormal flags as printed, not recalculated

Capturing abnormal flags as printed means storing the lab's own mark, even when you could derive one by comparing the value with the range. Recalculating replaces the lab's statement with yours. The lab set its range and decided its flags, and the record should show that decision rather than a new one made downstream.

The federal CLIA rules make the lab the owner of its range. 42 CFR 493.1291 on the test report speaks of reference intervals "as determined by the laboratory performing the tests". A derived flag would use the printed range but none of the lab's own choices, such as how it rounds a value or which tests it flags at all.

There is still a use for comparing the value with the range: as a check on the extraction, not as a replacement for the flag. If the printed flag is H but the extracted value sits inside the extracted range, one of the three fields was probably misread. That test is described in whether the printed flag agrees with the extracted value and range. When it fails, a person looks at the page; the flag is not rewritten.

A fictional row shows the full record:

FieldExample value
Result182
Unit (as printed)mg/dL
Flag (as printed)H
Flag codeH
Flag code systemHL7 ObservationInterpretation
SourcePage 2, row 4

Schema Care reads abnormal flags from lab reports as their own field and scores each one, so a faint or cropped flag goes to a reviewer, who sees it highlighted on the page before approving or correcting it, as the review steps on the homepage lay out. The human review category covers thresholds and review queues in more depth. Once flags are clean, the next step for most teams is coding the test names, covered in mapping lab test names to LOINC.

All posts in Lab Reports