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 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: