HL7v2.Segment behaviour (HL7v2 v3.10.1)

Copy Markdown View Source

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},
      ...
    ]
end

Field Definitions

Each field is a tuple {sequence, name, type, optionality, max_reps}:

  • sequence — 1-based field position per HL7 spec
  • name — atom used as struct key
  • type — type module (e.g. HL7v2.Type.ST) or :raw for pass-through
  • optionality:r (required), :o (optional), :c (conditional), :b (backwards-compat/withdrawn)
  • max_reps1 for non-repeating, :unbounded or integer for repeating

Summary

Types

field_def()

@type field_def() ::
  {pos_integer(), atom(), module() | :raw, optionality(), max_reps()}

max_reps()

@type max_reps() :: pos_integer() | :unbounded

optionality()

@type optionality() :: :r | :o | :c | :b

Callbacks

encode(struct)

@callback encode(struct()) :: list()

fields()

@callback fields() :: [field_def()]

parse(list, t)

@callback parse(list(), HL7v2.Separator.t()) :: struct()

segment_id()

@callback segment_id() :: binary()