Current section

Files

Jump to
hl7v2 lib hl7v2 type cf.ex
Raw

lib/hl7v2/type/cf.ex

defmodule HL7v2.Type.CF do
@moduledoc """
Coded Element with Formatted Values (CF) -- HL7v2 composite data type.
Same structure as CE but components 2 and 5 are FT (Formatted Text) instead of ST.
6 components:
1. Identifier (ST)
2. Formatted Text (FT)
3. Name of Coding System (ID) -- Table 0396
4. Alternate Identifier (ST)
5. Alternate Formatted Text (FT)
6. Name of Alternate Coding System (ID) -- Table 0396
"""
@behaviour HL7v2.Type
alias HL7v2.Type
defstruct [
:identifier,
:formatted_text,
:name_of_coding_system,
:alternate_identifier,
:alternate_formatted_text,
:name_of_alternate_coding_system
]
@type t :: %__MODULE__{
identifier: binary() | nil,
formatted_text: binary() | nil,
name_of_coding_system: binary() | nil,
alternate_identifier: binary() | nil,
alternate_formatted_text: binary() | nil,
name_of_alternate_coding_system: binary() | nil
}
@doc """
Parses a CF from a list of components.
## Examples
iex> HL7v2.Type.CF.parse(["I9", "Diagnosis text", "I9C"])
%HL7v2.Type.CF{identifier: "I9", formatted_text: "Diagnosis text", name_of_coding_system: "I9C"}
iex> HL7v2.Type.CF.parse([])
%HL7v2.Type.CF{}
"""
@spec parse(list()) :: t()
def parse(components) when is_list(components) do
%__MODULE__{
identifier: Type.get_component(components, 0),
formatted_text: Type.get_component(components, 1),
name_of_coding_system: Type.get_component(components, 2),
alternate_identifier: Type.get_component(components, 3),
alternate_formatted_text: Type.get_component(components, 4),
name_of_alternate_coding_system: Type.get_component(components, 5)
}
end
@doc """
Encodes a CF to a list of component strings.
## Examples
iex> HL7v2.Type.CF.encode(%HL7v2.Type.CF{identifier: "I9", formatted_text: "Diagnosis text", name_of_coding_system: "I9C"})
["I9", "Diagnosis text", "I9C"]
iex> HL7v2.Type.CF.encode(nil)
[]
"""
@spec encode(t() | nil) :: list()
def encode(nil), do: []
def encode(%__MODULE__{} = cf) do
[
cf.identifier || "",
cf.formatted_text || "",
cf.name_of_coding_system || "",
cf.alternate_identifier || "",
cf.alternate_formatted_text || "",
cf.name_of_alternate_coding_system || ""
]
|> Type.trim_trailing()
end
end