Current section

Files

Jump to
hl7v2 lib hl7v2 type ma.ex
Raw

lib/hl7v2/type/ma.ex

defmodule HL7v2.Type.MA do
@moduledoc """
Multiplexed Array (MA) -- HL7v2 composite data type.
Contains a variable number of numeric (NM) sample values from multiple
waveform channels. Used in OBX for waveform data transmission.
Variable components (4+ per HL7 spec):
1. Sample Y From Channel 1 (NM)
2. Sample Y From Channel 2 (NM)
3. Sample Y From Channel 3 (NM)
4. Sample Y From Channel 4 (NM)
... additional channels as needed
"""
@behaviour HL7v2.Type
alias HL7v2.Type
defstruct values: []
@type t :: %__MODULE__{
values: [binary()]
}
@doc """
Parses an MA from a list of components.
All components are stored as a list of string values.
## Examples
iex> HL7v2.Type.MA.parse(["1.2", "3.4", "5.6"])
%HL7v2.Type.MA{values: ["1.2", "3.4", "5.6"]}
iex> HL7v2.Type.MA.parse(["100"])
%HL7v2.Type.MA{values: ["100"]}
iex> HL7v2.Type.MA.parse([])
%HL7v2.Type.MA{}
"""
@spec parse(list()) :: t()
def parse(components) when is_list(components) do
vals =
components
|> Enum.map(&Type.get_component([&1], 0))
|> Enum.reject(&is_nil/1)
%__MODULE__{values: vals}
end
@doc """
Encodes an MA to a list of component strings.
## Examples
iex> HL7v2.Type.MA.encode(%HL7v2.Type.MA{values: ["1.2", "3.4", "5.6"]})
["1.2", "3.4", "5.6"]
iex> HL7v2.Type.MA.encode(%HL7v2.Type.MA{})
[]
iex> HL7v2.Type.MA.encode(nil)
[]
"""
@spec encode(t() | nil) :: list()
def encode(nil), do: []
def encode(%__MODULE__{values: []}), do: []
def encode(%__MODULE__{values: vals}), do: vals
end