trizetto-api 0.1.2 → 0.2.1

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: e4fbff1ea29b8ff7be9a59a73684fbf34b4c4418
4
- data.tar.gz: 6697e7baa4a73b991efb4462f880466ae5fbc858
3
+ metadata.gz: 60c7ed11ee2e04e48734c1e3b557c9e904d2e268
4
+ data.tar.gz: 3b35cbee1b0e2ffb45ae3e9533ec546983f4d130
5
5
  SHA512:
6
- metadata.gz: eedcb3a711f90fdf8a1be47b85de37f4df7c4adcc55aba3ac3a387a362262f48da504bd7ad8144226789c8ed63afe155fff8cbd77af575a75ef953bb8e76807b
7
- data.tar.gz: e9a45666b41c6cfd81f5b673f2aec1504021273a14db19b0e18cb3d682526c9899f18efe895b9062a2492b11d73bb08b2abd018fb98a89cf5a2c51a06a32682a
6
+ metadata.gz: 2471cf69c92ddac9b6b47d0d41c7dd8e020f7374418b9c08e2034907f783071ed052e45829c7fa3989c4ab5b6b32c1ea476d170de250868c2a7c995e602c4c91
7
+ data.tar.gz: 4888af1330a52c70b84535c44ae4c912866482109b5e853858390d1d156bf8236bcfd1ef3b4bc27ab5912a74d0c215daee47cd1ff644c8db253d3f24032f5df8
@@ -1,5 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.1
4
+ - 2.3.5
5
+ - 2.4.2
5
6
  before_install: gem install bundler -v 1.16.0
@@ -0,0 +1 @@
1
+ --no-private -r README.md lib/**/*.rb
@@ -1,3 +1,16 @@
1
+ ## 0.2.1 (January 18, 2018) ##
2
+
3
+ * Sets required minimum version for ruby to 2.3
4
+
5
+ ## 0.2.0 (January 18, 2018) ##
6
+
7
+ * Make it simple to answer the question: does this person have insurance
8
+ coverage via the WebService Eligibility check. The raw XML response is parsed
9
+ into plain old ruby objects.
10
+ * Added tests (woo hoo)
11
+ * Readme update with examples
12
+ * Documented the WebService Eligibility check
13
+
1
14
  ## 0.1.2 (January 12, 2018) ##
2
15
 
3
16
  * Have the non-COR II Eligiblity check return an XML document. YAY! We can
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trizetto-api (0.1.1)
4
+ trizetto-api (0.2.0)
5
5
  savon (~> 2.0)
6
6
  savon-multipart (~> 2.0)
7
7
 
@@ -12,6 +12,7 @@ GEM
12
12
  gyoku (>= 0.4.0)
13
13
  nokogiri
14
14
  builder (3.2.3)
15
+ byebug (9.1.0)
15
16
  diff-lcs (1.3)
16
17
  gyoku (1.3.1)
17
18
  builder (>= 2.1.2)
@@ -66,6 +67,7 @@ PLATFORMS
66
67
 
67
68
  DEPENDENCIES
68
69
  bundler (~> 1.16)
70
+ byebug (>= 9.0)
69
71
  rake (~> 10.0)
70
72
  rspec (~> 3.0)
71
73
  trizetto-api!
data/README.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # Trizetto::Api
2
2
 
