change_health 1.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +53 -5
- data/README.md +115 -15
- data/lib/change_health/connection.rb +1 -1
- data/lib/change_health/models/claim/submission/claim_information.rb +31 -0
- data/lib/change_health/models/claim/submission/provider.rb +17 -0
- data/lib/change_health/models/claim/submission/service_line.rb +12 -0
- data/lib/change_health/models/claim/submission/submitter.rb +11 -0
- data/lib/change_health/models/claim/submission/subscriber.rb +15 -0
- data/lib/change_health/models/eligibility/encounter.rb +22 -0
- data/lib/change_health/models/eligibility/provider.rb +23 -0
- data/lib/change_health/models/eligibility/subscriber.rb +31 -0
- data/lib/change_health/models/error.rb +56 -0
- data/lib/change_health/models/model.rb +13 -1
- data/lib/change_health/models/{trading_partner.rb → trading_partner/trading_partner.rb} +0 -0
- data/lib/change_health/{models → request}/eligibility.rb +5 -5
- data/lib/change_health/request/submission.rb +38 -0
- data/lib/change_health/response/claim/submission/submission_data.rb +23 -0
- data/lib/change_health/{models → response/eligibility}/eligibility_benefit.rb +6 -6
- data/lib/change_health/{models → response/eligibility}/eligibility_benefits.rb +3 -3
- data/lib/change_health/{models → response/eligibility}/eligibility_data.rb +7 -93
- data/lib/change_health/response/response_data.rb +41 -0
- data/lib/change_health/response/{trading_partner_data.rb → trading_partner/trading_partner_data.rb} +0 -0
- data/lib/change_health/response/{trading_partners_data.rb → trading_partner/trading_partners_data.rb} +0 -0
- data/lib/change_health/version.rb +1 -1
- data/lib/change_health.rb +20 -11
- metadata +22 -13
- data/lib/change_health/models/encounter.rb +0 -20
- data/lib/change_health/models/provider.rb +0 -21
- data/lib/change_health/models/subscriber.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 962d95245a21c89b96048449a0111165eee7b3a392f00a2f1cddf8924bf98150
|
4
|
+
data.tar.gz: 8b0127fb08968b20213728ffdc08afc0ae33a53a5d9c620efa916c8cc82f285f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e64c195c18b7fb2cbaf028141af3eab9ab2fbecfeb0750c1d706f81c9b12502d747a8a6d765228a9f731aa7c653ba6023a476677419e307089cbc15e320e93f
|
7
|
+
data.tar.gz: 8c598d163710ae6d9f2a4a048d4f2697beb6f308eba526f3ca449962e920065a3a128f10769d38307fa7efaff3d13df7c4c57e16333dbc593bde48a99e745749
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,50 @@ 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
|
+
## [2.1.0] - [2021-10-12]
|
8
|
+
### Changed
|
9
|
+
Model#to_h enhanced to change empty values AKA "" to nil. Reason: If a field is empty, Change Healthcare responds with an error - `Invalid value. Item must not be blank value.`. If the empty field is optional, Change Healthcare will accept the field as nil without error. If the empty field is required, Change Healthcare will return an error if the value is empty or nil.
|
10
|
+
|
11
|
+
## [2.0.0] - [2021-10-08]
|
12
|
+
### Added
|
13
|
+
#### Models
|
14
|
+
* ResponseData - for responses from calling change healthcare api used by EligibilityData and SubmissionData
|
15
|
+
#### Claim Submission
|
16
|
+
Added the ability to hit professional claim submission API. For more details, see [Change Healthcare documentation here](https://developers.changehealthcare.com/eligibilityandclaims/docs/professional-claims-v3-getting-started)
|
17
|
+
* ClaimInformation
|
18
|
+
* Provider
|
19
|
+
* ServiceLine
|
20
|
+
* Submission
|
21
|
+
* SubmissionData
|
22
|
+
* Submitter
|
23
|
+
* Subscriber
|
24
|
+
### Changed
|
25
|
+
* Using new Change Healthcare url. From apis to apigw. For more info see [change log here](https://developers.changehealthcare.com/eligibilityandclaims/docs/change-logrelease-notes-1)
|
26
|
+
* PARSE_DATE moved from ChangeHealth::Models::EligibilityData to ChangeHealth::Models
|
27
|
+
* Moved Error class into its own file
|
28
|
+
#### Namespace
|
29
|
+
Many classes moved namespaces to be more consistent across the many endpoints in Change Healthcare
|
30
|
+
| Previous | Current |
|
31
|
+
|-|-|
|
32
|
+
|ChangeHealth::Models::Eligibility | ChangeHealth::Request::Eligibility |
|
33
|
+
| ChangeHealth::Models::Encounter | ChangeHealth::Models::Eligibility::Encounter|
|
34
|
+
| ChangeHealth::Models::Provider | ChangeHealth::Models::Eligibility::Provider|
|
35
|
+
| ChangeHealth::Models::Subscriber | ChangeHealth::Models::Eligibility::Subscriber|
|
36
|
+
| ChangeHealth::Models::EligibilityBenefit | ChangeHealth::Response::EligibilityBenefit|
|
37
|
+
| ChangeHealth::Models::EligibilityBenefits | ChangeHealth::Response::EligibilityBenefits|
|
38
|
+
| ChangeHealth::Models::EligibilityData | ChangeHealth::Response::EligibilityData|
|
39
|
+
### Fixed
|
40
|
+
* Eligibility#add_dependent actually works
|
41
|
+
|
42
|
+
## [1.0.3] - [2021-04-26]
|
43
|
+
### Added
|
44
|
+
- Model::Error#represents_down? - adds ability to distinguish error representing down state
|
45
|
+
- Model::Error#retryable? - retryable when down
|
46
|
+
- EligibilityData#recommend_retry? - recommend retry when down
|
47
|
+
|
48
|
+
## [1.0.2] - [2021-04-06]
|
49
|
+
### Added
|
50
|
+
- EligibilityData#recommend_retry? - fix a bug in the search statement
|
7
51
|
|
8
52
|
## [1.0.1] - [2021-03-24]
|
9
53
|
### Added
|
@@ -105,7 +149,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
105
149
|
### Added
|
106
150
|
- Production endpoint
|
107
151
|
|
108
|
-
## [0.2
|
152
|
+
## [0.0.2] - [2020-03-09]
|
109
153
|
### Added
|
110
154
|
- EligibilityData
|
111
155
|
- EligibilityBenefit
|
@@ -114,7 +158,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
114
158
|
### Changed
|
115
159
|
- Eligibility.query returns EligibilityData object
|
116
160
|
|
117
|
-
## [0.1
|
161
|
+
## [0.0.1] - 2020-03-04
|
118
162
|
### Added
|
119
163
|
- Provider
|
120
164
|
- Subscriber
|
@@ -123,6 +167,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
123
167
|
- Authentication
|
124
168
|
- Configuration
|
125
169
|
|
170
|
+
[2.1.0]: https://github.com/WeInfuse/change_health/compare/v2.0.0...v2.1.0
|
171
|
+
[2.0.0]: https://github.com/WeInfuse/change_health/compare/v1.0.3...v2.0.0
|
172
|
+
[1.0.3]: https://github.com/WeInfuse/change_health/compare/v1.0.2...v1.0.3
|
173
|
+
[1.0.2]: https://github.com/WeInfuse/change_health/compare/v1.0.1...v1.0.2
|
126
174
|
[1.0.1]: https://github.com/WeInfuse/change_health/compare/v1.0.0...v1.0.1
|
127
175
|
[1.0.0]: https://github.com/WeInfuse/change_health/compare/v0.15.0...v1.0.0
|
128
176
|
[0.15.0]: https://github.com/WeInfuse/change_health/compare/v0.14.0...v0.15.0
|
@@ -137,6 +185,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
137
185
|
[0.6.0]: https://github.com/WeInfuse/change_health/compare/v0.5.0...v0.6.0
|
138
186
|
[0.5.0]: https://github.com/WeInfuse/change_health/compare/v0.4.0...v0.5.0
|
139
187
|
[0.4.0]: https://github.com/WeInfuse/change_health/compare/v0.3.0...v0.4.0
|
140
|
-
[0.3.0]: https://github.com/WeInfuse/change_health/compare/v0.2
|
141
|
-
[0.2
|
142
|
-
[0.1
|
188
|
+
[0.3.0]: https://github.com/WeInfuse/change_health/compare/v0.0.2...v0.3.0
|
189
|
+
[0.0.2]: https://github.com/WeInfuse/change_health/compare/v0.0.1...v0.0.2
|
190
|
+
[0.0.1]: https://github.com/WeInfuse/change_health/compare/520a8c54d07...v0.0.1
|
data/README.md
CHANGED
@@ -26,24 +26,25 @@ Or install it yourself as:
|
|
26
26
|
Make sure you're [configured](#configuration)!
|
27
27
|
|
28
28
|
### Eligibility
|
29
|
+
[Change Healthcare Eligibility Guide](https://developers.changehealthcare.com/eligibilityandclaims/docs)
|
29
30
|
```ruby
|
30
|
-
ChangeHealth::
|
31
|
+
ChangeHealth::Request::Eligibility.ping # Test your connection
|
31
32
|
|
32
|
-
encounter = ChangeHealth::Models::Encounter.new(date_of_service: Date.current, service_type_codes: ['98'])
|
33
|
-
provider = ChangeHealth::Models::Provider.new(npi: '0123456789', last_name: 'Bobson', first_name: 'Bob')
|
34
|
-
subscriber = ChangeHealth::Models::Subscriber.new(member_id: '0000000000', first_name: 'johnOne', last_name: 'doeOne', date_of_birth: '18800102')
|
33
|
+
encounter = ChangeHealth::Models::Eligibility::Encounter.new(date_of_service: Date.current, service_type_codes: ['98'])
|
34
|
+
provider = ChangeHealth::Models::Eligibility::Provider.new(npi: '0123456789', last_name: 'Bobson', first_name: 'Bob')
|
35
|
+
subscriber = ChangeHealth::Models::Eligibility::Subscriber.new(member_id: '0000000000', first_name: 'johnOne', last_name: 'doeOne', date_of_birth: '18800102')
|
35
36
|
|
36
|
-
edata = ChangeHealth::
|
37
|
+
edata = ChangeHealth::Request::Eligibility.new(tradingPartnerServiceId: '000050', provider: provider, subscriber: subscriber, encounter: encounter).query
|
37
38
|
|
38
39
|
edata.raw # Raw Hash of JSON response
|
39
40
|
```
|
40
41
|
|
41
|
-
|
42
|
+
#### Benefit(s) objects
|
42
43
|
Benefits extends Array and provides a query-like interface.
|
43
44
|
|
44
45
|
Benefit extends Hash and provides helpers for single-benefit.
|
45
46
|
|
46
|
-
```
|
47
|
+
```ruby
|
47
48
|
edata.benefits # Returns Benefits querying object (extends Array)
|
48
49
|
|
49
50
|
edata.benefits.individual # Only benefits matching the 'IND' identifier
|
@@ -57,7 +58,7 @@ edata.benefits.where(name: 'Co-Payment', code: 'B', benefitAmount: '30) # Generi
|
|
57
58
|
edata.benefits.find_by(name: 'Co-Payment', code: 'B', benefitAmount: '30) # Generic 'find_by' api returns first object found
|
58
59
|
```
|
59
60
|
|
60
|
-
|
61
|
+
#### Response
|
61
62
|
|
62
63
|
Response is EligibilityData object
|
63
64
|
|
@@ -77,16 +78,115 @@ true
|
|
77
78
|
|
78
79
|
### Trading Partners
|
79
80
|
```ruby
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
# Query trading partners using a wildcard search
|
82
|
+
# Returns Array of ChangeHealth::Models::TradingPartner Objects
|
83
|
+
trading_partners = ChangeHealth::Request::TradingPartner.query("Aetna")
|
84
|
+
|
85
|
+
trading_partners.first.name
|
86
|
+
"Aetna"
|
83
87
|
|
84
|
-
|
85
|
-
|
88
|
+
trading_partners.first.service_id
|
89
|
+
"ABC123"
|
90
|
+
```
|
86
91
|
|
87
|
-
|
88
|
-
|
92
|
+
### Claim Submission
|
93
|
+
[Change Healthcare Claim Submission Guide](https://developers.changehealthcare.com/eligibilityandclaims/docs/professional-claims-v3-getting-started)
|
94
|
+
```ruby
|
95
|
+
ChangeHealth::Request::Claim::Submission.ping # Test your connection
|
96
|
+
|
97
|
+
contact_information = { name: "SUBMITTER CONTACT INFO", phoneNumber: "123456789"}
|
98
|
+
claim_submitter = ChangeHealth::Models::Claim::Submitter.new(
|
99
|
+
organization_name: "REGIONAL PPO NETWORK",
|
100
|
+
contact_information: contact_information
|
101
|
+
)
|
102
|
+
|
103
|
+
receiver = { organizationName: "EXTRA HEALTHY INSURANCE"}
|
104
|
+
address = {
|
105
|
+
"address1": "123 address1",
|
106
|
+
"city": "city1",
|
107
|
+
"state": "wa",
|
108
|
+
"postalCode": "981010000"
|
109
|
+
}
|
110
|
+
subscriber = ChangeHealth::Models::Claim::Subscriber.new(
|
111
|
+
member_id: "0000000001",
|
112
|
+
payment_responsibility_level_code: "P",
|
113
|
+
first_name: "johnone",
|
114
|
+
last_name: "doetwo",
|
115
|
+
gender: "M",
|
116
|
+
date_of_birth: "02/01/1980",
|
117
|
+
address: address
|
118
|
+
)
|
119
|
+
provider = ChangeHealth::Models::Claim::Provider.new(
|
120
|
+
address: address,
|
121
|
+
employer_id: "000000000",
|
122
|
+
first_name: "johnone",
|
123
|
+
last_name: "doetwo",
|
124
|
+
npi: "1760854442",
|
125
|
+
provider_type: "BillingProvider"
|
126
|
+
)
|
127
|
+
|
128
|
+
health_care_code_information1 = {
|
129
|
+
"diagnosisTypeCode": "ABK",
|
130
|
+
"diagnosisCode": "S93401A"
|
131
|
+
}
|
132
|
+
health_care_code_information2 = {
|
133
|
+
"diagnosisTypeCode": "ABF",
|
134
|
+
"diagnosisCode": "S72044G"
|
135
|
+
|
136
|
+
}
|
137
|
+
service_line1 = ChangeHealth::Models::Claim::ServiceLine.new(
|
138
|
+
service_date: "2018-05-14",
|
139
|
+
professional_service: {
|
140
|
+
"procedureIdentifier": "HC",
|
141
|
+
"lineItemChargeAmount": "25",
|
142
|
+
"procedureCode": "E0570",
|
143
|
+
"measurementUnit": "UN",
|
144
|
+
"serviceUnitCount": "1",
|
145
|
+
"compositeDiagnosisCodePointers": {
|
146
|
+
"diagnosisCodePointers": ["1","2"]
|
147
|
+
}
|
148
|
+
}
|
149
|
+
)
|
150
|
+
service_line2 = ChangeHealth::Models::Claim::ServiceLine.new(
|
151
|
+
service_date: "20180514",
|
152
|
+
professional_service: {
|
153
|
+
"procedureIdentifier": "HC",
|
154
|
+
"lineItemChargeAmount": "3.75",
|
155
|
+
"procedureCode": "A7003",
|
156
|
+
"measurementUnit": "UN",
|
157
|
+
"serviceUnitCount": "1",
|
158
|
+
"compositeDiagnosisCodePointers": {
|
159
|
+
"diagnosisCodePointers": ["1"]
|
160
|
+
}
|
161
|
+
}
|
162
|
+
)
|
163
|
+
claim_information = ChangeHealth::Models::Claim::ClaimInformation.new(
|
164
|
+
benefits_assignment_certification_indicator: "Y",
|
165
|
+
claim_charge_amount: "28.75",
|
166
|
+
claim_filing_code: "CI",
|
167
|
+
claim_frequency_code: "1",
|
168
|
+
patient_control_number: "12345",
|
169
|
+
place_of_service_code: "11",
|
170
|
+
plan_participation_code: "A",
|
171
|
+
release_information_code: "Y",
|
172
|
+
signature_indicator: "Y",
|
173
|
+
health_care_code_information: [health_care_code_information1, health_care_code_information2],
|
174
|
+
service_lines: [service_line1, service_line2]
|
175
|
+
)
|
176
|
+
|
177
|
+
|
178
|
+
claim_submission = ChangeHealth::Request::Claim::Submission.new(
|
179
|
+
trading_partner_service_id: "9496",
|
180
|
+
submitter: claim_submitter,
|
181
|
+
receiver: receiver,
|
182
|
+
subscriber: subscriber,
|
183
|
+
providers: [provider],
|
184
|
+
claim_information: claim_information
|
185
|
+
)
|
186
|
+
|
187
|
+
claim_submission_data = claim_submission.submission
|
89
188
|
```
|
189
|
+
|
90
190
|
### Configuration
|
91
191
|
|
92
192
|
```ruby
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ChangeHealth
|
2
2
|
class Connection
|
3
|
-
URI_BUILDER = ->(host) { "https://#{host}
|
3
|
+
URI_BUILDER = ->(host) { "https://#{host}apigw.changehealthcare.com/".freeze }
|
4
4
|
|
5
5
|
QA_ENDPOINT = URI_BUILDER.call('sandbox.')
|
6
6
|
PROD_ENDPOINT = URI_BUILDER.call('')
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Claim
|
4
|
+
class ClaimInformation < Hashie::Trash
|
5
|
+
property :benefitsAssignmentCertificationIndicator, from: :benefits_assignment_certification_indicator, required: false
|
6
|
+
property :claimChargeAmount, from: :claim_charge_amount, required: false
|
7
|
+
property :claimFilingCode, from: :claim_filing_code, required: false
|
8
|
+
property :claimFrequencyCode, from: :claim_frequency_code, required: false
|
9
|
+
property :claimSupplementalInformation, from: :claim_supplemental_information, required: false
|
10
|
+
property :healthCareCodeInformation, from: :health_care_code_information, required: false
|
11
|
+
property :patientControlNumber, from: :patient_control_number, required: false
|
12
|
+
property :placeOfServiceCode, from: :place_of_service_code, required: false
|
13
|
+
property :planParticipationCode, from: :plan_participation_code, required: false
|
14
|
+
property :releaseInformationCode, from: :release_information_code, required: false
|
15
|
+
property :serviceFacilityLocation, from: :service_facility_location, required: false
|
16
|
+
property :serviceLines, from: :service_lines, required: false
|
17
|
+
property :signatureIndicator, from: :signature_indicator, required: false
|
18
|
+
|
19
|
+
def add_service_line(service_line)
|
20
|
+
self[:serviceLines] ||= []
|
21
|
+
self[:serviceLines] << service_line
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_health_care_code_information(health_care_code_information)
|
25
|
+
self[:healthCareCodeInformation] ||= []
|
26
|
+
self[:healthCareCodeInformation] << health_care_code_information
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Claim
|
4
|
+
class Provider < Hashie::Trash
|
5
|
+
property :address, required: false
|
6
|
+
property :contactInformation, from: :contact_information, required: false
|
7
|
+
property :employerId, from: :employer_id, required: false # or ssn
|
8
|
+
property :firstName, from: :first_name, required: false
|
9
|
+
property :lastName, from: :last_name, required: false
|
10
|
+
property :organizationName, from: :organization_name, required: false
|
11
|
+
property :npi, required: false
|
12
|
+
property :providerType, from: :provider_type, required: false
|
13
|
+
property :ssn, required: false # or employer id
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Claim
|
4
|
+
class Submitter < Hashie::Trash
|
5
|
+
property :organizationName, from: :organization_name, required: false
|
6
|
+
# contact information has a name & phone number inside
|
7
|
+
property :contactInformation, from: :contact_information, required: false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Claim
|
4
|
+
class Subscriber < Model
|
5
|
+
property :address, required: false
|
6
|
+
property :dateOfBirth, from: :date_of_birth, required: false
|
7
|
+
property :firstName, from: :first_name, required: false
|
8
|
+
property :gender, required: false
|
9
|
+
property :lastName, from: :last_name, required: false
|
10
|
+
property :memberId, from: :member_id, required: false
|
11
|
+
property :paymentResponsibilityLevelCode, from: :payment_responsibility_level_code, required: false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Eligibility
|
4
|
+
class Encounter < Model
|
5
|
+
property :beginningDateOfService, from: :beginning_date_of_service, required: false
|
6
|
+
property :dateOfService, from: :date_of_service, required: false
|
7
|
+
property :dateRange, from: :date_range, required: false, default: false
|
8
|
+
property :endDateOfService, from: :end_date_of_service, required: false
|
9
|
+
property :serviceTypeCodes, from: :service_type_codes, required: false
|
10
|
+
|
11
|
+
alias_method :dateRange?, :dateRange
|
12
|
+
alias_method :date_range?, :dateRange
|
13
|
+
alias_method :service_type_codes, :serviceTypeCodes
|
14
|
+
|
15
|
+
def add_service_type_code(code)
|
16
|
+
self[:serviceTypeCodes] ||= []
|
17
|
+
self[:serviceTypeCodes] << code
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Eligibility
|
4
|
+
class Provider < Hashie::Trash
|
5
|
+
property :firstName, from: :first_name, required: false
|
6
|
+
property :lastName, from: :last_name, required: false
|
7
|
+
property :name, default: true, required: false
|
8
|
+
property :npi, required: false
|
9
|
+
property :organizationName, from: :organization_name, required: false
|
10
|
+
property :payorId, from: :payer_id, required: false
|
11
|
+
property :person, default: true, required: false
|
12
|
+
property :providerCode, from: :provider_code, required: false
|
13
|
+
property :providerName, from: :provider_name, required: false
|
14
|
+
property :providerType, from: :provider_type, required: false
|
15
|
+
property :referenceIdentification, from: :reference_identification, required: false
|
16
|
+
property :serviceProviderNumber, from: :service_provider_number, required: false
|
17
|
+
property :taxId, from: :tax_id, required: false
|
18
|
+
|
19
|
+
alias_method :name?, :name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
module Eligibility
|
4
|
+
class Subscriber < Model
|
5
|
+
property :additionalIdentification, required: false
|
6
|
+
property :address, required: false
|
7
|
+
property :birthSequenceNumber, from: :birth_sequence_number, required: false
|
8
|
+
property :caseNumber, from: :case_number, required: false
|
9
|
+
property :dateOfBirth, from: :date_of_birth, required: false
|
10
|
+
property :firstName, from: :first_name, required: false
|
11
|
+
property :gender, required: false
|
12
|
+
property :groupNumber, from: :group_number, required: false
|
13
|
+
property :healthCareCodeInformation, from: :health_care_code_information, required: false
|
14
|
+
property :idCard, from: :id_card, required: false
|
15
|
+
property :idCardIssueDate, from: :id_card_issued_date, required: false
|
16
|
+
property :lastName, from: :last_name, required: false
|
17
|
+
property :medicaidRecipientIdentificationNumber, from: :medicaid_recipient_identification_number, required: false
|
18
|
+
property :memberId, from: :member_id, required: false
|
19
|
+
property :providerCode, from: :provider_code, required: false
|
20
|
+
property :providerIdentifier, from: :provider_identification, required: false
|
21
|
+
property :referenceIdentificationQualifier, from: :reference_identification_qualifier, required: false
|
22
|
+
property :ssn, required: false
|
23
|
+
|
24
|
+
def add_health_care_code_information(value)
|
25
|
+
self[:healthCareCodeInformation] ||= []
|
26
|
+
self[:healthCareCodeInformation] << value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Models
|
3
|
+
class Error
|
4
|
+
attr_reader :data
|
5
|
+
|
6
|
+
SIMPLE_RETRY_CODES = %w[
|
7
|
+
42
|
8
|
+
80
|
9
|
+
].freeze
|
10
|
+
|
11
|
+
NO_RESUBMIT_MESSAGES = [
|
12
|
+
'resubmission not allowed',
|
13
|
+
'do not resubmit'
|
14
|
+
].freeze
|
15
|
+
|
16
|
+
DOWN_FIELD = 'Http Header'.freeze
|
17
|
+
|
18
|
+
DOWN_MESSAGE = 'Please review http headers for this API, please contact support if you are unsure how to resolve.'.freeze
|
19
|
+
|
20
|
+
def initialize(data)
|
21
|
+
@data = data
|
22
|
+
end
|
23
|
+
|
24
|
+
def message
|
25
|
+
field_message || code_message
|
26
|
+
end
|
27
|
+
|
28
|
+
def field_message
|
29
|
+
"#{field}: #{description}" if field?
|
30
|
+
end
|
31
|
+
|
32
|
+
def code_message
|
33
|
+
"#{code}: #{description}" if code?
|
34
|
+
end
|
35
|
+
|
36
|
+
def represents_down?
|
37
|
+
field == DOWN_FIELD && description == DOWN_MESSAGE
|
38
|
+
end
|
39
|
+
|
40
|
+
def retryable?
|
41
|
+
represents_down? ||
|
42
|
+
(code? && SIMPLE_RETRY_CODES.include?(code) && followupAction? && NO_RESUBMIT_MESSAGES.none? {|msg| followupAction.downcase.include?(msg) })
|
43
|
+
end
|
44
|
+
|
45
|
+
%w[field description code followupAction location].each do |method_name|
|
46
|
+
define_method("#{method_name}?") do
|
47
|
+
false == send(method_name).nil?
|
48
|
+
end
|
49
|
+
|
50
|
+
define_method("#{method_name}") do
|
51
|
+
@data[method_name]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -12,14 +12,26 @@ module ChangeHealth
|
|
12
12
|
d
|
13
13
|
}
|
14
14
|
|
15
|
+
PARSE_DATE = ->(d) {
|
16
|
+
begin
|
17
|
+
d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
|
18
|
+
rescue
|
19
|
+
end
|
20
|
+
|
21
|
+
d
|
22
|
+
}
|
23
|
+
|
24
|
+
CONTROL_NUMBER = ->() { '%09d' % rand(1_000_000_000) }
|
25
|
+
|
15
26
|
class Model < Hashie::Trash
|
16
27
|
def to_h
|
17
28
|
result = super.to_h
|
18
29
|
|
19
|
-
self.
|
30
|
+
self.each_pair do |key, value|
|
20
31
|
if key.to_s.downcase.include?('date')
|
21
32
|
result[key] = ChangeHealth::Models::DATE_FORMATTER.call(result[key])
|
22
33
|
end
|
34
|
+
result[key] = nil if value == ""
|
23
35
|
end
|
24
36
|
|
25
37
|
result
|
File without changes
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module ChangeHealth
|
2
|
-
module
|
2
|
+
module Request
|
3
3
|
class Eligibility < Hashie::Trash
|
4
4
|
ENDPOINT = '/medicalnetwork/eligibility/v3'.freeze
|
5
5
|
HEALTH_CHECK_ENDPOINT = ENDPOINT + '/healthcheck'.freeze
|
6
6
|
|
7
|
-
property :controlNumber, from: :control_number, required: true, default:
|
7
|
+
property :controlNumber, from: :control_number, required: true, default: ChangeHealth::Models::CONTROL_NUMBER
|
8
8
|
property :dependents, required: false
|
9
9
|
property :encounter, required: false
|
10
10
|
property :informationReceiverName, from: :information_receiver_name, required: false
|
@@ -20,12 +20,12 @@ module ChangeHealth
|
|
20
20
|
alias_method :partner_id?, :partnerId
|
21
21
|
|
22
22
|
def add_dependent(dependent)
|
23
|
-
self[:
|
24
|
-
self[:
|
23
|
+
self[:dependents] ||= []
|
24
|
+
self[:dependents] << dependent
|
25
25
|
end
|
26
26
|
|
27
27
|
def query
|
28
|
-
ChangeHealth::
|
28
|
+
ChangeHealth::Response::EligibilityData.new(response: ChangeHealth::Connection.new.request(endpoint: ENDPOINT, body: self.to_h))
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.health_check
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Request
|
3
|
+
module Claim
|
4
|
+
class Submission < Hashie::Trash
|
5
|
+
ENDPOINT = '/medicalnetwork/professionalclaims/v3'.freeze
|
6
|
+
HEALTH_CHECK_ENDPOINT = ENDPOINT + '/healthcheck'.freeze
|
7
|
+
SUBMISSION_ENDPOINT = ENDPOINT + '/submission'.freeze
|
8
|
+
|
9
|
+
property :claimInformation, from: :claim_information, required: false
|
10
|
+
property :controlNumber, from: :control_number, required: true, default: ChangeHealth::Models::CONTROL_NUMBER
|
11
|
+
property :providers, required: false
|
12
|
+
property :receiver, required: false
|
13
|
+
property :submitter, required: false
|
14
|
+
property :subscriber, required: false
|
15
|
+
# Need one or the other, trading partner id or trading partner service id
|
16
|
+
property :tradingPartnerId, from: :trading_partner_id, required: false
|
17
|
+
property :tradingPartnerServiceId, from: :trading_partner_service_id, required: false
|
18
|
+
|
19
|
+
def add_provider(provider)
|
20
|
+
self[:providers] ||= []
|
21
|
+
self[:providers] << provider
|
22
|
+
end
|
23
|
+
|
24
|
+
def submission
|
25
|
+
ChangeHealth::Response::Claim::SubmissionData.new(response: ChangeHealth::Connection.new.request(endpoint: SUBMISSION_ENDPOINT, body: self.to_h))
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.health_check
|
29
|
+
ChangeHealth::Connection.new.request(endpoint: HEALTH_CHECK_ENDPOINT, verb: :get)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.ping
|
33
|
+
self.health_check
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Response
|
3
|
+
module Claim
|
4
|
+
class SubmissionData < ChangeHealth::Response::ResponseData
|
5
|
+
|
6
|
+
%w(controlNumber status tradingPartnerId tradingPartnerServiceId).each do |v|
|
7
|
+
define_method(v) do
|
8
|
+
@raw.dig(v)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
alias_method :control_number, :controlNumber
|
13
|
+
alias_method :trading_partner_id, :tradingPartnerId
|
14
|
+
alias_method :trading_partner_service_id, :tradingPartnerServiceId
|
15
|
+
|
16
|
+
def trading_partner?(name)
|
17
|
+
self.trading_partner_id == name || trading_partner_service_id == name
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ChangeHealth
|
2
|
-
module
|
2
|
+
module Response
|
3
3
|
class EligibilityBenefit < Hash
|
4
4
|
include Hashie::Extensions::MergeInitializer
|
5
5
|
include Hashie::Extensions::IndifferentAccess
|
@@ -54,7 +54,7 @@ module ChangeHealth
|
|
54
54
|
coverageLevelCode: COVERAGES,
|
55
55
|
code: CODES
|
56
56
|
}
|
57
|
-
|
57
|
+
|
58
58
|
HELPERS.each do |key, types|
|
59
59
|
types.each do |method, value|
|
60
60
|
define_method("#{method}?") do
|
@@ -99,13 +99,13 @@ module ChangeHealth
|
|
99
99
|
self.coinsurance? ? self.benefitPercent : self.benefitAmount
|
100
100
|
end
|
101
101
|
|
102
|
-
def services
|
102
|
+
def services
|
103
103
|
self['serviceTypeCodes']&.each_with_index&.map {|stc, i| [stc, self['serviceTypes']&.at(i)]} || []
|
104
104
|
end
|
105
105
|
|
106
106
|
%w(eligibilityBegin eligibilityEnd planBegin planEnd service).each do |f|
|
107
107
|
define_method(f) do
|
108
|
-
return ChangeHealth::Models::
|
108
|
+
return ChangeHealth::Models::PARSE_DATE.call(self.date_info&.dig(f))
|
109
109
|
end
|
110
110
|
end
|
111
111
|
alias_method :eligibility_begin_date, :eligibilityBegin
|
@@ -120,11 +120,11 @@ module ChangeHealth
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def plan_date_range_start
|
123
|
-
ChangeHealth::Models::
|
123
|
+
ChangeHealth::Models::PARSE_DATE.call(self.plan_date_range[0])
|
124
124
|
end
|
125
125
|
|
126
126
|
def plan_date_range_end
|
127
|
-
ChangeHealth::Models::
|
127
|
+
ChangeHealth::Models::PARSE_DATE.call(self.plan_date_range[1])
|
128
128
|
end
|
129
129
|
|
130
130
|
private
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module ChangeHealth
|
2
|
-
module
|
2
|
+
module Response
|
3
3
|
class EligibilityBenefits < Array
|
4
4
|
def initialize(benefits)
|
5
|
-
super(benefits.map {|benefit| ChangeHealth::
|
5
|
+
super(benefits.map {|benefit| ChangeHealth::Response::EligibilityBenefit.new(benefit) })
|
6
6
|
end
|
7
7
|
|
8
8
|
def where(**kwargs)
|
@@ -25,7 +25,7 @@ module ChangeHealth
|
|
25
25
|
self.where(inPlanNetworkIndicatorCode: 'Y')
|
26
26
|
end
|
27
27
|
|
28
|
-
ChangeHealth::
|
28
|
+
ChangeHealth::Response::EligibilityBenefit::HELPERS.each do |key, types|
|
29
29
|
types.each do |method, value|
|
30
30
|
define_method("#{method}s") do
|
31
31
|
self.where(key => value)
|
@@ -1,76 +1,10 @@
|
|
1
1
|
module ChangeHealth
|
2
|
-
module
|
3
|
-
class
|
4
|
-
attr_reader :data
|
5
|
-
|
6
|
-
SIMPLE_RETRY_CODES = %w[
|
7
|
-
42
|
8
|
-
80
|
9
|
-
].freeze
|
10
|
-
|
11
|
-
NO_RESUBMIT_MESSAGES = %w[
|
12
|
-
resubmission not allowed
|
13
|
-
do not resubmit
|
14
|
-
].freeze
|
15
|
-
|
16
|
-
def initialize(data)
|
17
|
-
@data = data
|
18
|
-
end
|
19
|
-
|
20
|
-
def message
|
21
|
-
field_message || code_message
|
22
|
-
end
|
23
|
-
|
24
|
-
def field_message
|
25
|
-
"#{field}: #{description}" if field?
|
26
|
-
end
|
27
|
-
|
28
|
-
def code_message
|
29
|
-
"#{code}: #{description}" if code?
|
30
|
-
end
|
31
|
-
|
32
|
-
def retryable?
|
33
|
-
code? && SIMPLE_RETRY_CODES.include?(code) && followupAction? && NO_RESUBMIT_MESSAGES.none? {|msg| followupAction.downcase.include?(msg) }
|
34
|
-
end
|
35
|
-
|
36
|
-
%w[field description code followupAction location].each do |method_name|
|
37
|
-
define_method("#{method_name}?") do
|
38
|
-
false == send(method_name).nil?
|
39
|
-
end
|
40
|
-
|
41
|
-
define_method("#{method_name}") do
|
42
|
-
@data[method_name]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class EligibilityData
|
48
|
-
attr_reader :response, :raw
|
2
|
+
module Response
|
3
|
+
class EligibilityData < ChangeHealth::Response::ResponseData
|
49
4
|
|
50
5
|
ACTIVE = '1'
|
51
6
|
INACTIVE = '6'
|
52
7
|
|
53
|
-
PARSE_DATE = ->(d) {
|
54
|
-
begin
|
55
|
-
d = Date.strptime(d, ChangeHealth::Models::DATE_FORMAT)
|
56
|
-
rescue
|
57
|
-
end
|
58
|
-
|
59
|
-
d
|
60
|
-
}
|
61
|
-
|
62
|
-
def initialize(data: nil, response: nil)
|
63
|
-
@response = response
|
64
|
-
@raw = data
|
65
|
-
|
66
|
-
begin
|
67
|
-
@raw ||= response&.parsed_response
|
68
|
-
rescue JSON::ParserError
|
69
|
-
end
|
70
|
-
|
71
|
-
@raw ||= {}
|
72
|
-
end
|
73
|
-
|
74
8
|
def active?(service_code: '30')
|
75
9
|
plan_status(service_code: service_code, single: false).any? {|status| ACTIVE == status['statusCode'] }
|
76
10
|
end
|
@@ -79,26 +13,6 @@ module ChangeHealth
|
|
79
13
|
plan_status(service_code: service_code, single: false).any? {|status| INACTIVE == status['statusCode'] }
|
80
14
|
end
|
81
15
|
|
82
|
-
def errors?
|
83
|
-
self.errors.is_a?(Array) && false == self.errors.empty?
|
84
|
-
end
|
85
|
-
|
86
|
-
def errors
|
87
|
-
errors = @raw.dig('errors') || []
|
88
|
-
|
89
|
-
errors.flatten.map {|error| ChangeHealth::Models::Error.new(error) }
|
90
|
-
end
|
91
|
-
|
92
|
-
def recommend_retry?
|
93
|
-
return false if errors.empty?
|
94
|
-
|
95
|
-
error_codes = errors.select(&:code?)
|
96
|
-
|
97
|
-
return false if error_codes.empty?
|
98
|
-
|
99
|
-
return error_codes.all?(&:retryable?)
|
100
|
-
end
|
101
|
-
|
102
16
|
def dependents?
|
103
17
|
true == self.dependents&.any?
|
104
18
|
end
|
@@ -111,7 +25,7 @@ module ChangeHealth
|
|
111
25
|
|
112
26
|
%w(eligibilityBegin planBegin service).each do |f|
|
113
27
|
define_method(f) do
|
114
|
-
return PARSE_DATE.call(self.date_info&.dig(f))
|
28
|
+
return ChangeHealth::Models::PARSE_DATE.call(self.date_info&.dig(f))
|
115
29
|
end
|
116
30
|
end
|
117
31
|
alias_method :eligibility_begin_date, :eligibilityBegin
|
@@ -124,11 +38,11 @@ module ChangeHealth
|
|
124
38
|
end
|
125
39
|
|
126
40
|
def plan_date_range_start
|
127
|
-
ChangeHealth::Models::
|
41
|
+
ChangeHealth::Models::PARSE_DATE.call(self.plan_date_range[0])
|
128
42
|
end
|
129
43
|
|
130
44
|
def plan_date_range_end
|
131
|
-
ChangeHealth::Models::
|
45
|
+
ChangeHealth::Models::PARSE_DATE.call(self.plan_date_range[1])
|
132
46
|
end
|
133
47
|
|
134
48
|
def plan_status(service_code: , single: true)
|
@@ -140,9 +54,9 @@ module ChangeHealth
|
|
140
54
|
end
|
141
55
|
|
142
56
|
def benefits
|
143
|
-
kname = "ChangeHealth::
|
57
|
+
kname = "ChangeHealth::Response::EligibilityBenefits#{self.trading_partner_id&.upcase}"
|
144
58
|
klazz = Object.const_get(kname) if Module.const_defined?(kname)
|
145
|
-
klazz ||= ChangeHealth::
|
59
|
+
klazz ||= ChangeHealth::Response::EligibilityBenefits
|
146
60
|
|
147
61
|
if klazz.respond_to?(:factory)
|
148
62
|
klazz = klazz.factory(self)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ChangeHealth
|
2
|
+
module Response
|
3
|
+
class ResponseData
|
4
|
+
attr_reader :response, :raw
|
5
|
+
|
6
|
+
def initialize(data: nil, response: nil)
|
7
|
+
@response = response
|
8
|
+
@raw = data
|
9
|
+
|
10
|
+
begin
|
11
|
+
@raw ||= response&.parsed_response
|
12
|
+
rescue JSON::ParserError
|
13
|
+
end
|
14
|
+
|
15
|
+
@raw ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def errors?
|
19
|
+
self.errors.is_a?(Array) && false == self.errors.empty?
|
20
|
+
end
|
21
|
+
|
22
|
+
def errors
|
23
|
+
errors = @raw.dig('errors') || []
|
24
|
+
|
25
|
+
errors.flatten.map {|error| ChangeHealth::Models::Error.new(error) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def recommend_retry?
|
29
|
+
return false unless errors?
|
30
|
+
|
31
|
+
return true if errors.any?(&:represents_down?)
|
32
|
+
|
33
|
+
error_codes = errors.select(&:code?)
|
34
|
+
|
35
|
+
return false if error_codes.empty?
|
36
|
+
|
37
|
+
return error_codes.all?(&:retryable?)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/change_health/response/{trading_partner_data.rb → trading_partner/trading_partner_data.rb}
RENAMED
File without changes
|
File without changes
|
data/lib/change_health.rb
CHANGED
@@ -1,22 +1,31 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
require 'hashie'
|
3
3
|
require 'change_health/version'
|
4
|
+
require 'change_health/authentication'
|
4
5
|
require 'change_health/change_health_exception'
|
5
6
|
require 'change_health/connection'
|
6
|
-
require 'change_health/authentication'
|
7
7
|
require 'change_health/extensions'
|
8
|
+
require 'change_health/models/error'
|
8
9
|
require 'change_health/models/model'
|
9
|
-
require 'change_health/models/
|
10
|
-
require 'change_health/models/
|
11
|
-
require 'change_health/models/
|
12
|
-
require 'change_health/models/
|
13
|
-
require 'change_health/models/
|
10
|
+
require 'change_health/models/claim/submission/claim_information'
|
11
|
+
require 'change_health/models/claim/submission/provider'
|
12
|
+
require 'change_health/models/claim/submission/service_line'
|
13
|
+
require 'change_health/models/claim/submission/submitter'
|
14
|
+
require 'change_health/models/claim/submission/subscriber'
|
15
|
+
require 'change_health/models/eligibility/encounter'
|
16
|
+
require 'change_health/models/eligibility/provider'
|
17
|
+
require 'change_health/models/eligibility/subscriber'
|
18
|
+
require 'change_health/models/trading_partner/trading_partner'
|
19
|
+
require 'change_health/request/eligibility'
|
20
|
+
require 'change_health/request/submission'
|
14
21
|
require 'change_health/request/trading_partner'
|
15
|
-
require 'change_health/response/
|
16
|
-
require 'change_health/response/
|
17
|
-
require 'change_health/
|
18
|
-
require 'change_health/
|
19
|
-
require 'change_health/
|
22
|
+
require 'change_health/response/response_data'
|
23
|
+
require 'change_health/response/claim/submission/submission_data'
|
24
|
+
require 'change_health/response/eligibility/eligibility_benefit'
|
25
|
+
require 'change_health/response/eligibility/eligibility_benefits'
|
26
|
+
require 'change_health/response/eligibility/eligibility_data'
|
27
|
+
require 'change_health/response/trading_partner/trading_partner_data'
|
28
|
+
require 'change_health/response/trading_partner/trading_partners_data'
|
20
29
|
|
21
30
|
module ChangeHealth
|
22
31
|
class Configuration
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: change_health
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Crockett
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -147,18 +147,27 @@ files:
|
|
147
147
|
- lib/change_health/change_health_exception.rb
|
148
148
|
- lib/change_health/connection.rb
|
149
149
|
- lib/change_health/extensions.rb
|
150
|
-
- lib/change_health/models/
|
151
|
-
- lib/change_health/models/
|
152
|
-
- lib/change_health/models/
|
153
|
-
- lib/change_health/models/
|
154
|
-
- lib/change_health/models/
|
150
|
+
- lib/change_health/models/claim/submission/claim_information.rb
|
151
|
+
- lib/change_health/models/claim/submission/provider.rb
|
152
|
+
- lib/change_health/models/claim/submission/service_line.rb
|
153
|
+
- lib/change_health/models/claim/submission/submitter.rb
|
154
|
+
- lib/change_health/models/claim/submission/subscriber.rb
|
155
|
+
- lib/change_health/models/eligibility/encounter.rb
|
156
|
+
- lib/change_health/models/eligibility/provider.rb
|
157
|
+
- lib/change_health/models/eligibility/subscriber.rb
|
158
|
+
- lib/change_health/models/error.rb
|
155
159
|
- lib/change_health/models/model.rb
|
156
|
-
- lib/change_health/models/
|
157
|
-
- lib/change_health/
|
158
|
-
- lib/change_health/
|
160
|
+
- lib/change_health/models/trading_partner/trading_partner.rb
|
161
|
+
- lib/change_health/request/eligibility.rb
|
162
|
+
- lib/change_health/request/submission.rb
|
159
163
|
- lib/change_health/request/trading_partner.rb
|
160
|
-
- lib/change_health/response/
|
161
|
-
- lib/change_health/response/
|
164
|
+
- lib/change_health/response/claim/submission/submission_data.rb
|
165
|
+
- lib/change_health/response/eligibility/eligibility_benefit.rb
|
166
|
+
- lib/change_health/response/eligibility/eligibility_benefits.rb
|
167
|
+
- lib/change_health/response/eligibility/eligibility_data.rb
|
168
|
+
- lib/change_health/response/response_data.rb
|
169
|
+
- lib/change_health/response/trading_partner/trading_partner_data.rb
|
170
|
+
- lib/change_health/response/trading_partner/trading_partners_data.rb
|
162
171
|
- lib/change_health/version.rb
|
163
172
|
homepage: https://github.com/WeInfuse/change_health
|
164
173
|
licenses:
|
@@ -180,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
189
|
- !ruby/object:Gem::Version
|
181
190
|
version: '0'
|
182
191
|
requirements: []
|
183
|
-
rubygems_version: 3.1.
|
192
|
+
rubygems_version: 3.1.6
|
184
193
|
signing_key:
|
185
194
|
specification_version: 4
|
186
195
|
summary: Ruby wrapper for the ChangeHealth API
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module ChangeHealth
|
2
|
-
module Models
|
3
|
-
class Encounter < Model
|
4
|
-
property :beginningDateOfService, from: :beginning_date_of_service, required: false
|
5
|
-
property :dateOfService, from: :date_of_service, required: false
|
6
|
-
property :dateRange, from: :date_range, required: false, default: false
|
7
|
-
property :endDateOfService, from: :end_date_of_service, required: false
|
8
|
-
property :serviceTypeCodes, from: :service_type_codes, required: false
|
9
|
-
|
10
|
-
alias_method :dateRange?, :dateRange
|
11
|
-
alias_method :date_range?, :dateRange
|
12
|
-
alias_method :service_type_codes, :serviceTypeCodes
|
13
|
-
|
14
|
-
def add_service_type_code(code)
|
15
|
-
self[:serviceTypeCodes] ||= []
|
16
|
-
self[:serviceTypeCodes] << code
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module ChangeHealth
|
2
|
-
module Models
|
3
|
-
class Provider < Hashie::Trash
|
4
|
-
property :firstName, from: :first_name, required: false
|
5
|
-
property :lastName, from: :last_name, required: false
|
6
|
-
property :name, default: true, required: false
|
7
|
-
property :npi, required: false
|
8
|
-
property :organizationName, from: :organization_name, required: false
|
9
|
-
property :payorId, from: :payer_id, required: false
|
10
|
-
property :person, default: true, required: false
|
11
|
-
property :providerCode, from: :provider_code, required: false
|
12
|
-
property :providerName, from: :provider_name, required: false
|
13
|
-
property :providerType, from: :provider_type, required: false
|
14
|
-
property :referenceIdentification, from: :reference_identification, required: false
|
15
|
-
property :serviceProviderNumber, from: :service_provider_number, required: false
|
16
|
-
property :taxId, from: :tax_id, required: false
|
17
|
-
|
18
|
-
alias_method :name?, :name
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module ChangeHealth
|
2
|
-
module Models
|
3
|
-
class Subscriber < Model
|
4
|
-
property :additionalIdentification, required: false
|
5
|
-
property :address, required: false
|
6
|
-
property :birthSequenceNumber, from: :birth_sequence_number, required: false
|
7
|
-
property :caseNumber, from: :case_number, required: false
|
8
|
-
property :dateOfBirth, from: :date_of_birth, required: false
|
9
|
-
property :firstName, from: :first_name, required: false
|
10
|
-
property :gender, required: false
|
11
|
-
property :groupNumber, from: :group_number, required: false
|
12
|
-
property :healthCareCodeInformation, from: :health_care_code_information, required: false
|
13
|
-
property :idCard, from: :id_card, required: false
|
14
|
-
property :idCardIssueDate, from: :id_card_issued_date, required: false
|
15
|
-
property :lastName, from: :last_name, required: false
|
16
|
-
property :medicaidRecipientIdentificationNumber, from: :medicaid_recipient_identification_number, required: false
|
17
|
-
property :memberId, from: :member_id, required: false
|
18
|
-
property :providerCode, from: :provider_code, required: false
|
19
|
-
property :providerIdentifier, from: :provider_identification, required: false
|
20
|
-
property :referenceIdentificationQualifier, from: :reference_identification_qualifier, required: false
|
21
|
-
property :ssn, required: false
|
22
|
-
|
23
|
-
def add_health_care_code_information(value)
|
24
|
-
self[:healthCareCodeInformation] ||= []
|
25
|
-
self[:healthCareCodeInformation] << value
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|