KSA National Agricultural Land Evaluation · App 2 · Module 6

Data Quality and Build Status

What has been built, how quality will be measured once it is, and every gap currently standing between the specification and a working database.

Build stages13
Rows present0
Quality measures8
Open gaps16
0
rows exist, in any table, in any schema
The database has not been created. Every figure below is an expectation, not a measurement — the row counts state what each table will hold at national coverage, and the dependency states what has to arrive before it can be filled. This module is a specification of how build progress and quality will be reported, and it becomes a live report the moment the first table is populated.
TableContentsExpected at national coveragePresent
geo.provinceProvince boundaries
Waits on: MD-01 MOMAH / MD-09 GEOSA
130
geo.governorateGovernorate boundaries
Waits on: MD-01 MOMAH
~1300
geo.cell1 ha national grid
Waits on: geo.province — the partition key
215 M0
obs.capability17 capability measurements per cell
Waits on: Open sources. 5 of 19 blocked by undefined indices
215 M rows × 19 col0
obs.water15 water parameters per cell
Waits on: MD-02 SWA · MD-03 MEWA
215 M rows × 15 col0
obs.land_rights6 legal checks per cell
Waits on: MD-04 to MD-07
215 M rows × 6 col0
obs.suitability26 crop factors per cell
Waits on: Open sources. 4 of 26 blocked by undefined indices
215 M rows × 26 col0
thr.class_rangeClass intervals per element
Waits on: Expert calibration. 82 of 95 cells seeded, all provisional
950
thr.crop_requirementPer-crop thresholds
Waits on: ALUES loaded, none Saudi-calibrated
1,2680
res.element_classOne class per element per cell
Waits on: obs.* populated
9.4 B0
res.hectare_resultOne row per cell per version
Waits on: res.element_class complete for a module
215 M0
geo.zoneDissolved development zones
Waits on: geo.governorate — MD-01
unknown until built0
res.area_ledgerThe published area figures
Waits on: geo.zone
~4300
Progress cannot yet be reported by province. The natural breakdown for a build dashboard is coverage per province, and the province boundary layer is itself request MD-01. Until it arrives there is no partition key, so the 215 M cells cannot be allocated to a province and progress has no denominator to report against. The first ministry delivery is what turns this tab from a specification into a dashboard.
Eight measures, defined before there is anything to measure

Each states what it detects, how it is computed from the schema as designed, and why it changes what the study can claim. Defining them now rather than after the build means the columns they read — completeness, is_governing, fragile_class, source_set_id — already exist in the schema rather than being retrofitted.

Element completeness
How many of a module’s elements are populated on a cell.
obs.*.completeness — a stored count, 0–19 / 0–15 / 0–6 / 0–26.
A cell classified on 11 of 17 qualities is not the same finding as one classified on all 19, even where both return C3. The count travels with the result so the difference stays visible.
Null rate per element
Which elements are systematically missing, and where.
COUNT(*) FILTER (WHERE col IS NULL) / COUNT(*), grouped by province_id.
A high national null rate is a source problem. A high null rate in one province only is a coverage problem, and the two need different responses. Gypsum is expected to null heavily because national mapping is incomplete.
Confidence distribution
What share of published results falls in each band.
COUNT(*) GROUP BY band on conf.result_confidence.
The headline quality figure. If most cells land in low, the study reports a national picture it cannot support at hectare level, and that has to be stated rather than discovered.
Governing element frequency
Which element decides the class, and how often.
COUNT(*) GROUP BY element_code WHERE is_governing.
The most diagnostic measure here. Under maximum limitation one element decides each cell. If a single element governs the large majority of the Kingdom, the study has in effect reduced to that one element, and the other 65 are carrying no decision weight.
Fragile class share
Cells sitting close enough to a class edge that measurement error could move them.
conf.cell_element.fragile_class, set where d/σ < 1.
A cell 0.5 cm from a rooting-depth boundary with a source RMSE of 6 cm is a coin toss between two classes. Reporting it as a firm class overstates what the data supports.
Copy-down share
How much of a cell’s evidence came from a source coarser than the cell.
Derived from src.element_source against the source resolution.
Nine of the fourteen remote-sensing chains write one source value across many cells. Adjacent cells then agree by construction rather than by observation, and any spatial statistic computed over them is inflated.
Source coverage
Which combination of layers produced each row.
obs.*.source_set_id → src.source_set.
Allows a rebuild with different inputs to be distinguished from the original, and allows a bad layer to be traced to every cell it touched.
Threshold maturity
How well founded the class boundaries are.
thr.crop_requirement.validation_status and thr.version.status.
Currently source_validated everywhere, which caps confidence component 4 at 0.80 on every output in the study regardless of how good the measurement was.
The fourth measure is the one to watch. Under maximum limitation a single element decides each cell. If the governing-element distribution turns out heavily concentrated — one element deciding most of the Kingdom — then 65 of the 64 elements are carrying no decision weight over most of the area, and that is a finding about the method, not about the data. It cannot be seen until results exist, which is why the measure is specified now.
Every open gap, in one place

