Packages
hl7v2
3.3.2
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/typed_message.ex
defmodule HL7v2.TypedMessage do
@moduledoc """
Typed HL7v2 message with parsed segment structs.
A `TypedMessage` is the result of converting a `RawMessage` through the
`HL7v2.TypedParser`. Known segments (MSH, PID, PV1, etc.) are represented as
their typed struct, Z-segments as `HL7v2.Segment.ZXX` structs, and truly
unknown segments are preserved as raw `{name, fields}` tuples.
## Escape sequences
Typed field values preserve HL7 escape sequences literally (e.g. `\\F\\`,
`\\S\\`, `\\R\\`, `\\E\\`, `\\T\\`, `\\Xhh\\`). The parser does **not**
decode them automatically because doing so would lose the distinction between
a literal delimiter and an escaped one, breaking round-trip fidelity.
To decode escape sequences in a field value, call `HL7v2.Escape.decode/2`
explicitly:
sep = msg.separators
decoded = HL7v2.Escape.decode(pid.patient_name |> hd() |> to_string(), sep)
To encode delimiter characters before setting a field, use `HL7v2.Escape.encode/2`.
"""
@type t :: %__MODULE__{
separators: HL7v2.Separator.t(),
type: {binary(), binary()} | {binary(), binary(), binary()},
segments: [struct() | {binary(), list()}]
}
defstruct [:separators, :type, :segments]
end
defimpl String.Chars, for: HL7v2.TypedMessage do
def to_string(msg) do
msg
|> HL7v2.TypedParser.to_raw()
|> HL7v2.Encoder.encode()
end
end