Base behaviour and helpers for typed HL7v2 segments.
Provides a __using__ macro that generates struct, parse/2, and encode/1
from a declarative field definition list — zero boilerplate per segment.
Defining a Segment
defmodule HL7v2.Segment.MSA do
use HL7v2.Segment,
id: "MSA",
fields: [
{1, :acknowledgment_code, HL7v2.Type.ID, :r, 1},
{2, :message_control_id, HL7v2.Type.ST, :r, 1},
{3, :text_message, HL7v2.Type.ST, :o, 1},
...
]
endField Definitions
Each field is a tuple {sequence, name, type, optionality, max_reps}:
sequence— 1-based field position per HL7 specname— atom used as struct keytype— type module (e.g.HL7v2.Type.ST) or:rawfor pass-throughoptionality—:r(required),:o(optional),:c(conditional),:b(backwards-compat/withdrawn)max_reps—1for non-repeating,:unboundedor integer for repeating
Summary
Types
@type field_def() :: {pos_integer(), atom(), module() | :raw, optionality(), max_reps()}
@type max_reps() :: pos_integer() | :unbounded
@type optionality() :: :r | :o | :c | :b