tiny-hl7
v1.0.7
Published
Incomplete, in progress, not fully spec compliant, but relatively tiny parse/serialize support for HL7 messages into a fairly simple to use JS format.
Downloads
7,241
Readme
tiny-hl7
Incomplete, in progress, not fully spec compliant, but relatively tiny parse/serialize support for HL7 messages into a fairly simple to use JS format.
It exports two main methods parse
and serialize
and a helper function getMessages
for grabbing individual messages out of a group.
Motivation
- I wanted a lib small enough to do this in a browser as a tiny part of a clientside JS app.
- I wanted the simplest possible parsed structure that's easy to consume by address.
Parse/Serialize Example
import hl7 from 'tiny-hl7'
const message = `MSH|^~\&|5.0^IBI^L|^^|DBO^IBI^L|QS4444^^|20171025213259||ACK^V01^ACK|5465156441.100178620|P|2.3.1|
MSA|AR|QS444437861000000042|Not logged in: User login failed|||207^^HL70357|
ERR|^^^207^^HL70357|
`
const parsed = hl7.parse(message)
console.log(parsed)
/*
[
{
'MSH.2': '^~\\&',
'MSH.3.1': '5.0',
'MSH.3.2': 'IBI',
'MSH.3.3': 'L',
'MSH.4.1': '',
'MSH.4.2': '',
'MSH.4.3': '',
'MSH.5.1': 'DBO',
'MSH.5.2': 'IBI',
'MSH.5.3': 'L',
'MSH.6.1': 'QS4444',
'MSH.6.2': '',
'MSH.6.3': '',
'MSH.7': '20171025213259',
'MSH.8': '',
'MSH.9.1': 'ACK',
'MSH.9.2': 'V01',
'MSH.9.3': 'ACK',
'MSH.10': '5465156441.100178620',
'MSH.11': 'P',
'MSH.12': '2.3.1',
'MSH.13': '',
},
{
'MSA.1': 'AR',
'MSA.2': 'QS444437861000000042',
'MSA.3': 'Not logged in: User login failed',
'MSA.4': '',
'MSA.5': '',
'MSA.6.1': '207',
'MSA.6.2': '',
'MSA.6.3': 'HL70357',
'MSA.7': '',
},
{
'ERR.1.1': '',
'ERR.1.2': '',
'ERR.1.3': '',
'ERR.1.4': '207',
'ERR.1.5': '',
'ERR.1.6': 'HL70357',
'ERR.2': '',
},
]
*/
const reSerialized = hl7.serialize(parsed)
console.log(reSerialized === message) // true
Simple message generation example
Here we generate an "ack" acknowledging receipt of a message by combining parse to extract values to echo back:
import hl7 from 'tiny-hl7'
import { stringify as stringifyDate } from 'hl7-date'
const generateAck = incoming => {
const messageHeader = hl7.parse(incoming)[0]
return serialize([
{
'MSH.3': messageHeader['MSH.5'],
'MSH.5': messageHeader['MSH.3'],
'MSH.7': stringifyDate(new Date(), 'minute'),
'MSH.9': 'ACK',
'MSH.10': 'ACK' + stringifyDate(new Date(), 'second'),
'MSH.11': 'P',
'MSH.12': messageHeader['MSH.12'],
},
{
'MSA.1': 'AA',
'MSA.2': messageHeader['MSH.10'],
},
])
}
Running tests
npm test
Changelog
1.0.7
- inliningdset
lib (including its license).1.0.3
- fixing regexp usage broken in safari1.0.2
- fixing dset import that was causing a bug in serialize1.0.1
- initial release