Packages
hl7v2
2.1.3
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/validation/message_rules.ex
defmodule HL7v2.Validation.MessageRules do
@moduledoc """
Message-level validation rules for HL7v2 typed messages.
Checks structural invariants that apply to the message as a whole:
first segment must be MSH, and critical MSH fields must be present.
"""
alias HL7v2.TypedMessage
@doc """
Returns a list of message-level validation errors.
Checks:
- First segment is `%HL7v2.Segment.MSH{}`
- `MSH.message_type` is present
- `MSH.message_control_id` is present
"""
@spec check(TypedMessage.t()) :: [map()]
def check(%TypedMessage{segments: segments}) do
case segments do
[%HL7v2.Segment.MSH{} = msh | _] ->
check_msh_fields(msh)
[_ | _] ->
[%{level: :error, location: "MSH", field: nil, message: "first segment must be MSH"}]
[] ->
[%{level: :error, location: "MSH", field: nil, message: "message has no segments"}]
end
end
defp check_msh_fields(msh) do
errors = []
errors =
if is_nil(msh.message_type) do
[
%{
level: :error,
location: "MSH",
field: :message_type,
message: "required field message_type is missing"
}
| errors
]
else
errors
end
errors =
if is_nil(msh.message_control_id) do
[
%{
level: :error,
location: "MSH",
field: :message_control_id,
message: "required field message_control_id is missing"
}
| errors
]
else
errors
end
Enum.reverse(errors)
end
end