Packages
hl7v2
3.2.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/osp.ex
defmodule HL7v2.Type.OSP do
@moduledoc """
Occurrence Span Code and Date (OSP) -- HL7v2 composite data type.
Links a UB occurrence span code to a date range for billing segments (UB2-8).
3 components:
1. Occurrence Span Code (CNE) -- sub-components, Table 0351
2. Occurrence Span Start Date (DT) -- YYYY[MM[DD]]
3. Occurrence Span Stop Date (DT) -- YYYY[MM[DD]]
"""
@behaviour HL7v2.Type
alias HL7v2.Type
alias HL7v2.Type.{CNE, DT}
defstruct [
:occurrence_span_code,
:occurrence_span_start_date,
:occurrence_span_stop_date
]
@type t :: %__MODULE__{
occurrence_span_code: CNE.t() | nil,
occurrence_span_start_date: Date.t() | DT.t() | nil,
occurrence_span_stop_date: Date.t() | DT.t() | nil
}
@doc """
Parses an OSP from a list of components.
## Examples
iex> HL7v2.Type.OSP.parse(["70&Qualifying stay&NUBC", "20260101", "20260115"])
%HL7v2.Type.OSP{
occurrence_span_code: %HL7v2.Type.CNE{identifier: "70", text: "Qualifying stay", name_of_coding_system: "NUBC"},
occurrence_span_start_date: ~D[2026-01-01],
occurrence_span_stop_date: ~D[2026-01-15]
}
iex> HL7v2.Type.OSP.parse([])
%HL7v2.Type.OSP{}
"""
@spec parse(list()) :: t()
def parse(components) when is_list(components) do
%__MODULE__{
occurrence_span_code: Type.parse_sub(CNE, Type.get_component(components, 0)),
occurrence_span_start_date: components |> Type.get_component(1) |> DT.parse(),
occurrence_span_stop_date: components |> Type.get_component(2) |> DT.parse()
}
end
@doc """
Encodes an OSP to a list of component strings.
## Examples
iex> HL7v2.Type.OSP.encode(%HL7v2.Type.OSP{occurrence_span_code: %HL7v2.Type.CNE{identifier: "70"}, occurrence_span_start_date: ~D[2026-01-01], occurrence_span_stop_date: ~D[2026-01-15]})
["70", "20260101", "20260115"]
iex> HL7v2.Type.OSP.encode(nil)
[]
"""
@spec encode(t() | nil) :: list()
def encode(nil), do: []
def encode(%__MODULE__{} = osp) do
[
Type.encode_sub(CNE, osp.occurrence_span_code),
DT.encode(osp.occurrence_span_start_date),
DT.encode(osp.occurrence_span_stop_date)
]
|> Type.trim_trailing()
end
end