Every document processed by FlexOrch receives a quality score between 0 and 100 and a corresponding grade from A to D. These signals let you filter high-confidence records into your datasets and flag documents that need review before you use them for LLM training or analytics.
Quality Grades
| Grade | Score Range | What It Means |
|---|
| A | 85–100 | High quality — key fields extracted, low noise |
| B | 65–84 | Good — minor gaps or slight noise |
| C | 45–64 | Moderate — notable extraction issues or OCR problems |
| D | 0–44 | Low — significant problems; review before using |
Factors That Affect the Score
Three signals combine to produce the final score:
- Field fill rate — The proportion of expected fields for the detected document type that were successfully extracted. A low fill rate drives the score down.
- Noise ratio — The share of the document made up of non-informative content such as repeated headers, page numbers, or boilerplate. Higher noise lowers the score.
- OCR confidence — For scanned documents and images, a low OCR confidence score (below 0.7) automatically caps the grade at C, regardless of how well fields were extracted.
Accessing Quality Data
Quality information is included in every completed job response:
{
"processing_summary": {
"quality": {
"score": 91,
"grade": "A",
"field_fill_rate": 0.94,
"ocr_confidence": null
}
}
}
ocr_confidence is null when OCR was not used — for example, a text-based PDF or a DOCX file.
Tracking Quality Trends
Monitor how document quality changes over time on the Usage → Quality tab in the platform, or pull the trend data directly from the API:
curl "https://api.flexorch.com/v1/usage/quality-trend?period=30d" \
-H "X-API-KEY: dfx_your_key_here"
Filtering by Grade
Use the Datasets → Ready to Build tab in the platform to filter completed jobs by grade before you build a dataset. You can also apply grade filters in your own pipeline using the Python SDK:
from flexorch_sdk import FlexOrch
client = FlexOrch(api_key="dfx_your_key_here")
# Only include grade A and B jobs in the dataset
good_jobs = [j for j in client.jobs.list() if j.quality_grade in ("A", "B")]
dataset = client.datasets.build(job_ids=[j.id for j in good_jobs])
Filtering to grades A and B before building a dataset is the fastest way to improve downstream LLM fine-tuning results.
Submitting Feedback
If a quality score looks wrong — for example, a document graded C that you know is clean — submit feedback from the Jobs page using the thumbs up / thumbs down control, or via the API:
curl -X POST "https://api.flexorch.com/v1/jobs/{id}/feedback" \
-H "X-API-KEY: dfx_your_key_here" \
-H "Content-Type: application/json" \
-d '{"rating": "negative", "issue": "wrong_fields"}'
Feedback is used to improve classification and extraction models over time.