# 0001. Records, not XML - **Status:** Accepted - **Date:** 2026-09-18 (practised since the first release; written down today) - **Deciders:** maintainer ## Context `parse_mt101` could have written `pain.001` XML directly, which is what most MT-to-MX converters do. It returns flat records instead and leaves generation and validation to the core. ## Options considered 1. Emit XML from the loader. One package does everything; but the mapping and the output both have to be trusted, and every fix to the core's XML would need a matching fix here. 2. Emit the core's flat records. The core proves them through its JSON Schema, the rail rulebook and the official XSD, the same three checks every other input gets; the loader is only a mapping. ## Decision Option 2. Conversion without validation is how malformed files reach banks; a loader that only maps keeps the proof where it already exists. ## Consequences The loader has no XML code and no schema of its own; its correctness test is that a realistic multi-transaction message maps to records that pass `SchemaValidator("pain.001.001.09")` with zero errors. A new message edition needs no change here.