Packages
hl7v2
2.7.1
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/type/fn.ex
defmodule HL7v2.Type.FN do
@moduledoc """
Family Name (FN) -- HL7v2 sub-component composite type.
Used as component 1 of XPN (Extended Person Name). Contains 5
sub-components delimited by `&` when embedded in a composite field.
Sub-components:
1. Surname (ST) -- required
2. Own Surname Prefix (ST)
3. Own Surname (ST)
4. Surname Prefix From Partner/Spouse (ST)
5. Surname From Partner/Spouse (ST)
"""
@behaviour HL7v2.Type
alias HL7v2.Type
defstruct [
:surname,
:own_surname_prefix,
:own_surname,
:surname_prefix_from_partner,
:surname_from_partner
]
@type t :: %__MODULE__{
surname: binary() | nil,
own_surname_prefix: binary() | nil,
own_surname: binary() | nil,
surname_prefix_from_partner: binary() | nil,
surname_from_partner: binary() | nil
}
@doc """
Parses a family name from a list of sub-components.
## Examples
iex> HL7v2.Type.FN.parse(["Smith"])
%HL7v2.Type.FN{surname: "Smith"}
iex> HL7v2.Type.FN.parse(["Smith", "Van"])
%HL7v2.Type.FN{surname: "Smith", own_surname_prefix: "Van"}
iex> HL7v2.Type.FN.parse([])
%HL7v2.Type.FN{}
"""
@spec parse(list()) :: t()
def parse(components) when is_list(components) do
%__MODULE__{
surname: Type.get_component(components, 0),
own_surname_prefix: Type.get_component(components, 1),
own_surname: Type.get_component(components, 2),
surname_prefix_from_partner: Type.get_component(components, 3),
surname_from_partner: Type.get_component(components, 4)
}
end
@doc """
Encodes a family name to a list of sub-component strings.
## Examples
iex> HL7v2.Type.FN.encode(%HL7v2.Type.FN{surname: "Smith"})
["Smith"]
iex> HL7v2.Type.FN.encode(%HL7v2.Type.FN{surname: "Smith", own_surname_prefix: "Van"})
["Smith", "Van"]
iex> HL7v2.Type.FN.encode(nil)
[]
"""
@spec encode(t() | nil) :: list()
def encode(nil), do: []
def encode(%__MODULE__{} = fn_type) do
[
fn_type.surname || "",
fn_type.own_surname_prefix || "",
fn_type.own_surname || "",
fn_type.surname_prefix_from_partner || "",
fn_type.surname_from_partner || ""
]
|> Type.trim_trailing()
end
end