A QA pack you can read is useful. A QA pack you can objectively accept or reject is contractual. Most briefs ask for the first and accidentally settle for whatever arrives. Specifying acceptance criteria up-front turns the QA pack from a document into a test the delivery either passes or fails — with pre-agreed consequences either way.
The QA pack article covered what should be in a pack. The reading residuals article covered how to interpret the most important page in one. This article is the procurement-side companion: how to write acceptance criteria into a contract so a QA pack can be objectively accepted or rejected, rather than negotiated after the fact.
It pairs with the procurement checklist and the reading proposals article as the contract-level companion to those brief-level pieces.
Most QA-pack specifications stop at what should be included: metadata, residuals, classification quality, density map, sign-off. That's necessary; it isn't sufficient.
Contents answer: did the operator include this section? Acceptance criteria answer: did the section meet a defined threshold?
A pack can be complete in contents and unacceptable in results. A residuals page is present (contents pass) but reports RMSE of 80 mm against a 20 mm spec (criteria fail). A classification audit is included (contents pass) but shows 35% manual-correction rate on what should have been automated work (criteria warn).
Without acceptance criteria, the buyer's only contractual options at delivery are accept or initiate a dispute. With acceptance criteria, the conversation moves to specific clauses with specific remediation paths.
Six items where contractual thresholds eliminate post-delivery ambiguity:
What to specify. Not just the RMSE target but the worst- case checkpoint residual that's tolerable.
Example clause.
"Acceptance: RMSE vertical at independent control checkpoints shall not exceed 22 mm aggregate, with no individual checkpoint residual exceeding 60 mm. Where any individual residual exceeds 45 mm, the operator shall investigate and document the cause in the QA pack."
Why the worst-case matters. RMSE alone hides outliers. Specifying both prevents a capture with 18 mm RMSE and a single 250 mm outlier from passing.
What to specify. Residuals stratified by cover class with per-class thresholds.
Example clause.
"Residuals shall be reported stratified by cover class (bare, sparse, moderate, dense). Per-class RMSE thresholds: bare ≤22 mm, sparse ≤30 mm, moderate ≤45 mm, dense ≤80 mm. Any class breach to be documented with affected area, surface conditions and recommendation."
Why per-class thresholds matter. Aggregate RMSE can hide significant variance under canopy. Stratified thresholds ensure the dense-canopy areas the design will actually rely on meet a defensible spec.
What to specify. Post-alignment overlap discrepancy threshold per strip pair.
Example clause.
"Post-alignment overlap RMSE shall not exceed 20 mm per strip pair. Strip pairs exceeding 35 mm to be documented in the QA pack with remediation action. Per-strip transformations applied during alignment shall be documented in the QA pack (translations, rotations)."
Why this matters. Catches over-fitting issues per the strip alignment article and ensures the operator shows their work rather than burying significant transformations.
What to specify. Class population sanity check + manual- audit confusion matrix threshold.
Example clause.
"Classification quality shall include: per-class point population in the QA pack; manual-audit confusion matrix from a randomly-sampled 200 points reviewed by hand; per- class precision and recall. Ground class precision shall exceed 98%, recall shall exceed 95%."
Why this matters. Quantifies classification quality beyond visual inspection. The audit sample doubles as a sanity check that the manual review actually happened.
What to specify. Project-area percentage that must meet target density, and minimum acceptable per-cell density.
Example clause.
"Achieved point density at 1 m grid: at minimum 95% of cells within project boundary shall meet ground-classified target density of 60 pt/m²; no cell shall be below 25 pt/m² ground-classified. Density coverage map at 1 m grid to be included in QA pack."
Why this matters. Prevents the case where average density is fine but specific zones are sparse. Forces the operator to maintain density across the whole project, not just where it was easy.
What to specify. Explicit list of QA pack sections with sign-off requirements.
Example clause.
"QA pack shall include all of the following, signed off by a reviewer independent of the processing team:
- Project metadata header (project ID, dates, contributor)
- Capture parameters (sensor, altitude, flight conditions)
- Trajectory quality (PPK solution, covariance plot, base RINEX reference)
- Strip alignment results (pre/post overlap residuals)
- Independent control checkpoint residuals (per item 1, 2)
- Classification quality (per item 4)
- Density coverage map (per item 5)
- Surface model QA (resolution, interpolation, hydro- enforcement breaklines)
- Deliverable manifest
- Sign-off block (named reviewer, date, role)"
Why this matters. A QA pack missing a section can't be objectively rejected without specific clauses requiring it. This list turns the QA pack into a checklist.
Contracts benefit from three-tier acceptance language rather than binary pass/fail:
Clean accept. All six criteria met within threshold. No documented exceptions. Sign-off block complete. Payment proceeds per contract terms.
Conditional accept. Some criteria met within threshold; others within an extended tolerance band documented with explanation. Payment proceeds with documented exceptions noted; remediation either not required (the variance is acceptable in context) or scheduled separately.
Reject pending remediation. One or more criteria breached significantly. Payment held pending agreed remediation. The remediation path is pre-defined by criterion.
Example contract language for the three-tier framework:
"Deliverable acceptance: the QA pack will be evaluated against the six criteria above. Outcomes:
- Clean accept: all six thresholds met. Payment proceeds.
- Conditional accept: up to two criteria within 50% of threshold breach. Documented in delivery letter. Payment proceeds with noted exceptions.
- Reject pending remediation: any criterion exceeding 50% of threshold or more than two criteria in breach. Remediation path per attached schedule."
The three-tier framing avoids the all-or-nothing problem where minor exceptions trigger disproportionate dispute.
For each criterion, the contract should specify what happens when it fails:
Residual RMSE breach. Operator investigates root cause; re-processes from archive if cause is processing; partial or full re-fly if cause is capture. Cost responsibility per attached schedule (typically operator-borne if breach exceeds 50% of threshold).
Cover-class breach. Operator documents affected area; either accepts the limitation in delivery, or schedules targeted re-fly of affected area. Cost responsibility per schedule.
Strip alignment breach. Operator re-runs alignment with adjusted parameters. If unable to bring within threshold, investigate boresight calibration ( the boresight article covers the root cause).
Classification accuracy breach. Operator runs additional manual review on misclassified areas; re-issues classified cloud with documented changes.
Density coverage breach. Operator documents affected cells; partial re-fly of low-density areas if material to deliverable; otherwise accept with documented limitation.
Documentation completeness breach. Operator adds missing sections from existing project records. Re-sign by independent reviewer.
Pre-agreed remediation paths convert "the delivery isn't acceptable" into "the delivery requires the following remediation per contract schedule X". Much more actionable.
Without acceptance criteria, post-delivery friction depends on operator goodwill — most reputable operators will work to resolve issues anyway, but the buyer has no contractual basis for insisting.
With acceptance criteria:
The intent isn't to be adversarial — most projects never invoke the rejection clauses. The intent is to make the acceptance process specific and objective so both parties share the same understanding of what's required.
Three patterns in marginal contracts:
Writing vague criteria. "QA pack shall be acceptable to the purchaser" — gives the buyer veto without specificity. Reputable operators reasonably push back on this kind of language. The fix is to specify the threshold rather than delegate the judgement.
Setting unrealistic thresholds. Specifying ±10 mm RMSE under dense canopy is achievable with very expensive capture and a re-fly contingency budget; quoting against it inadvertently signals a project that may not be feasible at budget. Use realistic thresholds per the accuracy article.
Not including the underlying metric. "RMSE ≤20 mm" without specifying it's at independent checkpoints, vertical, against AHD — leaves operators free to report against a different measure. The clause needs to specify what the threshold is measured against, not just the number.
Forgetting documentation criteria. Specifying accuracy thresholds without specifying documentation requirements produces deliveries that meet the numbers but can't be verified. Both kinds of criteria are needed.
For multi-cycle programmes (per the annual programmes article), acceptance criteria typically have both per-cycle and programme-aggregate components:
Per-cycle. Same six criteria above, applied to each capture.
Aggregate / trend-based. Across cycles, does the operator maintain consistency? Are residuals stable cycle-over-cycle or drifting? Is processing pipeline version stable?
Programme contracts benefit from trend-based criteria because they catch quality drift that per-cycle criteria miss. Example aggregate criterion:
"Aggregate cycle-over-cycle: residual RMSE shall not drift by more than 20% between consecutive cycles. Drift exceeding threshold to trigger root-cause investigation per attached schedule."
Acceptance criteria are the contractual companion to the QA pack contents specification. Without them, the buyer has no specific basis to accept or reject a delivery; with them, the process is objective and remediation paths are pre-agreed.
Six criteria worth specifying:
Three-tier acceptance framework (clean accept / conditional / reject pending remediation) avoids the all-or-nothing dispute trigger that binary frameworks create.
Pre-agreed remediation paths per criterion convert delivery problems from disputes into contractual processes. Most projects never invoke them; specifying them changes the dynamic before they're needed.
For programme work, add cycle-over-cycle trend criteria to catch drift that per-cycle criteria miss.
If we're in the conversation, happy to walk through criteria language we've successfully delivered against on similar projects — including the realistic threshold values for your site type and the remediation paths we'd commit to. Better at contract stage than at delivery.
The contents-level companion — what each of the 10 standard QA pack sections should contain, before acceptance criteria are layered on top.
The brief-level companion — six items to put in the RFQ, of which the QA pack acceptance criteria are the contractual enforcement layer.