# Synthetic practice datasets

All rows were invented for this course. They contain no real customer or student records. Dates are illustrative, not a live reporting period. Units and prices have no implied currency or real-world business meaning.

## study_sessions.csv
One row is one fictional practice session. `session_id` is its unique text identifier; `topic` is a short category; `minutes` and `exercises` are non-negative integer counts. Six rows, no planned defects. Use for grouping and plot exercises, not for claims about learning effectiveness.

## workshop_orders.csv
One row is an exported order line. For this teaching dataset an order ID represents exactly one line; in real systems an order can contain multiple lines and needs a different key. `date` should be ISO YYYY-MM-DD within 2000-01-01 through 2099-12-31 inclusive. `category` should be notebooks, pens, or markers after trimming and lowercasing. `units` must be a positive integer; `unit_price_cents` must be a non-negative integer amount in hundredths of a fictional currency unit.

The raw file is deliberately imperfect: 16 rows, one exact repeated row, five invalid rows and ten usable rows under this course's stated policy. Never edit the raw file to make your output pass. A repeated ID with different contents is a conflict, not an exact duplicate, and the capstone rejects every conflicting record pending review. It does not silently keep the first value.

Numeric fields accept ASCII decimal digits after outer whitespace is trimmed, including leading zeros. Decimal-point, exponent, signed and fractional spellings are rejected before numeric conversion to prevent rounding away source precision.

The exercise uses explicit rejection rather than inventing missing prices or quantities. Accepted-record totals do not describe all transactions, because rejected records remain unresolved. No currency code, tax, returns, shipping or time-zone rules are modeled here.

Structural validation precedes row-value validation: the capstone requires exactly five fields per CSV record and valid quoting. Malformed-width, blank-record or quoting errors stop the run rather than being silently reinterpreted by pandas. Preserve the source and obtain a corrected export. A width error reports the record position and original parsed fields.

## stage_checkpoint.csv
A separate five-row, full-schema synthetic fixture for developing the named capstone stages. Source labels 0/1 are an exact repeated Q01 row; label 2 conflicts after trimming its Q01 ID; label 3 has two invalid fields; label 4 is a valid notebook order. Expected audit: 5 raw = 1 duplicate + 3 rejected + 1 accepted, subtotal 1,000 cents. The smaller bridge tables are conceptual examples, not drop-in five-column capstone inputs.
