Iris
A three-interface toolkit that converts apprenticeship learner data from CSV into ESFA-compliant ILR XML, with semantic XSD validation.
About
Apprenticeship funding submissions demand a strict XML format, and learner data rarely arrives in it. A single TypeScript core handles the conversion and drives three interfaces from one codebase: an OpenTUI terminal UI, direct CLI commands, and a Tauri 2 native desktop app written in Rust. Validation goes beyond structural XML checks by parsing the real ESFA XSD into a registry that resolves types and enforces cardinality and constraints, while header-tolerant CSV parsing and cross-submission consistency checks guard against column reordering and data drift. Close to 1:1 source-to-test mapping with full round-trip coverage of the CSV-to-XML cycle. Built during my time as a staff developer at Founders and Coders, where it processed real apprenticeship data in production.
Highlights
- Single TypeScript core drives three interfaces: OpenTUI terminal UI, direct CLI commands, and a Tauri 2 (Rust) native desktop app.
- Schema-driven validation: parses the real ESFA XSD to build a validation registry with type resolution, cardinality and constraint checking. Semantic validation beyond structural XML.
- Header-tolerant CSV parsing handles column reordering; cross-submission consistency checks guard against data drift between submissions.
- Close to 1:1 source-to-test mapping with Vitest and Bun test; round-trip tests cover the full CSV → XML → re-parse cycle.
- Documented like a product: full ADRs, technical specs, dev-log work records, and per-workflow roadmaps.
By the numbers
- Commits
- 857
- Lines added
- +143,335
- Lines removed
- −44,154
- Source files
- 30,538