Sixteen items, each with what it blocks and what would close it. They are not all the same kind of problem, and the class column says which: 7 method decisions, 4 ministry dependencies, 3 data gaps and 2 schema questions.

Only the ministry set is closed by a request. The method and schema items are closed by a decision, and no amount of data acquisition moves them.

ClassMethodMinistryDataSchema
ClassGapEffectWhat would close it
MethodNo Saudi-calibrated thresholdsCaps confidence component 4 at 0.80 on every output. All 63 crops stand at NOT_OPERATIONAL.Expert calibration against Saudi conditions.
MethodNo field measurement anywhereCaps confidence component 1 below 1.00 on every element. Nothing in the study is field_measured.A ground sampling programme, or acceptance that the ceiling stands.
MethodNine index constructions undefinedNine elements cannot be produced at all: soil workability, surface sealing, nutrient availability, drainage, wind erosion and four suitability mirrors.A written definition of each index — inputs, function and range. Two of the nine resolve by adopting the HWSD drainage class and t/ha/yr for wind erosion.
MethodN1 / N2 split unavailableSuitability bands stop at N. ref.class defines both values but no threshold distinguishes them.A rule separating currently-not-suitable from permanently-not-suitable.
MinistryGovernorate layer not obtainedBlocks all zone generation, and therefore the governorate tier of the area ledger.Request MD-01 to MOMAH.
MinistryWater module unpopulated13 of 15 parameters have no external substitute. Every hectare returns an unknown water state.Request MD-02 to SWA.
MinistryEleven policy thresholds undeterminedWater parameters can be measured and still not classified.Request MD-03 to MEWA. May be answered as a written determination rather than a file.
MinistryFour legal registers outstandingEvery hectare carries E0 — unknown, never promoted to clear.Requests MD-04 to MD-07, which can run in parallel.
DataECOCROP profiles missing for 56 of 63 cropsOnly 7 Saudi-priority crops carry a full profile.Profile completion, or explicit scoping of the crop library to the 7.
DataGypsum national mapping incompleteHigh null rate expected on SQ-B-06.A national gypsum layer, or acceptance of the null rate as a stated limitation.
MethodMinimum viable areas unconfirmed50 / 20 / 10 / 2 / 1000 ha are working figures. min_viable_ha is NULL on all eight production systems.Confirmation against the Terms of Reference.
MethodProcessing thresholds unregisteredThe NDVI bare-soil cut-off, cloud-probability cut-off and minimum clear-observation count each change stored values.Registration for calibration alongside the class boundaries.
DataRUSLE conservation factor fixed at 1Erosion reported as potential under no management. Overstates loss where terracing exists.A national conservation-practice layer, or a stated caveat on the element.
MethodSalinity chain measures surface crustThe chain observes a crust; the class is defined on root-zone ECe. The relationship is assumed, not measured.Ground samples to calibrate the index-to-ECe relationship.
SchemaWP-C-02 SAR cannot be banded aloneFAO-29 evaluates SAR jointly with ECw. A single-column band table cannot hold a two-variable surface.A schema decision — a two-dimensional lookup, or infiltration as a derived element.
Schemathe cell is 1 haThe one-hectare grid named in the ToR is approximated, not met. App 2 states 1 ha; App 1 and the methodology report state 1 ha.A decision to propagate the correction across the engagement.
Two ceilings bind every output regardless of anything else on this list. No threshold version exceeds source_validated, so confidence component 4 is capped at 0.80 everywhere. And no element is field-measured anywhere, so component 1 cannot reach 1.00. Taken together, no cell in the study can currently publish a confidence above roughly 0.90 even where the measurement is excellent and the boundary is far away. That is a property of the study as scoped, not a defect to be fixed in the build.