ruby-hl7-extensions 0.0.59 → 0.0.60
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/VERSION.yml +1 -1
- data/lib/core_ext/message.rb +25 -5
- data/lib/core_ext/segment.rb +19 -0
- data/lib/core_ext/segments/orc.rb +4 -0
- data/lib/core_ext/segments/pid.rb +14 -31
- data/lib/core_ext/segments/pv1.rb +46 -16
- data/lib/core_ext/segments/rol.rb +41 -0
- data/lib/core_ext/segments/segments.rb +2 -0
- data/ruby-hl7-extensions.gemspec +2 -2
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b91e92c7db8ae5a0a365bf7ed7a99d808dc856e9
|
4
|
+
data.tar.gz: b2ed8813fbcb261897b15d73eafb58c7c75c8178
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b88bd45f6708fcd25b0133ed93163485ba68b8b9591822c83ced77ed2d2f3f68a5487e8b270c4c4dd86755cf2535f2b3899cbb759bf93c707913c804ccb6507
|
7
|
+
data.tar.gz: 77d07bf000dede8518feea10223cc8689ef99efcdefc6e1fc9ce5baf768e8483e20e5fe6f3de6c91aed5aeeec20a09fc73018b9335530a29b859a7dae1a0fbe5
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.60
|
data/VERSION.yml
CHANGED
data/lib/core_ext/message.rb
CHANGED
@@ -11,6 +11,14 @@ module Extensions
|
|
11
11
|
module InstanceMethods
|
12
12
|
def providers
|
13
13
|
providers = []
|
14
|
+
|
15
|
+
if self[:ORC]
|
16
|
+
orcs = self[:ORC].is_a?(Array) ? self[:ORC] : [self[:ORC]]
|
17
|
+
orcs.each do |orc|
|
18
|
+
providers << {hash: orc.ordering_provider_hash, segment: orc}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
14
22
|
|
15
23
|
if self[:OBR]
|
16
24
|
obrs = self[:OBR].is_a?(Array) ? self[:OBR] : [self[:OBR]]
|
@@ -21,12 +29,20 @@ module Extensions
|
|
21
29
|
|
22
30
|
if self[:PV1]
|
23
31
|
pv1 = self[:PV1]
|
24
|
-
providers << {hash: pv1.
|
25
|
-
providers << {hash: pv1.
|
26
|
-
providers << {hash: pv1.
|
27
|
-
providers << {hash: pv1.
|
32
|
+
providers << {hash: pv1.provider_hash("admitting","AD"), segment: self[:PV1]}
|
33
|
+
providers << {hash: pv1.provider_hash("attending","AT"), segment: self[:PV1]}
|
34
|
+
providers << {hash: pv1.provider_hash("consulting","CP"), segment: self[:PV1]}
|
35
|
+
providers << {hash: pv1.provider_hash("referring","RP"), segment: self[:PV1]}
|
28
36
|
end
|
29
37
|
|
38
|
+
if self[:ROL]
|
39
|
+
roles = self[:ROL]
|
40
|
+
roles = [self[:ROL]] unless self[:ROL].is_a?Array
|
41
|
+
roles.each do |rol|
|
42
|
+
providers << {hash: rol.person_hash, segment: rol}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
30
46
|
providers
|
31
47
|
end
|
32
48
|
|
@@ -52,7 +68,7 @@ module Extensions
|
|
52
68
|
end
|
53
69
|
|
54
70
|
def patient_dob
|
55
|
-
Date.parse(hash["message"]["content"]["PID"]["
|
71
|
+
Date.parse(hash["message"]["content"]["PID"]["patientDob"]).strftime("%B %d, %Y")
|
56
72
|
end
|
57
73
|
|
58
74
|
def patient_mrn
|
@@ -89,6 +105,10 @@ module Extensions
|
|
89
105
|
to_hash
|
90
106
|
end
|
91
107
|
|
108
|
+
def segments_for(key)
|
109
|
+
self.select {|segment| segment.segment_name == key}
|
110
|
+
end
|
111
|
+
|
92
112
|
def to_hash
|
93
113
|
begin
|
94
114
|
return @hash unless @hash.blank?
|
data/lib/core_ext/segment.rb
CHANGED
@@ -32,9 +32,28 @@ module Extensions
|
|
32
32
|
def handle_element(key)
|
33
33
|
self.send(key)
|
34
34
|
end
|
35
|
+
|
36
|
+
def value_for_field(key)
|
37
|
+
index = key.split(".").first.to_i
|
38
|
+
index, subindex = key.split(".").collect {|i|i.to_i}
|
39
|
+
field = self.class.field(index)
|
40
|
+
if field
|
41
|
+
if subindex.blank?
|
42
|
+
return self.send(field[0].to_s)
|
43
|
+
else
|
44
|
+
return self.send(field[0].to_s).split(self.item_delim)[subindex-1]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
35
48
|
end
|
36
49
|
|
37
50
|
module ClassMethods
|
51
|
+
def field(index)
|
52
|
+
fields.each do |field|
|
53
|
+
return field if field[1][:idx] == index
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
38
57
|
def from_hash(type, hash)
|
39
58
|
clazz = eval("::HL7::Message::Segment::#{type}")
|
40
59
|
instance = clazz.new
|
@@ -25,37 +25,20 @@ module Extensions
|
|
25
25
|
patientAccountNumber = self.account_number.split("^") rescue Array.new(10) {|i| "" }
|
26
26
|
internalId = self.patient_id_list.split("^") rescue Array.new(10) {|i| "" }
|
27
27
|
|
28
|
-
@hash =
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
"homePhone"=>{"number" => "","useCode" => "", "equipmentType" => "", "email" => "", "countryCode" => "", "areaCode" => "", "phoneNumber" => ""},
|
43
|
-
"primaryLanguage"=>self.primary_language,
|
44
|
-
"maritalStatus"=>self.marital_status,
|
45
|
-
"religion"=>self.religion,
|
46
|
-
"patientAccountNumber"=>{"id"=>patientAccountNumber[0], "checkDigit"=>patientAccountNumber[1], "codeIdCheck"=>patientAccountNumber[2], "assigningAuth"=>patientAccountNumber[3], "idTypeCode"=>patientAccountNumber[4], "assigningFacility"=>patientAccountNumber[5]},
|
47
|
-
"ssn"=>self.social_security_num,
|
48
|
-
"driversLicenseNumber"=>self.driver_license_num,
|
49
|
-
"mothersId"=>self.mothers_id,
|
50
|
-
"ethnicGroup"=>self.ethnic_group,
|
51
|
-
"birthPlace"=>self.birthplace,
|
52
|
-
"multipleBirthIndicator"=>self.multi_birth,
|
53
|
-
"birthOrder"=>self.birth_order,
|
54
|
-
"citizenship"=>self.citizenship,
|
55
|
-
"veteranStatus"=>self.vet_status,
|
56
|
-
"nationality"=>self.nationality,
|
57
|
-
"deathDateTime"=>self.death_date,
|
58
|
-
"deathIndicator"=>self.death_indicator}
|
28
|
+
@hash = super.to_hash
|
29
|
+
|
30
|
+
@hash["internalId"] = {"id" => internalId[0], "check_digit" => internalId[1], "check_digit_scheme" => internalId[2],
|
31
|
+
"assigning_authority" => internalId[3], "type" => internalId[4], "assigning_facility" => internalId[5]}
|
32
|
+
|
33
|
+
@hash["patientName"] = {"lastName" => patient_name[0], "firstName" => patient_name[1], "middleInitOrName"=> patient_name[2]}
|
34
|
+
|
35
|
+
@hash["address"] = {"streetAddress"=>address[0], "otherDesignation"=>address[1], "city"=>address[2], "state"=>address[3], "postalCode"=>address[4], "country"=>address[5], "addressType"=>address[6]}
|
36
|
+
|
37
|
+
@hash["phoneNumbers"] = {"home"=>self.phone_home, "business"=>self.phone_business}
|
38
|
+
|
39
|
+
@hash["patientAccountNumber"] = {"id"=>patientAccountNumber[0], "checkDigit"=>patientAccountNumber[1], "codeIdCheck"=>patientAccountNumber[2], "assigningAuth"=>patientAccountNumber[3], "idTypeCode"=>patientAccountNumber[4], "assigningFacility"=>patientAccountNumber[5]}
|
40
|
+
|
41
|
+
@hash
|
59
42
|
end
|
60
43
|
end
|
61
44
|
|
@@ -14,20 +14,12 @@ module Extensions
|
|
14
14
|
to_hash["visit"]["id"]
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
to_hash["
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
def consulting_provider_hash
|
26
|
-
{"id" => to_hash["consultingDoctor"], "providerType" => "CP"}
|
27
|
-
end
|
28
|
-
|
29
|
-
def referring_provider_hash
|
30
|
-
{"id" => to_hash["referringDoctor"], "providerType" => "RP"}
|
17
|
+
def provider_hash(provider_type, provider_code)
|
18
|
+
if to_hash["#{provider_type}Provider"]
|
19
|
+
to_hash["#{provider_type}Provider"].merge("providerType" => provider_code)
|
20
|
+
else
|
21
|
+
{}
|
22
|
+
end
|
31
23
|
end
|
32
24
|
|
33
25
|
def to_hash
|
@@ -85,6 +77,45 @@ module Extensions
|
|
85
77
|
"assigningFacility" => admittingProvider[13]}
|
86
78
|
end
|
87
79
|
|
80
|
+
if self.hash["referringDoctor"].blank?
|
81
|
+
hash["referringProvider"] = {}
|
82
|
+
else
|
83
|
+
referringProvider = self.hash["referringDoctor"].split("^") rescue Array.new(20) {|i|""}
|
84
|
+
hash["referringProvider"] = {"id" => referringProvider[0],
|
85
|
+
"lastName" => referringProvider[1],
|
86
|
+
"firstName" => referringProvider[2],
|
87
|
+
"middleInitOrName" => referringProvider[3],
|
88
|
+
"suffix" => referringProvider[4],
|
89
|
+
"prefix" => referringProvider[5],
|
90
|
+
"degree" => referringProvider[6],
|
91
|
+
"sourceTable" => referringProvider[7],
|
92
|
+
"assigningAuthority" => referringProvider[8],
|
93
|
+
"nameTypeCode" => referringProvider[9],
|
94
|
+
"identifierCheckDigit" => referringProvider[10],
|
95
|
+
"codeIdCheck" => referringProvider[11],
|
96
|
+
"identifierTypeCode" => referringProvider[12],
|
97
|
+
"assigningFacility" => referringProvider[13]}
|
98
|
+
end
|
99
|
+
|
100
|
+
if self.hash["consultingDoctor"].blank?
|
101
|
+
hash["consultingProvider"] = {}
|
102
|
+
else
|
103
|
+
consultingProvider = self.hash["consultingDoctor"].split("^") rescue Array.new(20) {|i|""}
|
104
|
+
hash["consultingProvider"] = {"id" => consultingProvider[0],
|
105
|
+
"lastName" => consultingProvider[1],
|
106
|
+
"firstName" => consultingProvider[2],
|
107
|
+
"middleInitOrName" => consultingProvider[3],
|
108
|
+
"suffix" => consultingProvider[4],
|
109
|
+
"prefix" => consultingProvider[5],
|
110
|
+
"degree" => consultingProvider[6],
|
111
|
+
"sourceTable" => consultingProvider[7],
|
112
|
+
"assigningAuthority" => consultingProvider[8],
|
113
|
+
"nameTypeCode" => consultingProvider[9],
|
114
|
+
"identifierCheckDigit" => consultingProvider[10],
|
115
|
+
"codeIdCheck" => consultingProvider[11],
|
116
|
+
"identifierTypeCode" => consultingProvider[12],
|
117
|
+
"assigningFacility" => consultingProvider[13]}
|
118
|
+
end
|
88
119
|
visitNumber = self.hash["visitNumber"].split("^") rescue Array.new(20) {|i|""}
|
89
120
|
hash["visit"] = {"id" => visitNumber[0],
|
90
121
|
"checkDigit" => visitNumber[1],
|
@@ -92,8 +123,7 @@ module Extensions
|
|
92
123
|
"assigningAuthority" => visitNumber[3],
|
93
124
|
"idTypeCode" => visitNumber[4]}
|
94
125
|
|
95
|
-
|
96
|
-
hash
|
126
|
+
@hash = hash
|
97
127
|
end
|
98
128
|
end
|
99
129
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'ruby-hl7'
|
2
|
+
class HL7::Message::Segment::ROL < HL7::Message::Segment
|
3
|
+
weight 4
|
4
|
+
add_field :role_instance_id
|
5
|
+
add_field :action_code
|
6
|
+
add_field :role
|
7
|
+
add_field :role_person
|
8
|
+
add_field :role_begin_date do |value|
|
9
|
+
convert_to_ts(value)
|
10
|
+
end
|
11
|
+
add_field :role_end_date do |value|
|
12
|
+
convert_to_ts(value)
|
13
|
+
end
|
14
|
+
add_field :role_duration
|
15
|
+
add_field :role_action_reason
|
16
|
+
add_field :provider_type
|
17
|
+
add_field :organization_unit_type
|
18
|
+
add_field :provider_info
|
19
|
+
add_field :phone
|
20
|
+
|
21
|
+
def person_hash
|
22
|
+
person = self.role_person.split(self.item_delim) rescue Array.new(20) {|i|""}
|
23
|
+
|
24
|
+
{"id" => person[0],
|
25
|
+
"lastName" => person[1],
|
26
|
+
"firstName" => person[2],
|
27
|
+
"middleInitOrName" => person[3],
|
28
|
+
"suffix" => person[4],
|
29
|
+
"prefix" => person[5],
|
30
|
+
"degree" => person[6],
|
31
|
+
"sourceTable" => person[7],
|
32
|
+
"assigningAuthority" => person[8],
|
33
|
+
"nameTypeCode" => person[9],
|
34
|
+
"identifierCheckDigit" => person[10],
|
35
|
+
"codeIdCheck" => person[11],
|
36
|
+
"identifierTypeCode" => person[12],
|
37
|
+
"assigningFacility" => person[13],
|
38
|
+
"providerType" => self.role}
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/ruby-hl7-extensions.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "ruby-hl7-extensions"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.60"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.email = "ruby-hl7-json@googlegroups.com"
|
14
14
|
s.extra_rdoc_files = ["LICENSE", "README.md"]
|
15
15
|
s.files = [".gitignore", "Gemfile", "Gemfile.lock", "LICENSE", "README.md", "Rakefile", "VERSION", "VERSION.yml",
|
16
|
-
"lib/core_ext/values/msh.rb",
|
16
|
+
"lib/core_ext/values/msh.rb","lib/core_ext/segments/rol.rb",
|
17
17
|
"lib/core_ext/message.rb", "lib/core_ext/segment.rb",
|
18
18
|
"lib/core_ext/segments/msh.rb", "lib/core_ext/segments/nk1.rb", "lib/core_ext/segments/orc.rb", "lib/core_ext/segments/nte.rb", "lib/core_ext/segments/obr.rb", "lib/core_ext/segments/obx.rb", "lib/core_ext/segments/pid.rb", "lib/core_ext/segments/pv1.rb", "lib/core_ext/segments/segments.rb",
|
19
19
|
"lib/ruby-hl7-extensions.rb", "ruby-hl7-extensions.gemspec"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-hl7-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.60
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Lega
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- lib/core_ext/segments/orc.rb
|
65
65
|
- lib/core_ext/segments/pid.rb
|
66
66
|
- lib/core_ext/segments/pv1.rb
|
67
|
+
- lib/core_ext/segments/rol.rb
|
67
68
|
- lib/core_ext/segments/segments.rb
|
68
69
|
- lib/core_ext/values/msh.rb
|
69
70
|
- lib/ruby-hl7-extensions.rb
|
@@ -93,3 +94,4 @@ signing_key:
|
|
93
94
|
specification_version: 3
|
94
95
|
summary: Ruby HL7 Library w/Extensions
|
95
96
|
test_files: []
|
97
|
+
has_rdoc:
|