Packages
hl7v2
2.4.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/mix/tasks/hl7v2.coverage.ex
defmodule Mix.Tasks.Hl7v2.Coverage do
@moduledoc """
Prints HL7 v2.5.1 coverage report for the hl7v2 library.
## Usage
mix hl7v2.coverage
mix hl7v2.coverage --detail # include per-segment field completeness
"""
use Mix.Task
@shortdoc "Print HL7 v2.5.1 standards coverage report"
@impl Mix.Task
def run(args) do
summary = HL7v2.Standard.Coverage.coverage_summary()
fully = HL7v2.Standard.Coverage.fully_typed_segments()
partial = HL7v2.Standard.Coverage.partially_typed_segments()
Mix.shell().info("""
HL7v2 Library — v2.5.1 Coverage Report
=======================================
Segments: #{summary.typed_segment_count} / #{summary.total_segment_count} standard (#{summary.segment_coverage_pct}%)
#{length(fully)} fully typed, #{length(partial)} with raw holes
Types: #{summary.typed_type_count} / #{summary.total_type_count} standard (#{summary.type_coverage_pct}%)
Fields: #{summary.total_typed_fields} declared across typed segments
Raw holes: #{summary.raw_hole_count}
""")
if "--detail" in args do
Mix.shell().info(" Per-Segment Field Completeness:")
Mix.shell().info(
" #{String.pad_trailing("Segment", 8)} #{String.pad_trailing("Typed", 8)} #{String.pad_trailing("Total", 8)} Complete"
)
Mix.shell().info(" #{String.duplicate("-", 40)}")
for {seg, typed, total, pct} <- HL7v2.Standard.Coverage.segment_completeness() do
marker = if pct == 100.0, do: "", else: " *"
Mix.shell().info(
" #{String.pad_trailing(seg, 8)} #{String.pad_trailing("#{typed}", 8)} #{String.pad_trailing("#{total}", 8)} #{pct}%#{marker}"
)
end
Mix.shell().info("")
end
if summary.raw_hole_count > 0 and "--detail" not in args do
Mix.shell().info(" Run with --detail for per-segment field completeness")
Mix.shell().info("")
end
Mix.shell().info(" Fully Typed: #{Enum.join(fully, ", ")}")
if length(partial) > 0 do
Mix.shell().info(" Partial (*): #{Enum.join(partial, ", ")}")
end
Mix.shell().info("")
end
end