It depends on the page. AI extraction is reliable on clearly printed, single-column results with a visible range, and less reliable on handwriting, faint scans, multi-column layouts, and calculated indices. Doctano normalizes names, units, and ranges, but every value keeps a link to its source so it can be checked.
What extraction is actually doing
Reading a lab report is not one task. It is several: find the rows, read the test name, read the value, read the unit, read the reference range, read the flag, and read the dates and the patient details. A misread can happen in any one of those steps, and the value can still look perfectly plausible afterwards.
That is why an error in a lab timeline is quiet rather than obvious. 10.7 instead of 107 is a real-looking number. A unit read from the wrong column looks like a unit.
Where reports are easy, and where they are not
| On the page | Why it is hard | What catches it |
|---|---|---|
| A printed row with test, value, unit, and range | Nothing. This is the easiest case. | A quick compare is still worth doing. |
| A faint or low-resolution scan | Characters blur together and decimals disappear. | Upload a clearer copy, then compare. |
| A photo with glare, shadow, or a curled page | Part of a column is simply not visible. | Retake the photo with even light and the full page. |
| Two columns of results side by side | Values can be paired with the wrong test. | Check the value's neighbour row, not just the value. |
| A handwritten correction or annotation | Handwriting is not printed text, and it may contradict the print. | Ask the lab what the issued value is. |
| A unit printed once in a column heading | The unit applies to rows that do not repeat it. | Check the unit against the report's heading. |
| A range written as text, such as "negative" | There is no number to compare. | Treat the result as qualitative, not numeric. |
| A calculated index that is not printed | It was never on the page, so nothing can be extracted. | Do not expect a derived number to appear. |
| Decimal and thousands separators | Conventions differ by country and by lab. | Compare two neighbouring values for scale. |
Calculated indices are a special case
Some indices that people ask about are not printed by the lab at all. A ratio built from two reported values, or an index derived from a formula, does not exist as a row on the report. Extraction cannot find it, and an assistant that produces it is calculating, not reading.
That distinction matters, because a calculated number inherits any error in its inputs. If you want a derived value, calculate it from verified inputs and write down the formula.
What Doctano does after extraction
The extraction step is the beginning, not the end. After it, Doctano resolves the raw test name to a standardized name, assigns a LOINC code where it can, filters out rows it cannot use, normalizes units to a standard unit, parses the reference range into something comparable, and classifies the result. A value without a usable range stays unknown rather than being forced into a label.
Each of those steps is a chance to correct an error and a chance to introduce one. Mapping SGPT and ALT to the same marker makes a trend possible; it also means a bad mapping can attach a value to the wrong history. That is why the source link matters more than the label.
The verification step
Check three things on any value you plan to act on:
- The value, including the decimal point.
- The unit, compared with the report's own unit.
- The range, compared with the range printed beside that result.
In Doctano, open the report from the result and use View original to see the uploaded file beside the extracted values. If they disagree, the file is right.
Signs a value was misread
- A decimal place that makes the value ten or a hundred times larger than the ones around it.
- A unit that differs from other results in the same panel on the same report.
- A reference range that does not appear anywhere on the page.
- A marker name you cannot find on the report.
- The same test twice, with different values, from a single report.
What no product can promise
No extraction product can promise a perfect read of every page, and a page that is illegible to a person is illegible to software. What a product can do is keep the source, show what it could not use, and avoid inventing a number for a row it could not read. Treat the extracted timeline as a well-organized copy, not as a replacement for the laboratory's report.
