ruby-hl7-extensions 0.0.59 → 0.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8172ad8eba6d86658a5b5b0038a36d1214d9d2e0
4
- data.tar.gz: 3c084a94d17bc158167e6b895a53b7780bc28e7d
3
+ metadata.gz: b91e92c7db8ae5a0a365bf7ed7a99d808dc856e9
4
+ data.tar.gz: b2ed8813fbcb261897b15d73eafb58c7c75c8178
5
5
  SHA512:
6
- metadata.gz: 63bc73abd4cefef0dd37a59e38eeb4a772d43a8ed7e4e6efa0e6985dc4427f0fa9e8247d29c8f2fb912a42f1e60dc72f34e581760c043f54308776288d8eca66
7
- data.tar.gz: 1b4732e229729fd2f0fbc55c714020c5331a42307a39d78b9b79d09c9657829e1ab40105ae06f50d0e9800f85b2b7607a1b0d3c5183ee23a517e359e769e3924
6
+ metadata.gz: 2b88bd45f6708fcd25b0133ed93163485ba68b8b9591822c83ced77ed2d2f3f68a5487e8b270c4c4dd86755cf2535f2b3899cbb759bf93c707913c804ccb6507
7
+ data.tar.gz: 77d07bf000dede8518feea10223cc8689ef99efcdefc6e1fc9ce5baf768e8483e20e5fe6f3de6c91aed5aeeec20a09fc73018b9335530a29b859a7dae1a0fbe5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.59
1
+ 0.0.60
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 0
4
- :patch: 59
4
+ :patch: 60
@@ -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.admitting_provider_hash, segment: self[:PV1]}
25
- providers << {hash: pv1.attending_provider_hash, segment: self[:PV1]}
26
- providers << {hash: pv1.consulting_provider_hash, segment: self[:PV1]}
27
- providers << {hash: pv1.referring_provider_hash, segment: self[: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"]["dateTimeBirth"]).strftime("%B %d, %Y")
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?
@@ -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
@@ -9,6 +9,10 @@ module Extensions
9
9
  end
10
10
 
11
11
  module InstanceMethods
12
+ def ordering_provider_hash
13
+ to_hash["orderingProvider"]
14
+ end
15
+
12
16
  def obr_list
13
17
  a = to_hash["OBR"]["array"].collect {|obr| ::HL7::Message::Segment.from_hash("OBR", obr)}
14
18
  a.to_enum(:each)
@@ -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 = {"setId" => self.set_id,
29
- "externalId" => self.patient_id,
30
- "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
- "alternateId" => self.alt_patient_id,
33
- "patientName" => {"lastName" => patient_name[0], "firstName" => patient_name[1], "middleInitOrName"=> patient_name[2]},
34
- "mothersMaidenName" => self.mother_maiden_name,
35
- "dateTimeBirth" => self.patient_dob,
36
- "sex" => self.admin_sex,
37
- "alias" => self.patient_alias,
38
- "race" => self.race,
39
- "address"=>{"streetAddress"=>address[0], "otherDesignation"=>address[1], "city"=>address[2], "state"=>address[3], "postalCode"=>address[4], "country"=>address[5], "addressType"=>address[6]},
40
- "countyCode"=> self.country_code,
41
- "phoneNumbers"=>{"home"=>self.phone_home, "business"=>self.phone_business},
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 admitting_provider_hash
18
- to_hash["admittingProvider"].merge("providerType" => "AD")
19
- end
20
-
21
- def attending_provider_hash
22
- to_hash["attendingProvider"].merge("providerType" => "AT")
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
@@ -15,3 +15,5 @@ segments.each do |segment_name|
15
15
  end")
16
16
 
17
17
  end
18
+
19
+ require 'core_ext/segments/rol'
@@ -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.59"
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.59
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: