Because nobody sees it, bad schema goes unnoticed. The website looks perfect while Google is being told something untrue, or cannot read the labels at all.
Most websites get their schema from a template, and one mistake in a template is repeated on every page built from it. Google's own reports name the symptom — “missing stock information”, say — but not which line of the template is responsible, or whether the template is responsible at all.
We check it the way Google does: take the labels from the live pages, count every page rather than a handful, and put the result through Google's own testing tool before deciding what is wrong. Finding a fault is not the same as proving it is doing harm, so the checking comes before any fixing. Where we build a website ourselves, the labels are written in automatically every time the site is rebuilt, and our website health check reports whether any business's home page carries them.
Agents that would compare a shop's labels with its real prices and stock, and prepare the fix for a person to approve, are planned. Work on them has not started.