Packages
hl7v2
2.7.0
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/si.ex
defmodule HL7v2.Type.SI do
@moduledoc """
Sequence ID (SI) -- HL7v2 primitive data type.
Non-negative integer, range 0-9999. Used as sequential counter
within repeating structures (e.g., Set ID fields).
"""
@behaviour HL7v2.Type
@doc """
Parses a sequence ID string into an integer.
Returns `nil` for empty/nil input. Only valid non-negative integers
are accepted (range 0-9999).
## Examples
iex> HL7v2.Type.SI.parse("1")
1
iex> HL7v2.Type.SI.parse("0")
0
iex> HL7v2.Type.SI.parse("9999")
9999
iex> HL7v2.Type.SI.parse("")
nil
iex> HL7v2.Type.SI.parse(nil)
nil
"""
@spec parse(binary() | nil) :: non_neg_integer() | nil
def parse(nil), do: nil
def parse(""), do: nil
def parse(value) when is_binary(value) do
case Integer.parse(String.trim(value)) do
{n, ""} when n >= 0 and n <= 9999 -> n
# Preserve invalid value as raw string for lossless round-trip
_ -> value
end
end
@doc """
Encodes a sequence ID integer to a string.
## Examples
iex> HL7v2.Type.SI.encode(1)
"1"
iex> HL7v2.Type.SI.encode(nil)
""
"""
@spec encode(non_neg_integer() | binary() | nil) :: binary()
def encode(nil), do: ""
def encode(value) when is_integer(value) and value >= 0, do: Integer.to_string(value)
def encode(value) when is_binary(value), do: value
end