Current section

Files

Jump to
hl7v2 lib hl7v2 type cq.ex
Raw

lib/hl7v2/type/cq.ex

defmodule HL7v2.Type.CQ do
@moduledoc """
Composite Quantity with Units (CQ) -- HL7v2 composite data type.
Used for quantities with associated units.
2 components:
1. Quantity (NM)
2. Units (CE) -- sub-components delimited by `&`
"""
@behaviour HL7v2.Type
alias HL7v2.Type
alias HL7v2.Type.CE
defstruct [:quantity, :units]
@type t :: %__MODULE__{
quantity: binary() | nil,
units: CE.t() | nil
}
@doc """
Parses a CQ from a list of components.
## Examples
iex> HL7v2.Type.CQ.parse(["10", "mL&milliliter&UCUM"])
%HL7v2.Type.CQ{quantity: "10", units: %HL7v2.Type.CE{identifier: "mL", text: "milliliter", name_of_coding_system: "UCUM"}}
iex> HL7v2.Type.CQ.parse(["5"])
%HL7v2.Type.CQ{quantity: "5"}
iex> HL7v2.Type.CQ.parse([])
%HL7v2.Type.CQ{}
"""
@spec parse(list()) :: t()
def parse(components) when is_list(components) do
%__MODULE__{
quantity: Type.get_component(components, 0),
units: Type.parse_sub(CE, Type.get_component(components, 1))
}
end
@doc """
Encodes a CQ to a list of component strings.
## Examples
iex> HL7v2.Type.CQ.encode(%HL7v2.Type.CQ{quantity: "10", units: %HL7v2.Type.CE{identifier: "mL"}})
["10", "mL"]
iex> HL7v2.Type.CQ.encode(%HL7v2.Type.CQ{quantity: "5"})
["5"]
iex> HL7v2.Type.CQ.encode(nil)
[]
"""
@spec encode(t() | nil) :: list()
def encode(nil), do: []
def encode(%__MODULE__{} = cq) do
[
cq.quantity || "",
Type.encode_sub(CE, cq.units)
]
|> Type.trim_trailing()
end
end