# `HL7v2.Type.XPN`
[🔗](https://github.com/Balneario-de-Cofrentes/hl7v2/blob/v3.10.1/lib/hl7v2/type/xpn.ex#L1)

Extended Person Name (XPN) -- HL7v2 composite data type.

Used for patient names, provider names, next of kin, etc.

14 components:
1. Family Name (FN) -- sub-components delimited by `&`
2. Given Name (ST)
3. Second and Further Given Names or Initials (ST)
4. Suffix (ST) -- e.g., JR, III
5. Prefix (ST) -- e.g., DR
6. Degree (IS) -- deprecated, Table 0360
7. Name Type Code (ID) -- Table 0200: L=Legal, D=Display, A=Alias, etc.
8. Name Representation Code (ID) -- Table 0465: A=Alphabetic, I=Ideographic, P=Phonetic
9. Name Context (CE) -- sub-components delimited by `&`, Table 0448
10. Name Validity Range (DR) -- deprecated, sub-components delimited by `&`
11. Name Assembly Order (ID) -- Table 0444: G=Given-first, F=Family-first
12. Effective Date (TS) -- sub-components delimited by `&`
13. Expiration Date (TS) -- sub-components delimited by `&`
14. Professional Suffix (ST)

# `t`

```elixir
@type t() :: %HL7v2.Type.XPN{
  degree: binary() | nil,
  effective_date: HL7v2.Type.TS.t() | nil,
  expiration_date: HL7v2.Type.TS.t() | nil,
  family_name: HL7v2.Type.FN.t() | nil,
  given_name: binary() | nil,
  name_assembly_order: binary() | nil,
  name_context: HL7v2.Type.CE.t() | nil,
  name_representation_code: binary() | nil,
  name_type_code: binary() | nil,
  name_validity_range: HL7v2.Type.DR.t() | nil,
  prefix: binary() | nil,
  professional_suffix: binary() | nil,
  second_name: binary() | nil,
  suffix: binary() | nil
}
```

# `encode`

```elixir
@spec encode(t() | nil) :: list()
```

Encodes an XPN to a list of component strings.

## Examples

    iex> HL7v2.Type.XPN.encode(%HL7v2.Type.XPN{family_name: %HL7v2.Type.FN{surname: "Smith"}, given_name: "John"})
    ["Smith", "John"]

    iex> HL7v2.Type.XPN.encode(nil)
    []

# `parse`

```elixir
@spec parse(list()) :: t()
```

Parses an XPN from a list of components.

Component 1 (Family Name) contains sub-components delimited by `&`.

## Examples

    iex> HL7v2.Type.XPN.parse(["Smith", "John", "Q", "JR", "DR", "", "L"])
    %HL7v2.Type.XPN{
      family_name: %HL7v2.Type.FN{surname: "Smith"},
      given_name: "John",
      second_name: "Q",
      suffix: "JR",
      prefix: "DR",
      name_type_code: "L"
    }

    iex> HL7v2.Type.XPN.parse(["Smith&Van", "John"])
    %HL7v2.Type.XPN{
      family_name: %HL7v2.Type.FN{surname: "Smith", own_surname_prefix: "Van"},
      given_name: "John"
    }

    iex> HL7v2.Type.XPN.parse([])
    %HL7v2.Type.XPN{}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
