Operational examples assume that the SSPICE project root is the working directory. Operational chunks are not executed when building the vignette because they require the project data. Standalone chunks explicitly marked
eval=TRUEare exceptions.
Step 02 prepares questionnaire data and auxiliary variables; Step 03 checks the prepared data against the canonical routing DAG. A missing response may be valid for an inactive question and invalid for an active question: the diagnosis depends on the graph structure and observed response categories.
source(file.path("scripts", "02_prepare_data.R"))
source(file.path("scripts", "03_run_routing_check.R"))03_run_routing_check.R saves
routing_check_results.rds, full_report.csv,
summary_by_record.csv, summary_by_variable.csv
and execution_time.csv in
output/routing-check/. Use the detailed report to identify
the variables involved and the summaries to investigate systematic
metadata errors.
06_validate_violation_localization.R compares localized
violations with a reference report when one is available in the
configuration. Comparing results with known truth is distinct from
simply counting detected errors.
Before attributing a violation to a record, inspect the item mapping and external sources used by auxiliary variables: an inconsistent rule can produce many apparent errors.
Retain the original questionnaire data. Preparation may replace OR/XOR members with canonical nodes and convert text columns into presence indicators. Matching the column names to the DAG is necessary, but does not verify that identifier and code semantics have been preserved. See Building the routing file for these conventions.
A ground-truth report is usable only when it refers to the actual records and violations in the analysed dataset. A matching key-column name is not enough. Do not associate synthetic violation ground truth with the real questionnaire data. Without a consistent reference, report localization results without supervised accuracy metrics.
routing_check() returns full_report,
summary_by_rec and summary_by_var. The full
report contains one row per reported violation, including the record
key, varname_label, routevar_label,
errcode and message. When logical edits are
requested, violation_source distinguishes ROUTING from
LOGICAL_EDIT. This column is not added in routing-only mode.
The record summary groups by identifier and message. Therefore its
row count is not necessarily the number of inconsistent records. Count
distinct keys in full_report instead. Consistent records
are absent from these violation summaries. See the overview’s standalone
example for a complete call.
The current checker requires a mapping CSV even when no recoding is
needed; a header-only file with
varname,item_route,item_dataset is sufficient. Numeric IDs
must remain unique and unchanged throughout preparation.