Packages
hl7v2
3.2.0
3.10.1
3.9.0
3.8.0
3.7.0
3.6.0
3.5.0
3.4.0
3.3.6
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.0
3.1.1
3.1.0
3.0.2
3.0.1
3.0.0
2.11.0
2.10.0
2.9.1
2.9.0
2.8.2
2.8.1
2.8.0
2.7.1
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.6.0
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.1.0
Pure Elixir HL7 v2.x toolkit — schema-driven parsing, typed segments, message builder, MLLP transport
Current section
Files
Jump to
Current section
Files
lib/hl7v2/segment/zxx.ex
defmodule HL7v2.Segment.ZXX do
@moduledoc """
Generic Z-Segment (ZXX) — HL7v2 v2.5.1.
Handles any Z-segment (ZPD, ZPI, ZDX, etc.) by preserving all fields as raw
values. Z-segments are site-defined extensions — their structure is unknown to
the standard, so we store them losslessly.
"""
@behaviour HL7v2.Segment
defstruct [:segment_id, :raw_fields]
@type t :: %__MODULE__{
segment_id: binary(),
raw_fields: list()
}
@impl HL7v2.Segment
def fields, do: []
@doc """
Returns the segment identifier for a specific ZXX instance.
"""
@spec segment_name(t()) :: binary()
def segment_name(%__MODULE__{segment_id: id}), do: id
@impl HL7v2.Segment
@spec segment_id() :: binary()
def segment_id, do: "ZXX"
@doc """
Parses a Z-segment, preserving all fields as raw values.
The `segment_name` is stored so we can re-encode with the correct identifier.
"""
@impl HL7v2.Segment
@spec parse(list(), HL7v2.Separator.t()) :: t()
def parse(raw_fields, _separators \\ HL7v2.Separator.default()) do
%__MODULE__{
segment_id: "ZXX",
raw_fields: raw_fields
}
end
@doc """
Creates a ZXX from a specific Z-segment name and raw field list.
"""
@spec new(binary(), list()) :: t()
def new(segment_name, raw_fields) when is_binary(segment_name) do
%__MODULE__{
segment_id: segment_name,
raw_fields: raw_fields
}
end
@impl HL7v2.Segment
@spec encode(t()) :: list()
def encode(%__MODULE__{raw_fields: raw_fields}) do
raw_fields || []
end
end