Exports usually carry both a %germination column and the raw counts. They disagree more often than you'd hope — typos, stale formulas, a percent computed against the wrong denominator. The rule: wherever valid counts exist, recompute the percentage from NumberGermin ÷ NumberSown and use that. The supplied percent is only a fallback for rows with no counts, with one rescue: values over 100 that are really proportions ×100² get divided back down.
Then the hard stop. Any row where germinated exceeds sown is not a warning — it's a data error that would silently corrupt every downstream number. Write those rows to an issues file and halt. A pipeline that keeps going past impossible data produces confident garbage.
Clamp the final percentage to [0, 100] and assert your invariants (max ≤ 100, no germ > sown) even after fixing, so a future edit that breaks the cleaning step fails loudly.