3
- Ruby wrapper for Trizetto APIs
3
+ [![Build Status](https://travis-ci.org/GoodMeasuresLLC/trizetto-api.svg?branch=master)](https://travis-ci.org/GoodMeasuresLLC/trizetto-api)
4
+
5
+ Ruby wrapper for Trizetto APIs for Ruby 2.3 and above.
4
6
 
5
7
  ## Installation
6
8
 
9
+ <b>Requires Ruby 2.3 or above</b>
10
+
7
11
  Add this line to your application's Gemfile:
8
12
 
9
13
  ```ruby
@@ -18,12 +22,20 @@ Or install it yourself as:
18
22
 
19
23
  $ gem install trizetto-api
20
24
 
25
+
21
26
  ## Usage
22
27
 
23
28
  ### Use the Eligibility Web Service with an XML payload to check eligibility in realtime
24
29
 
25
30
  This uses name/value pairs in a request and returns an XML docunment as a response.
26
- You can force this API to return an X12 document if you like pain.
31
+
32
+ To simply check if the patient is covered by a health plan
33
+
34
+ ```ruby
35
+ GENERAL_HEALTH_PLAN_COVERAGE_CODE = "30"
36
+ response = client.do_inquiry({...})
37
+ response.active_coverage_for?(GENERAL_HEALTH_PLAN_COVERAGE_CODE) #=> true | false
38
+ ```
27
39
 
28
40
  ```ruby
29
41
  require 'trizetto/api'
@@ -33,12 +45,13 @@ Trizetto::Api.configure do |config|
33
45
  config.password = 'Super Top Secret'
34
46
  end
35
47
 
36
-
37
- client = Trizetto::Api::Eligibility::WebService.new({
38
- pretty_print_xml: true,
39
- log: true,
40
- log_level: :debug,
48
+ client = Trizetto::Api::Eligibility::WebService::Client.new({
49
+ # You probably don't want logging enable unless you are being very careful to protect PHI in logs
50
+ # pretty_print_xml: true,
51
+ # log: true,
52
+ # log_level: :debug,
41
53
  })
54
+
42
55
  response = client.do_inquiry({
43
56
  'ProviderLastName': 'BLUE CROSS BLUE SHIELD OF MASSACHUSETTS',
44
57
  'NPI': 'YOUR NPI HERE',
@@ -48,13 +61,44 @@ response = client.do_inquiry({
48
61
  'GediPayerId': 'N4222',
49
62
  })
50
63
 
51
- puts response.to_hash[:do_inquiry_response][:do_inquiry_result][:success_code]
64
+ # Were there validation errors with the request?
65
+ response.success? # => false
66
+ response.success_code # => "ValidationFailure"
67
+ response.errors.messages # => ["Please enter InsuranceNum."]response.errors.validation_failures.first.affected_fields # => ["InsuranceNum"]
68
+ response.errors.validation_failures.first.message # => "Please enter InsuranceNum."
69
+
70
+
71
+ # Did we successfully get back an eligibility response from the payer.
72
+ response.success? # => true
73
+ response.success_code # => "Success"
74
+ response.transaction_id # => "c6eb40c5584f0496be3f3a48d0ddfd"
75
+ response.payer_name # => "BLUE CROSS BLUE SHIELD OF MASSACHUSETTS"
76
+ response.active_coverage_for?("30") # => true
77
+
78
+ # Was the response rejected? We got back an eligibility response, but probably the patient wasn't found
79
+ response.success? # => true
80
+ response.success_code # => "Success"
81
+ response.active_coverage_for?("30") # => false
82
+ response.rejected? # => true
83
+ response.rejectsions.count # => 1
84
+ response.rejectsions.first.reason # => "Patient Birth Date Does Not Match That for the Patient on the Database"
85
+ response.rejectsions.first.follow_up_action # => "Please Correct and Resubmit"
86
+
87
+ # What active insurance coverages of service_type_code=30 does this patient have?
88
+ coverages = response.patient.benefits.select {|benefit| benefit.active_coverage? && benefit.service_type_codes.include?("30")}
89
+ coverages.count # => 2
90
+ coverages.first.insurance_type # => "Preferred Provider Organization (PPO)"
91
+ coverages.last.insurance_type # => "Medicare Part A"
92
+ coverages.first.messages # => nil
93
+ coverages.last.messages # => ["BCBSMA IS PRIME"]
94
+
95
+ # Find all the benefit information for service_type_code=30
96
+ benefits = response.patient.benefits.select {|benefit| benefit.service_type_codes.include?("30")}
97
+
98
+ benefits.map(&:info).uniq # => ["Active Coverage", "Deductible", "Coverage Basis", "Out of Pocket (Stop Loss)", "Services Restricted to Following Provider"]
52
99
 
53
- source = response.to_hash[:do_inquiry_response][:do_inquiry_result][:response_as_xml]
54
- puts Nokogiri::XML(source).to_xml
55
100
  ```
56
101
 
57
-
58
102
  ### Use the CORE2 API with an X12 payload to check eligibility in realtime
59
103
 
60
104
  This returns an X12/271 response. You will need to understand how to build
@@ -11,10 +11,9 @@ module Trizetto
11
11
  #
12
12
  # As of right now, you have to generate the correct X12/271 payload.
13
13
  #
14
- # See Also
15
- #
16
- # - Eligibility 270/271 Companion Guide: https://mytools.gatewayedi.com/webcontent/Eligibility_Companion_Guide.pdf
14
+ # <b<References</b>
17
15
  #
16
+ # - {https://mytools.gatewayedi.com/webcontent/Eligibility_Companion_Guide.pdf Eligibility 270/271 Companion Guide}
18
17
  class Core2
19
18
  def initialize(options={})
20
19
  @client = Savon.client({
@@ -55,20 +54,22 @@ module Trizetto
55
54
  }.merge(options))
56
55
  end
57
56
 
58
-
59
- # TODO: Understand the X12 format and allow options to be passed in, then generate the X12 message
57
+ # Performs an eligiblity check using the CORE II Eligibility API via X12/270
58
+ #
59
+ # <b>TODO</b>
60
+ # - Understand the X12 format and allow options to be passed in, then generate the X12 message
60
61
  #
61
62
  def check_eligibility(options = {})
62
- @client.call(:real_time_transaction, message: {
63
- 'PayloadType': 'X12_270_Request_005010X279A1',
64
- 'ProcessingMode': 'RealTime',
65
- 'PayloadID': SecureRandom.uuid,
66
- 'TimeStamp': Time.now.utc.xmlschema,
67
- 'SenderID': Trizetto::Api.configuration.username,
68
- 'ReceiverID': 'GATEWAY EDI',
69
- 'CORERuleVersion': '2.2.0',
70
- 'Payload': options[:payload]
71
- });
63
+ @client.call(:real_time_transaction, message: {
64
+ 'PayloadType': 'X12_270_Request_005010X279A1',
65
+ 'ProcessingMode': 'RealTime',
66
+ 'PayloadID': SecureRandom.uuid,
67
+ 'TimeStamp': Time.now.utc.xmlschema,
68
+ 'SenderID': Trizetto::Api.configuration.username,
69
+ 'ReceiverID': 'GATEWAY EDI',
70
+ 'CORERuleVersion': '2.2.0',
71
+ 'Payload': options[:payload]
72
+ });
72
73
  end
73
74
  end
74
75
  end
@@ -1,74 +1,136 @@
1
+ require 'ostruct'
2
+
3
+ require File.dirname(__FILE__) + "/web_service/rejectable.rb"
4
+ require File.dirname(__FILE__) + "/web_service/node.rb"
5
+ require File.dirname(__FILE__) + "/web_service/patient.rb"
6
+
7
+ Dir[File.dirname(__FILE__) + '/web_service/*.rb'].each {|file| require file }
8
+
1
9
  module Trizetto
2
10
  module Api
3
11
  module Eligibility
12
+ module WebService
4
13
 
5
- # Ruby Wrapper for the Eligibility Web Service
6
- #
7
- # Performs a real time eligibility check using the non-CORE II Web Service
8
- #
9
- # The webservice provides 3 eligibility checks:
10
- #
11
- # - +DoInquiry+
12
- # - +DoInquiryByX12Data+
13
- # - +DoInquiryByX12DataWith271Response+
14
- #
15
- # This API, currently, only uses the +DoInquiry+ check. For X12 requests
16
- # the CORE II client is recommended instead.
17
- #
18
- # See Also:
19
- #
20
- # - Service Description: https://services.gatewayedi.com/eligibility/service.asmx
21
- # - WSDL: https://services.gatewayedi.com/eligibility/service.asmx?WSDL
22
- # - Realtime Eligibiliy Webservice Companion Guide: https://mytools.gatewayedi.com/Help/documents/Eligibility/Realtime%20Eligibility%20Webservice%20Companion%20Guide.pdf
23
- # - Realtime Eligibiliy Webservice Vendor Toolkit: https://mytools.gatewayedi.com/Help/documents/Eligibility/Realtime%20Eligibility%20Webservice%20Vendor%20Toolkit.pdf
24
- # - Eligibility Companion Guide by Payer: https://mytools.gatewayedi.com/help/documents/Eligibility/Payer%20Specific%20Required%20Data%20Elements-2010.pdf
25
- class WebService < Trizetto::Api::WebService
26
- def initialize(options={})
27
- super(options.merge({
28
- wsdl: File.join( File.dirname(__FILE__), 'web_service.wsdl' ),
29
- endpoint: Trizetto::Api.configuration.eligibiltiy_webservice_endpoint,
30
- }))
31
- end
14
+ # Raised when the response from Trizetto includes multiple subscribers
15
+ #
16
+ # If raised, please scrub the response for PHI and create an issue in
17
+ # github and include the scrubbed (NO PHI!!) reponse XML.
18
+ class MultipleSubscribersError < StandardError; end
32
19
 
33
- # Required Field:
34
- # +GediPayerId+ - The Gateway EDI specific payer identifier
35
- # +ProviderLastName+ - Provider Last Name/Organization Name
36
- # +NPI+ - National Provider Identifier
20
+ # Raised when the response from Trizetto includes multiple dependents
37
21
  #
38
- # Situational Fields:
22
+ # If raised, please scrub the response for PHI and create an issue in
23
+ # github and include the scrubbed (NO PHI!!) reponse XML.
24
+ class MultipleDependentsError < StandardError; end
25
+
26
+
27
+ # Ruby Wrapper for the Eligibility Web Service
39
28
  #
40
- # +ProviderFirstName+ - Provider First Name
41
- # +InsuredFirstName+ - Subscriber First Name
42
- # +InsuredLastName+ - Subscriber Last Name
43
- # +InsuranceNum+ - Subscriber Id
44
- # +InsuredDob+ - Subscriber DOB
45
- # +InsuredGender+ - Subscriber Gender
46
- # +DependentFirstName+ - Dependent First Name
47
- # +DependentLastName+ - Dependent Last Name
48
- # +DependentDob+ - Dependent DOB
49
- # +DependentGender+ - Dependent Gender
29
+ # Performs a real time eligibility check using the non-CORE II Web Service
50
30
  #
51
- # Note: Some payers require additional information than those listed above. Please refer to the
52
- # companion guide for the additional parameters required by few payers. A valid inquiry submitted
53
- # to those payers must also account for the additional payer specific parameters. “InsuranceNum,” in
54
- # particular, is not a required field for all transactions, but is required by almost all payers.
31
+ # The webservice provides 3 eligibility checks:
55
32
  #
56
- # See Also:
33
+ # * <tt>DoInquiry</tt>
34
+ # * <tt>DoInquiryByX12Data</tt>
35
+ # * <tt>DoInquiryByX12DataWith271Response</tt>
57
36
  #
58
- # - Service Description: https://services.gatewayedi.com/eligibility/service.asmx?op=DoInquiry
59
- def do_inquiry(parameters={})
60
- @client.call(:do_inquiry, message: { 'Inquiry': {
61
- 'ResponseDataType': 'Xml',
62
- 'Parameters': {
63
- 'MyNameValue': parameters.map do |name, value|
64
- {'Name': name, 'Value': value}
65
- end
66
- }}})
67
- end
37
+ # This API, currently, only uses the +DoInquiry+ check. For X12 requests
38
+ # the CORE II client is recommended instead.
39
+ #
40
+ # <b>Example</b>
41
+ #
42
+ # client = Trizetto::Api::Eligibility::WebService::Client.new
43
+ #
44
+ # response = client.do_inquiry({
45
+ # 'ProviderLastName': 'YOUR COMPANY NAME HERE',
46
+ # 'NPI': 'YOUR NPI HERE',
47
+ # 'InsuredFirstName': 'Mickey',
48
+ # 'InsuredLastName': 'Mouse',
49
+ # 'InsuredDob': '19281118',
50
+ # 'GediPayerId': 'N4222',
51
+ # })
52
+ #
53
+ # @see DoInquiryResponse
54
+ #
55
+ # *References*
56
+ # * {https://services.gatewayedi.com/eligibility/service.asmx ServiceDescription}
57
+ # * {https://services.gatewayedi.com/eligibility/service.asmx?WSDL WSDL}
58
+ # * {https://mytools.gatewayedi.com/Help/documents/Eligibility/Realtime%20Eligibility%20Webservice%20Companion%20Guide.pdf Realtime Eligibiliy Webservice Companion Guide}
59
+ # * {https://mytools.gatewayedi.com/Help/documents/Eligibility/Realtime%20Eligibility%20Webservice%20Vendor%20Toolkit.pdf Realtime Eligibiliy Webservice Vendor Toolkit}
60
+ # * {https://mytools.gatewayedi.com/help/documents/Eligibility/Payer%20Specific%20Required%20Data%20Elements-2010.pdf Eligibility Companion Guide by Payer}
61
+ class Client < Trizetto::Api::WebService
68
62
 
69
- alias_method :check_eligibility, :do_inquiry
63
+ def initialize(options={})
64
+ super(
65
+ options.merge(
66
+ {
67
+ wsdl: File.join( File.dirname(__FILE__), 'web_service.wsdl' ),
68
+ endpoint: Trizetto::Api.configuration.eligibiltiy_webservice_endpoint,
69
+ }
70
+ ))
71
+ end
72
+
73
+ # Performs an eligibility check using the trizetto eligibility SOAP API
74
+ #
75
+ # In this request, your company is the Provider, you are providing
76
+ # services to an individual. For the +ProviderLastName+, you should use
77
+ # you company's name. For the +NPI+, you should use your company's
78
+ # National Provider Identifier.
79
+ #
80
+ # The +GediPayerId+ is the insurance company. You want them to pay for the
81
+ # service you have or will provide. You will need to get these values
82
+ # from Trizetto.
83
+ #
84
+ # Required and optional fields will depend on the Payer being checked.
85
+ # Some payers require additional information than those listed below.
86
+ # Refer to the companion guide for the required additional parameters.
87
+ # A valid inquiry submitted to those payers must also account for the
88
+ # additional payer specific parameters. +InsuranceNum+ in particular,
89
+ # is not a required field for all transactions, but is required by
90
+ # almost all payers.
91
+ #
92
+ # <b>Always Required Fields</b>
93
+ #
94
+ # * <tt>GediPayerId</tt> - The Gateway EDI specific payer identifier
95
+ # * <tt>ProviderLastName</tt> - Provider Last Name/Organization Name.
96
+ # * <tt>NPI</tt> - National Provider Identifier
97
+ #
98
+ # <b>Situational Fields</b>
99
+ #
100
+ # * <tt>ProviderFirstName</tt> - Provider First Name
101
+ # * <tt>InsuredFirstName</tt> - Subscriber First Name
102
+ # * <tt>InsuredLastName</tt> - Subscriber Last Name
103
+ # * <tt>InsuranceNum</tt> - Subscriber Id
104
+ # * <tt>InsuredDob</tt> - Subscriber DOB
105
+ # * <tt>InsuredGender</tt> - Subscriber Gender
106
+ # * <tt>DependentFirstName</tt> - Dependent First Name
107
+ # * <tt>DependentLastName</tt> - Dependent Last Name
108
+ # * <tt>DependentDob</tt> - Dependent DOB
109
+ # * <tt>DependentGender</tt> - Dependent Gender
110
+ # * <tt>GroupNumber</tt> -
111
+ # * <tt>ServiceTypeCode</tt> - What type of provider service. 30 is Health Plan Benefit Coverage, "General healthcare benefits for the member's policy or contract"
112
+ #
113
+ # <b>References</b>
114
+ # * {https://services.gatewayedi.com/eligibility/service.asmx?op=DoInquiry Service Description}
115
+ # * {http://www.x12.org/codes/health-care-service-type-codes/ Service Type Codes}
116
+ #
117
+ # @return DoInquiryResponse
118
+ def do_inquiry(parameters={})
119
+ DoInquiryResponse.new(
120
+ @client.call( :do_inquiry, message: { 'Inquiry': {
121
+ 'ResponseDataType': 'Xml',
122
+ 'Parameters': {
123
+ 'MyNameValue': parameters.map { |name, value|
124
+ {'Name': name, 'Value': value}
125
+ }
126
+ }
127
+ }})
128
+ )
129
+ end
130
+
131
+ alias_method :check_eligibility, :do_inquiry
132
+ end
70
133
  end
71
134
  end
72
135
  end
73
136
  end
74
-
@@ -0,0 +1,117 @@
1
+ module Trizetto
2
+ module Api
3
+ module Eligibility
4
+ module WebService
5
+
6
+ # A Benefit provided by the insurance.
7
+ #
8
+ # <b>Example XML</b>
9
+ #
10
+ # <benefit>
11
+ # <info>Out of Pocket (Stop Loss)</info>
12
+ # <coveragelevel>Family</coveragelevel>
13
+ # <servicetype>Health Benefit Plan Coverage</servicetype>
14
+ # <servicetypecode>30</servicetypecode>
15
+ # <time_period_qualifier>Remaining</time_period_qualifier>
16
+ # <benefitamount>13097.6</benefitamount>
17
+ # <plannetworkindicator>In Plan-Network</plannetworkindicator>
18
+ # <message>BUT NO MORE THAN INDIVIDUAL AMOUNT PER MEMBER (ACCUMULATES WITH OUT-OF-NETWORK AMOUNTS)</message>
19
+ # <message>CALCULATION INCLUDES DEDUCTIBLE, COPAYMENTS AND COINSURANCE FOR MEDICAL AND PRESCRIPTION DRUG BENEFITS.</message>
20
+ # </benefit>
21
+ #
22
+ # <b>Example</b>
23
+ #
24
+ # benefit.info # => "Out of Pocket (Stop Loss)"
25
+ # benefit.messages # => ["BUT NO MORE THAN...", "CALCULATION INCLUDES ...."]
26
+ #
27
+ # <b>Example XML</b>
28
+ #
29
+ # <benefit>
30
+ # <info>Active Coverage</info>
31
+ # <coveragelevel>Family</coveragelevel>
32
+ # <servicetype>Health Benefit Plan Coverage</servicetype>
33
+ # <servicetypecode>30</servicetypecode>
34
+ # <insurancetype>Preferred Provider Organization (PPO)</insurancetype>
35
+ # <insurancetypecode>PR</insurancetypecode>
36
+ # <plancoveragedescription>PPO - PREFERRED BLUE PPO SAVER</plancoveragedescription>
37
+ # </benefit>
38
+ #
39
+ # <b>Example</b>
40
+ #
41
+ # benefit.info # => "Active Coverage<"
42
+ # benefit.service_type_codes # => ["30"]
43
+ #
44
+ class Benefit < Node
45
+ REQUIRED_KEYS =
46
+ {
47
+ info: '',
48
+ service_type_codes: [],
49
+ messages: [],
50
+ }
51
+
52
+ KEY_CLEANUP =
53
+ {
54
+ benefitamount: :benefit_amount,
55
+ benefitentity: :entity,
56
+ coveragelevel: :coverage_level,
57
+ datequalifier: :date_qualifier,
58
+ insurancetype: :insurance_type,
59
+ insurancetypecode: :insurance_type_code,
60
+ plancoveragedescription: :plan_coverage_description,
61
+ plannetworkindicator: :plan_network_indicator,
62
+ quantityqualifier: :quantity_qualifier,
63
+ servicetype: :service_type,
64
+ servicetypecode: :service_type_code,
65
+ }
66
+
67
+ def initialize(raw_hash = {})
68
+ clean_hash = raw_hash.dup
69
+
70
+ # Convert message, which is either a single or multiple entry int
71
+ # the SOAP, which then gets turned into a string or an array by
72
+ # Nori into a messages aaray
73
+ clean_hash[:messages] = Array(clean_hash.delete(:message)) if clean_hash.has_key?(:message)
74
+
75
+ # Service type codes indicate the type of benefit.
76
+ # The magic decoder for ID => human meaning is here: http://www.x12.org/codes/health-care-service-type-codes/
77
+ # Multiple service type codes with the same benfit are combined with a ^
78
+ # so we turn a single servicetypecode entry into an array of service types
79
+ clean_hash[:service_type_codes] = (clean_hash.delete(:servicetypecode) || '').split("^")
80
+
81
+ super(clean_hash)
82
+
83
+ if self.entity.is_a?(Hash)
84
+ self.entity = BenefitEntity.new(self.entity)
85
+ end
86
+ end
87
+
88
+ # Is this active insurance coverage?
89
+ def active_coverage?
90
+ info == "Active Coverage"
91
+ end
92
+
93
+ def inactive?
94
+ info == "Inactive"
95
+ end
96
+
97
+ def co_insurance?
98
+ info == "Co-Insurance"
99
+ end
100
+
101
+ def limitation?
102
+ info == "Limitations"
103
+ end
104
+
105
+ def non_covered?
106
+ info == "Non-Covered"
107
+ end
108
+
109
+ def primary_care_provider?
110
+ info == "Primary Care Provider"
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+