Specs

This site doesn't restate the conversion rules. Each project's own spec/index.md is the normative, section-by-section specification and the single source of truth for its behavior:

Core, transports, and tooling

The umbrella hl7 crate and the two *-derive crates (hl7-2-derive, hl7-3-derive) have no spec/index.md of their own — hl7 is a thin re-export with nothing normative to state, and each derive crate's macro behavior is documented in its own README (and, for hl7-3-derive, in hl7-3's typed module) rather than as a spec.

Format conversions

The two forward specs (ER7 → XML, ER7 → JSON) are kept consistent with each other except where the target format forces a difference (see each one's own §0 for exactly where they're meant to diverge: JSON uses real arrays/null, XML follows v2.xml's element/attribute constructs). Each reverse spec documents, in its own §1.1, why it needs no HL7 v2.5 data-type dictionary at all: every element or key name its forward counterpart writes already carries its own position, so reversing the conversion is a purely structural, position-based rebuild.