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

Structured Numeric (SN) -- HL7v2 composite data type.

Used for numeric values that include comparators, ranges, ratios, or
other structured formats. Common in OBX-5 when value_type is "SN".

4 components:
1. Comparator (ST) -- e.g., ">", "<", ">=", "<="
2. Num1 (NM) -- first numeric value
3. Separator/Suffix (ST) -- e.g., "-" (range), "+" (sum), "/" (ratio), ":" (titer)
4. Num2 (NM) -- second numeric value

Examples: ">100", "100-200", "1:256", ">=5.0"

# `t`

```elixir
@type t() :: %HL7v2.Type.SN{
  comparator: binary() | nil,
  num1: HL7v2.Type.NM.t() | nil,
  num2: HL7v2.Type.NM.t() | nil,
  separator_suffix: binary() | nil
}
```

# `encode`

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

Encodes an SN to a list of component strings.

## Examples

    iex> HL7v2.Type.SN.encode(%HL7v2.Type.SN{comparator: ">", num1: %HL7v2.Type.NM{value: "100", original: "100"}})
    [">", "100"]

    iex> HL7v2.Type.SN.encode(%HL7v2.Type.SN{num1: %HL7v2.Type.NM{value: "100", original: "100"}, separator_suffix: "-", num2: %HL7v2.Type.NM{value: "200", original: "200"}})
    ["", "100", "-", "200"]

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

# `parse`

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

Parses an SN from a list of components.

## Examples

    iex> HL7v2.Type.SN.parse([">", "100"])
    %HL7v2.Type.SN{comparator: ">", num1: %HL7v2.Type.NM{value: "100", original: "100"}}

    iex> HL7v2.Type.SN.parse(["", "100", "-", "200"])
    %HL7v2.Type.SN{num1: %HL7v2.Type.NM{value: "100", original: "100"}, separator_suffix: "-", num2: %HL7v2.Type.NM{value: "200", original: "200"}}

    iex> HL7v2.Type.SN.parse(["", "1", ":", "256"])
    %HL7v2.Type.SN{num1: %HL7v2.Type.NM{value: "1", original: "1"}, separator_suffix: ":", num2: %HL7v2.Type.NM{value: "256", original: "256"}}

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

---

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