Skip to content

Commit

Permalink
Merge pull request #8 from rimiti/project-reorganized
Browse files Browse the repository at this point in the history
Project structure reorganized
  • Loading branch information
rimiti committed Feb 15, 2019
2 parents b4bf0e0 + d8a9a7c commit 97a48af
Show file tree
Hide file tree
Showing 28 changed files with 4,562 additions and 10,044 deletions.
10 changes: 9 additions & 1 deletion .babelrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
{
"presets": ["es2015"]
"presets": [
[
"@babel/preset-env", {
"targets": {
"node": "current"
}
}
]
]
}
24 changes: 6 additions & 18 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,9 @@
language: node_js
node_js:
- 8
- 6
env:
- FRESH_DEPS=false
- FRESH_DEPS=true
matrix:
exclude:
- node_js: 6
env: FRESH_DEPS=true
cache:
directories:
- $HOME/.npm
- node
- lts/*
before_install:
- npm install --global npm@^5.3.0
- npm --version
- if [[ ${FRESH_DEPS} == "true" ]]; then rm package-lock.json; fi
install:
- if [[ ${FRESH_DEPS} == "true" ]]; then npm install --prefer-online; else npm install --prefer-offline; fi
after_success: ./node_modules/.bin/nyc report --reporter=text-lcov | ./node_modules/.bin/coveralls
- yarn global add codecov
script:
- yarn test
after_success: codecov
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# hl7-object-parser

[![Build Status](https://travis-ci.org/rimiti/hl7-object-parser.svg?branch=master)](https://travis-ci.org/rimiti/hl7-object-parser) [![Coverage Status](https://coveralls.io/repos/github/rimiti/hl7-object-parser/badge.svg?branch=master)](https://coveralls.io/github/rimiti/hl7-object-parser?branch=master) [![Issue Count](https://codeclimate.com/github/rimiti/hl7-object-parser/badges/issue_count.svg)](https://codeclimate.com/github/rimiti/hl7-object-parser) [![Dependency Status](https://david-dm.org/rimiti/hl7-object-parser/status.svg)](https://david-dm.org/rimiti/hl7-object-parser) [![Dev Dependency Status](https://david-dm.org/rimiti/hl7-object-parser/dev-status.svg)](https://david-dm.org/rimiti/hl7-object-parser?type=dev) [![NPM version](https://badge.fury.io/js/%40rimiti%2Fhl7-object-parser.svg)](https://badge.fury.io/js/%40rimiti%2Fhl7-object-parser) [![Greenkeeper badge](https://badges.greenkeeper.io/rimiti/hl7-object-parser.svg)](https://greenkeeper.io/)
[![Build Status](https://travis-ci.org/rimiti/hl7-object-parser.svg?branch=master)](https://travis-ci.org/rimiti/hl7-object-parser) [![codecov](https://codecov.io/gh/rimiti/hl7-object-parser/branch/master/graph/badge.svg)](https://codecov.io/gh/rimiti/hl7-object-parser) [![Issue Count](https://codeclimate.com/github/rimiti/hl7-object-parser/badges/issue_count.svg)](https://codeclimate.com/github/rimiti/hl7-object-parser) [![Dependency Status](https://david-dm.org/rimiti/hl7-object-parser/status.svg)](https://david-dm.org/rimiti/hl7-object-parser) [![NPM version](https://badge.fury.io/js/%40rimiti%2Fhl7-object-parser.svg)](https://badge.fury.io/js/%40rimiti%2Fhl7-object-parser)


Convert your HL7 message to an object.

# Install
```
$ npm install @rimiti/hl7-object-parser --save
$ yarn add @rimiti/hl7-object-parser
```


Expand Down Expand Up @@ -162,7 +162,7 @@ Output:
## Tests
```js
// Run tests
npm run test
yarn test
```

## Related packages
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
91 changes: 91 additions & 0 deletions __tests__/adt/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import {decode} from '../../src/lib/parser'
import a04Mapping from './config/a04.json'
import a08Mapping from './config/a08.json'
import a40Mapping from './config/a40.json'

it('A04 - Patient registration', () => {
const a04 = `MSH|^~\\&|mllp_http_proxy|proxy00-prodaz|mllp_http_proxypartenaire|proxy00-prodpartenaire|20160923155836||ADT^A04|154779|P|2.5.1|||||FRA|UTF-8|\rEVN|ADT^A04|20160923155836|\rPID|||123456^^^ODS^^PI||DO BAIRRO^Dimitri^^^^^L||19920506|M|Nom usuel||Avenue des Champs-Élysées^^Paris^^75000^^^^^||0100000000^^^dimitri.dobairro@dimsolution.com^^^^~0200000000^^^^^^^|\rPV1||U|`;
const obj = decode(a04, a04Mapping);
expect(obj.msh.message_datetime).toEqual('20160923155836');
expect(obj.msh.message_type).toEqual('ADT');
expect(obj.msh.message_type_ref).toEqual('A04');
expect(obj.msh.message_control_id).toEqual('154779');
expect(obj.msh.principal_language_of_message).toEqual('FRA');
expect(obj.msh.character_set).toEqual('UTF-8');
expect(obj.evn.id).toEqual('20160923155836');
expect(obj.evn.message_type).toEqual('ADT');
expect(obj.evn.message_type_ref).toEqual('A04');
expect(obj.pv1.val).toEqual('U');
expect(obj.pid.id).toEqual('123456');
expect(obj.pid.origin).toEqual('ODS');
expect(obj.pid.first_name).toEqual('Dimitri');
expect(obj.pid.last_name).toEqual('DO BAIRRO');
expect(obj.pid.birthdate).toEqual('19920506');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.street_name).toEqual('Avenue des Champs-Élysées');
expect(obj.pid.city).toEqual('Paris');
expect(obj.pid.phone[0]).toEqual('0100000000');
expect(obj.pid.phone[1]).toEqual('0200000000');
expect(obj.pid.email[0]).toEqual('dimitri.dobairro@dimsolution.com');
expect(obj.pid.email[1]).toEqual('');
});

it(`A08 - Patient information update`, () => {
const a08 = `MSH|^~\\&|mllp_http_proxy|proxy00-prodaz|mllp_http_proxypartenaire|proxy00-prodpartenaire|20160923155836||ADT^A08|154779|P|2.5.1|||||FRA|UTF-8|\rEVN|ADT^A08|20160923155836|\rPID|||123456^^^ODS^^PI||DO BAIRRO^Dimitri^^^^^L||19920506|M|Nom usuel||Avenue des Champs-Élysées^^Paris^^75000^^^^^||0100000000^^^dimitri.dobairro@dimsolution.com^^^^~0200000000^^^^^^^|\rPV1||U|`;
const obj = decode(a08, a08Mapping);
expect(obj.msh.message_datetime).toEqual('20160923155836');
expect(obj.msh.message_type).toEqual('ADT');
expect(obj.msh.message_type_ref).toEqual('A08');
expect(obj.msh.message_control_id).toEqual('154779');
expect(obj.msh.principal_language_of_message).toEqual('FRA');
expect(obj.msh.character_set).toEqual('UTF-8');
expect(obj.evn.id).toEqual('20160923155836');
expect(obj.evn.message_type).toEqual('ADT');
expect(obj.evn.message_type_ref).toEqual('A08');
expect(obj.pv1.val).toEqual('U');
expect(obj.pid.id).toEqual('123456');
expect(obj.pid.origin).toEqual('ODS');
expect(obj.pid.first_name).toEqual('Dimitri');
expect(obj.pid.last_name).toEqual('DO BAIRRO');
expect(obj.pid.birthdate).toEqual('19920506');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.street_name).toEqual('Avenue des Champs-Élysées');
expect(obj.pid.city).toEqual('Paris');
expect(obj.pid.phone[0]).toEqual('0100000000');
expect(obj.pid.phone[1]).toEqual('0200000000');
expect(obj.pid.email[0]).toEqual('dimitri.dobairro@dimsolution.com');
expect(obj.pid.email[1]).toEqual('');
});

it(`A40 - Merge patient (patient identifier list)`, () => {
const a40 = `MSH|^~\\&|mllp_http_proxy|proxy00-prodaz|mllp_http_proxypartenaire|proxy00-prodpartenaire|20160923155836||ADT^A40|154779|P|2.5.1|||||FRA|UTF-8|\rEVN|ADT^A40|20160923155836|\rPID|||123456^^^ODS^^PI||DO BAIRRO^Dimitri^^^^^L||19920506|M|Nom usuel||Avenue des Champs-Élysées^^Paris^^75000^^^^^||0100000000^^^dimitri.dobairro@dimsolution.com^^^^~0200000000^^^^^^^|\rPV1||U|\rMRG|21448557^^^DimSolution^^PI`;
const obj = decode(a40, a40Mapping);
expect(obj.msh.message_datetime).toEqual('20160923155836');
expect(obj.msh.message_type).toEqual('ADT');
expect(obj.msh.message_type_ref).toEqual('A40');
expect(obj.msh.message_control_id).toEqual('154779');
expect(obj.msh.principal_language_of_message).toEqual('FRA');
expect(obj.msh.character_set).toEqual('UTF-8');
expect(obj.evn.id).toEqual('20160923155836');
expect(obj.evn.message_type).toEqual('ADT');
expect(obj.evn.message_type_ref).toEqual('A40');
expect(obj.pv1.val).toEqual('U');
expect(obj.pid.id).toEqual('123456');
expect(obj.pid.origin).toEqual('ODS');
expect(obj.pid.first_name).toEqual('Dimitri');
expect(obj.pid.last_name).toEqual('DO BAIRRO');
expect(obj.pid.birthdate).toEqual('19920506');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.street_name).toEqual('Avenue des Champs-Élysées');
expect(obj.pid.city).toEqual('Paris');
expect(obj.pid.phone[0]).toEqual('0100000000');
expect(obj.pid.phone[1]).toEqual('0200000000');
expect(obj.pid.email[0]).toEqual('dimitri.dobairro@dimsolution.com');
expect(obj.pid.email[1]).toEqual('');
expect(obj.mrg.id).toEqual('21448557');
expect(obj.mrg.origin).toEqual('DimSolution');
expect(obj.mrg.opt).toEqual('PI');
});
File renamed without changes.
File renamed without changes.
45 changes: 45 additions & 0 deletions __tests__/class/decoder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import {decode} from '../../src/lib/parser'
import s26MappingWrongFormat from './config/wrong-format.json'
import s26FieldMissing from './config/field-missing.json'

it(`Encoder - Wrong format`, () => {
const s26 = `MSH|^~\\&|mllp_http_proxy|proxy00-prodaz|mllp_http_proxypartenaire|proxy00-prodpartenaire|20161231110000||SIU^S26|256660|P|2.5.1|||||FRA|UTF-8|\rSCH||49849903800^DimSolution||||100|||||^^30^20161231110000|||||10101041431^KAYSSIEH^BASSEL||||ODS|||||Booked|\rPID|||123456^^^ODS^^PI||DO BAIRRO^Dimitri^^^^^L||19920506|M|Nom usuel||Avenue des Champs-Élysées^^Paris^^75000^^^^^||0100000000^^^dimitri.dobairro@dimsolution.com^^^^~0200000000^^^^^^^|\rRGS|1\rAIG|1|||10101041431@750057689\rNTE|||My comment`;
expect(() => decode(s26, s26MappingWrongFormat)).toThrowError('Unknow format: hl7-3');
});

it(`Encoder - Field attribute missing`, () => {
const s26 = `MSH|^~\\&|mllp_http_proxy|proxy00-prodaz|mllp_http_proxypartenaire|proxy00-prodpartenaire|20161231110000||SIU^S26|256660|P|2.5.1|||||FRA|UTF-8|\rSCH||49849903800^DimSolution||||100|||||^^30^20161231110000|||||10101041431^KAYSSIEH^BASSEL||||ODS|||||Booked|\rPID|||123456^^^ODS^^PI||DO BAIRRO^Dimitri^^^^^L||19920506|M|Nom usuel||Avenue des Champs-Élysées^^Paris^^75000^^^^^||0100000000^^^dimitri.dobairro@dimsolution.com^^^^~0200000000^^^^^^^|\rRGS|1\rAIG|1|||10101041431@750057689\rNTE|||My comment`;
const obj = decode(s26, s26FieldMissing);
expect(obj.msh.message_datetime).toEqual('20161231110000');
expect(obj.msh.message_type).toEqual('SIU');
expect(obj.msh.message_type_ref).toEqual('S26');
expect(obj.msh.message_control_id).toEqual('256660');
expect(obj.msh.principal_language_of_message).toEqual('FRA');
expect(obj.msh.character_set).toEqual('UTF-8');
expect(obj.pid.id).toEqual('123456');
expect(obj.pid.origin).toEqual('ODS');
expect(obj.pid.first_name).toEqual('Dimitri');
expect(obj.pid.last_name).toEqual('DO BAIRRO');
expect(obj.pid.birthdate).toEqual('19920506');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.street_name).toEqual('Avenue des Champs-Élysées');
expect(obj.pid.city).toEqual('Paris');
expect(obj.pid.phone[0]).toEqual('0100000000');
expect(obj.pid.phone[1]).toEqual('0200000000');
expect(obj.pid.email[0]).toEqual('dimitri.dobairro@dimsolution.com');
expect(obj.pid.email[1]).toEqual('');
expect(obj.sch.id).toEqual('49849903800');
expect(obj.sch.origin).toEqual('DimSolution');
expect(obj.sch.length).toEqual('100');
expect(obj.sch.minutes).toEqual('30');
expect(obj.sch.datetime).toEqual('10101041431');
expect(obj.sch.last_name).toEqual('KAYSSIEH');
expect(obj.sch.first_name).toEqual('BASSEL');
expect(obj.sch.source).toEqual('ODS');
expect(obj.sch.status).toEqual('Booked');
expect(obj.rgs.id).toEqual('1');
expect(obj.aig.id).toEqual('1');
expect(obj.aig.rpps_finess).toEqual('10101041431@750057689');
expect(obj.nte.comment).toEqual('My comment');
});
File renamed without changes.
38 changes: 38 additions & 0 deletions __tests__/oru/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import {decode} from '../../src/lib/parser'
import r01Mapping from './config/r01.json'

it(`ORU - Notification of new observation result`, () => {
const r01 = `MSH|^~\&|LCS|LCA|LIS|TEST9999|199807311532||ORU^R01|3629|P|2.2\rPID|2|2161348462|20809880170|1614614|20809880170^TESTPAT||19760924|M|||^^^^\r00000-0000|||||||86427531^^^03|SSN# HERE\rORC|NW|8642753100012^LIS|20809880170^LCS||||||19980727000000|||HAVILAND\rOBR|1|8642753100012^LIS|20809880170^LCS|008342^UPPER RESPIRATORY\rCULTURE^L|||19980727175800||||||SS#634748641 CH14885 SRC:THROA\rSRC:PENI|19980727000000||||||20809880170||19980730041800||BN|F\rOBX|1|ST|008342^UPPER RESPIRATORY CULTURE^L||FINALREPORT|||||N|F||| 19980729160500|BN\rORC|NW|8642753100012^LIS|20809880170^LCS||||||19980727000000|||HAVILAND\rOBR|2|8642753100012^LIS|20809880170^LCS|997602^.^L|||19980727175800||||G|||\r19980727000000||||||20809880170||19980730041800|||F|997602|||008342\rOBX|2|CE|997231^RESULT 1^L||M415|||||N|F|||19980729160500|BN\rNTE|1|L|MORAXELLA (BRANHAMELLA) CATARRHALIS\rNTE|2|L| HEAVY GROWTH\rNTE|3|L| BETA LACTAMASE POSITIVE\rOBX|3|CE|997232^RESULT 2^L||MR105|||||N|F|||19980729160500|BN\rNTE|1|L|ROUTINE RESPIRATORY FLORA`;
const obj = decode(r01, r01Mapping);
expect(obj.msh.message_datetime).toEqual('199807311532');
expect(obj.msh.message_type).toEqual('ORU');
expect(obj.msh.message_type_ref).toEqual('R01');
expect(obj.msh.message_control_id).toEqual('3629');
expect(obj.pid.id).toEqual('20809880170');
expect(obj.pid.origin).toEqual('');
expect(obj.pid.first_name).toEqual('TESTPAT');
expect(obj.pid.last_name).toEqual('20809880170');
expect(obj.pid.birthdate).toEqual('19760924');
expect(obj.pid.gender).toEqual('M');
expect(obj.pid.street_name).toEqual('');
expect(obj.pid.city).toEqual('');
expect(obj.pid.zip_code).toEqual('');
expect(obj.pid.phone).toEqual('');
expect(obj.pid.email).toEqual('');
expect(obj.nte.length).toEqual(4);
expect(obj.nte[0].id).toEqual('1');
expect(obj.nte[0].source).toEqual('L');
expect(obj.nte[0].comment).toEqual('MORAXELLA (BRANHAMELLA) CATARRHALIS');
expect(obj.nte[1].id).toEqual('2');
expect(obj.nte[1].source).toEqual('L');
expect(obj.nte[1].comment).toEqual(' HEAVY GROWTH');
expect(obj.nte[2].id).toEqual('3');
expect(obj.nte[2].source).toEqual('L');
expect(obj.nte[2].comment).toEqual(' BETA LACTAMASE POSITIVE');
expect(obj.nte[3].id).toEqual('1');
expect(obj.nte[3].source).toEqual('L');
expect(obj.nte[3].comment).toEqual('ROUTINE RESPIRATORY FLORA');
expect(obj.orc.length).toEqual(2);
expect(obj.obr.length).toEqual(2);
expect(obj.obx.length).toEqual(3);
});
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 97a48af

Please sign in to comment.