redox 1.3.1 → 1.4.0
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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/redox.rb +3 -0
- data/lib/redox/models/financial.rb +1 -4
- data/lib/redox/models/model.rb +67 -26
- data/lib/redox/models/ordering_provider.rb +15 -0
- data/lib/redox/models/patient/demographics.rb +1 -1
- data/lib/redox/models/patient/identifier.rb +1 -1
- data/lib/redox/models/patient/p_c_p.rb +1 -5
- data/lib/redox/models/provider.rb +21 -0
- data/lib/redox/models/transaction.rb +13 -4
- data/lib/redox/request/provider.rb +12 -0
- data/lib/redox/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2c926b510dc2e56b85369003ee89caf82292929308a18775df049e4a57e1d95
|
4
|
+
data.tar.gz: 9799c173cb24daa74f3dfe02eefb3f8c2a456557dafa819fb7ca2760621a3b4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1499bf55b2c53f0a0dafc2d68d3b420bc5a0a0760d4258103360d32526b32e4f418a59fddb50afb3feb80ac45a979045b943018d24a717129e7db072c7233faf
|
7
|
+
data.tar.gz: 2b2eeebee1f5a35c028cee6c77f582e0dff10734cec40ce620fdc02617c01daf42f73d62e4960ec7a7b77ed4290f733c3fb0ce46f408566f826fa86f1d71a970
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [1.4.0] - 2020-10-13
|
8
|
+
### Added
|
9
|
+
- AbstractModel that does not add top level key
|
10
|
+
- OrderingProvider that is the base for PCP
|
11
|
+
- Provider model
|
12
|
+
- Provider#query
|
13
|
+
- Created new method that can add helpers dynamically from response
|
14
|
+
|
7
15
|
## [1.3.1] - 2020-10-02
|
8
16
|
### Added
|
9
17
|
- Transaction#as\_json
|
@@ -113,6 +121,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
113
121
|
### Added
|
114
122
|
- Initial Release
|
115
123
|
|
124
|
+
[1.4.0]: https://github.com/WeInfuse/redox/compare/v1.3.1...v1.4.0
|
116
125
|
[1.3.1]: https://github.com/WeInfuse/redox/compare/v1.3.0...v1.3.1
|
117
126
|
[1.3.0]: https://github.com/WeInfuse/redox/compare/v1.2.0...v1.3.0
|
118
127
|
[1.2.0]: https://github.com/WeInfuse/redox/compare/v1.1.1...v1.2.0
|
data/lib/redox.rb
CHANGED
@@ -6,7 +6,9 @@ require 'redox/connection'
|
|
6
6
|
require 'redox/authentication'
|
7
7
|
require 'redox/models/model'
|
8
8
|
require 'redox/models/meta'
|
9
|
+
require 'redox/models/ordering_provider'
|
9
10
|
require 'redox/models/patient'
|
11
|
+
require 'redox/models/provider'
|
10
12
|
require 'redox/models/visit'
|
11
13
|
require 'redox/models/transaction'
|
12
14
|
require 'redox/models/financial'
|
@@ -19,6 +21,7 @@ require 'redox/request/request'
|
|
19
21
|
require 'redox/request/financial'
|
20
22
|
require 'redox/request/patient_admin'
|
21
23
|
require 'redox/request/patient_search'
|
24
|
+
require 'redox/request/provider'
|
22
25
|
|
23
26
|
module Redox
|
24
27
|
class Configuration
|
@@ -1,9 +1,6 @@
|
|
1
1
|
module Redox
|
2
2
|
module Models
|
3
|
-
class Financial <
|
4
|
-
include Hashie::Extensions::IgnoreUndeclared
|
5
|
-
include Hashie::Extensions::IndifferentAccess
|
6
|
-
|
3
|
+
class Financial < AbstractModel
|
7
4
|
property :Visit, required: false, from: :visit, default: Redox::Models::Visit.new
|
8
5
|
property :Patient, required: false, from: :patient, default: Redox::Models::Patient.new
|
9
6
|
property :Transactions, required: false, from: :transactions, default: []
|
data/lib/redox/models/model.rb
CHANGED
@@ -8,10 +8,12 @@ module Redox
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
class
|
11
|
+
class AbstractModel < Hashie::Trash
|
12
12
|
include Hashie::Extensions::IgnoreUndeclared
|
13
13
|
include Hashie::Extensions::IndifferentAccess
|
14
14
|
|
15
|
+
HIGH_LEVEL_KEYS = %w[Meta Patient Visit PotentialMatches]
|
16
|
+
|
15
17
|
property :Meta, from: :meta, required: false
|
16
18
|
property :Patient, from: :patient, required: false
|
17
19
|
property :Visit, from: :visit, required: false
|
@@ -24,6 +26,70 @@ module Redox
|
|
24
26
|
alias_method :visit, :Visit
|
25
27
|
alias_method :meta, :Meta
|
26
28
|
|
29
|
+
def to_json(args = {})
|
30
|
+
return self.to_h.to_json
|
31
|
+
end
|
32
|
+
|
33
|
+
def insurances
|
34
|
+
(self.patient&.insurances || []) + (self.visit&.insurances || [])
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.from_response(response)
|
38
|
+
model = Model.new
|
39
|
+
model.response = response
|
40
|
+
|
41
|
+
HIGH_LEVEL_KEYS.each do |k|
|
42
|
+
begin
|
43
|
+
model.send("#{k}=", Module.const_get("Redox::Models::#{k}").new(response[k])) if response[k]
|
44
|
+
rescue
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
return model
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.from_response_inflected(response)
|
52
|
+
model = self.from_response(response)
|
53
|
+
|
54
|
+
if (model.response.ok?)
|
55
|
+
data = model.response.parsed_response
|
56
|
+
|
57
|
+
if data.respond_to?(:keys)
|
58
|
+
model_class = nil
|
59
|
+
|
60
|
+
if model.meta&.data_model
|
61
|
+
model_class = "Redox::Models::#{model.meta.data_model}"
|
62
|
+
|
63
|
+
begin
|
64
|
+
model_class = Object.const_get(model_class)
|
65
|
+
rescue NameError
|
66
|
+
model_class = nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
data.keys.each do |key|
|
71
|
+
next if HIGH_LEVEL_KEYS.include?(key.to_s)
|
72
|
+
|
73
|
+
helper_name = key.to_s.downcase.to_sym
|
74
|
+
|
75
|
+
if model_class.nil?
|
76
|
+
model.define_singleton_method(helper_name) { data[key] }
|
77
|
+
else
|
78
|
+
if data[key].is_a?(Array)
|
79
|
+
model.define_singleton_method(helper_name) { data[key].map {|obj| model_class.new(obj) } }
|
80
|
+
else
|
81
|
+
model.define_singleton_method(helper_name) { model_class.new(data[key]) }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
return model
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class Model < AbstractModel
|
27
93
|
def initialize(data = {})
|
28
94
|
if data.is_a?(Hash)
|
29
95
|
if data.include?(key)
|
@@ -40,32 +106,7 @@ module Redox
|
|
40
106
|
return { key => super.to_h }
|
41
107
|
end
|
42
108
|
|
43
|
-
def to_json(args = {})
|
44
|
-
return self.to_h.to_json
|
45
|
-
end
|
46
|
-
|
47
|
-
def insurances
|
48
|
-
(self.patient&.insurances || []) + (self.visit&.insurances || [])
|
49
|
-
end
|
50
|
-
|
51
|
-
class << self
|
52
|
-
def from_response(response)
|
53
|
-
model = Model.new
|
54
|
-
model.response = response
|
55
|
-
|
56
|
-
%w[Meta Patient Visit PotentialMatches].each do |k|
|
57
|
-
begin
|
58
|
-
model.send("#{k}=", Module.const_get("Redox::Models::#{k}").new(response[k])) if response[k]
|
59
|
-
rescue
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
return model
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
109
|
private
|
68
|
-
|
69
110
|
def key
|
70
111
|
return self.class.to_s.split('::').last.to_s
|
71
112
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Redox
|
2
|
+
module Models
|
3
|
+
class OrderingProvider < AbstractModel
|
4
|
+
property :ID, required: false, from: :id
|
5
|
+
property :IDType, required: false, from: :id_type
|
6
|
+
property :FirstName, required: false, from: :first_name
|
7
|
+
property :LastName, required: false, from: :last_name
|
8
|
+
|
9
|
+
alias_method :first_name, :FirstName
|
10
|
+
alias_method :last_name, :LastName
|
11
|
+
alias_method :id, :ID
|
12
|
+
alias_method :id_type, :IDType
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Redox
|
2
2
|
module Models
|
3
|
-
class Demographics <
|
3
|
+
class Demographics < AbstractModel
|
4
4
|
property :FirstName, required: false, from: :first_name
|
5
5
|
property :MiddleName, required: false, from: :middle_name
|
6
6
|
property :LastName, required: false, from: :last_name
|
@@ -1,13 +1,9 @@
|
|
1
1
|
module Redox
|
2
2
|
module Models
|
3
|
-
class PCP <
|
3
|
+
class PCP < OrderingProvider
|
4
4
|
property :NPI, from: :npi
|
5
|
-
property :FirstName, required: false, from: :first_name
|
6
|
-
property :LastName, required: false, from: :last_name
|
7
5
|
|
8
6
|
alias_method :npi, :NPI
|
9
|
-
alias_method :first_name, :FirstName
|
10
|
-
alias_method :last_name, :LastName
|
11
7
|
end
|
12
8
|
end
|
13
9
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Redox
|
2
|
+
module Models
|
3
|
+
class Provider < Model
|
4
|
+
property :Identifiers, from: :identifiers, required: false, default: []
|
5
|
+
property :Demographics, from: :demographics, required: false
|
6
|
+
|
7
|
+
alias_method :identifiers, :Identifiers
|
8
|
+
|
9
|
+
def demographics
|
10
|
+
self[:Demographics] = Demographics.new(self[:Demographics]) unless self[:Demographics].is_a?(Redox::Models::Demographics)
|
11
|
+
self[:Demographics] ||= Demographics.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_identifier(type: , value: )
|
15
|
+
self[:Identifiers] << Identifier.new({'ID' => value, 'IDType' => type})
|
16
|
+
|
17
|
+
return self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
module Redox
|
2
2
|
module Models
|
3
|
-
class Transaction <
|
4
|
-
include Hashie::Extensions::IgnoreUndeclared
|
5
|
-
include Hashie::Extensions::IndifferentAccess
|
6
|
-
|
3
|
+
class Transaction < AbstractModel
|
7
4
|
property :Chargeable, required: false, from: :chargeable, default: {}
|
8
5
|
property :DateTimeOfService, required: false, from: :start
|
9
6
|
property :Department, required: false, from: :department, default: {}
|
@@ -48,6 +45,18 @@ module Redox
|
|
48
45
|
self
|
49
46
|
end
|
50
47
|
|
48
|
+
def add_ordering_provider(**kwargs)
|
49
|
+
self[:OrderingProviders] ||= []
|
50
|
+
self[:OrderingProviders] << OrderingProvider.new(kwargs)
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_performer(**kwargs)
|
55
|
+
self[:Performers] ||= []
|
56
|
+
self[:Performers] << OrderingProvider.new(kwargs)
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
51
60
|
def to_h
|
52
61
|
result = super.to_h
|
53
62
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Redox
|
2
|
+
module Request
|
3
|
+
class Provider
|
4
|
+
QUERY_META = Redox::Models::Meta.new(EventType: 'ProviderQuery', DataModel: 'Provider')
|
5
|
+
|
6
|
+
def self.query(provider, meta: Redox::Models::Meta.new)
|
7
|
+
meta = QUERY_META.merge(meta)
|
8
|
+
return Redox::Models::Model.from_response_inflected((RedoxClient.connection.request(body: Redox::Request.build_body(provider, meta))))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/redox/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Clark
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-10-
|
13
|
+
date: 2020-10-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|
@@ -150,18 +150,21 @@ files:
|
|
150
150
|
- lib/redox/models/financial.rb
|
151
151
|
- lib/redox/models/meta.rb
|
152
152
|
- lib/redox/models/model.rb
|
153
|
+
- lib/redox/models/ordering_provider.rb
|
153
154
|
- lib/redox/models/patient.rb
|
154
155
|
- lib/redox/models/patient/demographics.rb
|
155
156
|
- lib/redox/models/patient/identifier.rb
|
156
157
|
- lib/redox/models/patient/insurance.rb
|
157
158
|
- lib/redox/models/patient/p_c_p.rb
|
158
159
|
- lib/redox/models/potential_matches.rb
|
160
|
+
- lib/redox/models/provider.rb
|
159
161
|
- lib/redox/models/transaction.rb
|
160
162
|
- lib/redox/models/visit.rb
|
161
163
|
- lib/redox/redox_exception.rb
|
162
164
|
- lib/redox/request/financial.rb
|
163
165
|
- lib/redox/request/patient_admin.rb
|
164
166
|
- lib/redox/request/patient_search.rb
|
167
|
+
- lib/redox/request/provider.rb
|
165
168
|
- lib/redox/request/request.rb
|
166
169
|
- lib/redox/version.rb
|
167
170
|
- redox.gemspec
|