Pipehat (|^) is a zero-dependency Clojure library for reading and writing HL7 version 2 messages encoded using vertical bar ("pipehat") encoding.
- Read, write, and round-trip HL7 v2 messages
- Minimum Lower Layer Protocol (MLLP) support (see
hello.replfor an example) - Shape read messages into maps for easier (and indexed) access to message data
(require '[pipehat.api :as hl7])
;;=> nil
(def input
(str
"MSH|^~\\&|GHH LAB|ELAB-3|GHH OE|BLDG4|200202150930||ORU^R01|CNTRL-3456|P|2.4" \return
"PID|||555-44-4444||EVERYWOMAN^EVE^E^^^^L|JONES|196203520|F|||153 FERNWOOD DR.^^STATESVILLE^OH^35292||(206)3345232|(206)752-121||||AC555444444||67-A4335^OH^20030520" \return
"OBR|1|845439^GHH OE|1045813^GHH LAB|1554-5^GLUCOSE|||200202150730||||||||555-55-5555~555-66-6666-666^PRIMARY^PATRICIA P^^^^MD^^LEVEL SEVEN HEALTHCARE, INC.|||||||||F||||||444-44-4444^HIPPOCRATES^HOWARD H^^^^MD" \return
"OBX|1|SN|1554-5^GLUCOSE^POST 12H CFST:MCNC:PT:SER/PLAS:QN||^182|mg/dl|70_105|H|||F" \return))
;;=> #'user/input
(hl7/read-string input)
;;=> [["MSH" ["|" "^~\\&" "GHH LAB" ...]]
;; ["PID" [nil nil "555-44-4444" ...]]
;; ["OBR" ["1" ["845439" "GHH OE"] ["1045813" "GHH LAB"] ...]]
;; ...]
;; Round-tripping
(assert (= input (-> input hl7/read-string hl7/write-string)))
;;=> true
;; Shaping the message into a more palatable format
(-> input hl7/read-string hl7/shape)
;;=> {"MSH" [{["MSH" 1] "|", ["MSH" 2] "^~\\&", ...}],
;; "PID" [{["PID" 3] "555-44-4444", ["PID" 5] {#, #, ...}, ...}],
;; ...}
;; Get the value of OBX.3.3 from the shaped message
(get-in *1 ["OBX" 0 ["OBX" 3] ["OBX" 3 3]])
;;=> "POST 12H CFST:MCNC:PT:SER/PLAS:QN"For more examples, see hello.repl.
See API docs.
Stable. There will be no breaking changes to the API. No new features are planned.
Everything apart from the pipehat.api namespace is internal and subject to change.