candidhealth 1.6.0 → 1.8.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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/lib/candidhealth/auth/default/client.rb +74 -0
  3. data/lib/candidhealth/charge_capture/v_1/client.rb +48 -48
  4. data/lib/candidhealth/charge_capture/v_1/types/charge_capture_data.rb +70 -56
  5. data/lib/candidhealth/commons/types/clearinghouse.rb +18 -0
  6. data/lib/candidhealth/commons/types/procedure_modifier.rb +11 -0
  7. data/lib/candidhealth/credentialing/v_2/client.rb +342 -8
  8. data/lib/candidhealth/credentialing/v_2/types/base_credentialing_span.rb +143 -0
  9. data/lib/candidhealth/credentialing/v_2/types/facility_credentialing_span.rb +165 -0
  10. data/lib/candidhealth/credentialing/v_2/types/facility_credentialing_span_page.rb +88 -0
  11. data/lib/candidhealth/credentialing/v_2/types/provider_credentialing_span.rb +34 -34
  12. data/lib/candidhealth/encounter_providers/v_2/types/billing_provider.rb +1 -1
  13. data/lib/candidhealth/encounter_providers/v_2/types/billing_provider_update.rb +1 -1
  14. data/lib/candidhealth/encounter_providers/v_2/types/billing_provider_update_with_optional_address.rb +1 -1
  15. data/lib/candidhealth/encounters/v_4/client.rb +3253 -2040
  16. data/lib/candidhealth/encounters/v_4/types/encounter.rb +111 -86
  17. data/lib/candidhealth/encounters/v_4/types/encounter_base.rb +39 -33
  18. data/lib/candidhealth/encounters/v_4/types/encounter_create.rb +796 -0
  19. data/lib/candidhealth/encounters/v_4/types/encounter_create_from_pre_encounter.rb +131 -117
  20. data/lib/candidhealth/encounters/v_4/types/encounter_deep_optional.rb +70 -56
  21. data/lib/candidhealth/encounters/v_4/types/encounter_optional.rb +29 -39
  22. data/lib/candidhealth/encounters/v_4/types/encounter_rendering_or_attending_provider_required_error.rb +55 -0
  23. data/lib/candidhealth/encounters/v_4/types/encounter_update.rb +736 -0
  24. data/lib/candidhealth/encounters_universal/types/universal_encounter_create.rb +944 -0
  25. data/lib/candidhealth/encounters_universal/types/universal_encounter_create_base.rb +691 -0
  26. data/lib/candidhealth/encounters_universal/types/universal_encounter_create_from_pre_encounter.rb +791 -0
  27. data/lib/candidhealth/encounters_universal/types/universal_encounter_create_from_pre_encounter_base.rb +572 -0
  28. data/lib/candidhealth/encounters_universal/types/universal_encounter_update.rb +872 -0
  29. data/lib/candidhealth/encounters_universal/types/universal_encounter_update_base.rb +700 -0
  30. data/lib/candidhealth/fee_schedules/v_3/client.rb +57 -0
  31. data/lib/candidhealth/fee_schedules/v_3/types/validation_error.rb +12 -0
  32. data/lib/candidhealth/financials/types/patient_transaction_source.rb +1 -0
  33. data/lib/candidhealth/health_care_code_information/client.rb +30 -0
  34. data/lib/candidhealth/health_care_code_information/v_1/client.rb +268 -0
  35. data/lib/candidhealth/health_care_code_information/v_1/types/admitting_diagnosis.rb +236 -0
  36. data/lib/candidhealth/health_care_code_information/v_1/types/admitting_diagnosis_code_qualifier.rb +14 -0
  37. data/lib/candidhealth/health_care_code_information/v_1/types/admitting_diagnosis_new.rb +206 -0
  38. data/lib/candidhealth/health_care_code_information/v_1/types/code_list_qualifier_code.rb +1068 -0
  39. data/lib/candidhealth/health_care_code_information/v_1/types/condition_code.rb +71 -0
  40. data/lib/candidhealth/health_care_code_information/v_1/types/condition_information.rb +237 -0
  41. data/lib/candidhealth/health_care_code_information/v_1/types/condition_information_code_qualifier.rb +13 -0
  42. data/lib/candidhealth/health_care_code_information/v_1/types/condition_information_new.rb +207 -0
  43. data/lib/candidhealth/health_care_code_information/v_1/types/date_time_period_format_qualifier.rb +54 -0
  44. data/lib/candidhealth/health_care_code_information/v_1/types/diagnosis_related_group.rb +236 -0
  45. data/lib/candidhealth/health_care_code_information/v_1/types/diagnosis_related_group_code_qualifier.rb +13 -0
  46. data/lib/candidhealth/health_care_code_information/v_1/types/diagnosis_related_group_new.rb +206 -0
  47. data/lib/candidhealth/health_care_code_information/v_1/types/external_cause_of_injury.rb +245 -0
  48. data/lib/candidhealth/health_care_code_information/v_1/types/external_cause_of_injury_code_qualifier.rb +14 -0
  49. data/lib/candidhealth/health_care_code_information/v_1/types/external_cause_of_injury_new.rb +245 -0
  50. data/lib/candidhealth/health_care_code_information/v_1/types/health_care_code_information.rb +218 -0
  51. data/lib/candidhealth/health_care_code_information/v_1/types/health_care_code_information_create.rb +225 -0
  52. data/lib/candidhealth/health_care_code_information/v_1/types/health_care_code_information_get_all_response.rb +227 -0
  53. data/lib/candidhealth/health_care_code_information/v_1/types/health_care_code_information_new.rb +188 -0
  54. data/lib/candidhealth/health_care_code_information/v_1/types/health_care_code_information_update.rb +225 -0
  55. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_code.rb +71 -0
  56. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_information.rb +249 -0
  57. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_information_code_qualifier.rb +13 -0
  58. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_information_new.rb +219 -0
  59. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_span_code.rb +25 -0
  60. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_span_code_qualifier.rb +13 -0
  61. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_span_information.rb +252 -0
  62. data/lib/candidhealth/health_care_code_information/v_1/types/occurrence_span_information_new.rb +222 -0
  63. data/lib/candidhealth/health_care_code_information/v_1/types/other_diagnosis_information.rb +245 -0
  64. data/lib/candidhealth/health_care_code_information/v_1/types/other_diagnosis_information_code_qualifier.rb +14 -0
  65. data/lib/candidhealth/health_care_code_information/v_1/types/other_diagnosis_information_new.rb +215 -0
  66. data/lib/candidhealth/health_care_code_information/v_1/types/other_procedure_information.rb +248 -0
  67. data/lib/candidhealth/health_care_code_information/v_1/types/other_procedure_information_code_qualifier.rb +14 -0
  68. data/lib/candidhealth/health_care_code_information/v_1/types/other_procedure_information_new.rb +218 -0
  69. data/lib/candidhealth/health_care_code_information/v_1/types/patient_reason_for_visit.rb +236 -0
  70. data/lib/candidhealth/health_care_code_information/v_1/types/patient_reason_for_visit_code_qualifier.rb +14 -0
  71. data/lib/candidhealth/health_care_code_information/v_1/types/patient_reason_for_visit_new.rb +206 -0
  72. data/lib/candidhealth/health_care_code_information/v_1/types/present_on_admission_indicator_code.rb +17 -0
  73. data/lib/candidhealth/health_care_code_information/v_1/types/principal_diagnosis.rb +245 -0
  74. data/lib/candidhealth/health_care_code_information/v_1/types/principal_diagnosis_code_qualifier.rb +14 -0
  75. data/lib/candidhealth/health_care_code_information/v_1/types/principal_diagnosis_new.rb +215 -0
  76. data/lib/candidhealth/health_care_code_information/v_1/types/principal_procedure_information.rb +246 -0
  77. data/lib/candidhealth/health_care_code_information/v_1/types/principal_procedure_information_code_qualifier.rb +15 -0
  78. data/lib/candidhealth/health_care_code_information/v_1/types/principal_procedure_information_new.rb +216 -0
  79. data/lib/candidhealth/health_care_code_information/v_1/types/rd_8_date.rb +72 -0
  80. data/lib/candidhealth/health_care_code_information/v_1/types/set_or_clear_admitting_diagnosis.rb +69 -0
  81. data/lib/candidhealth/health_care_code_information/v_1/types/set_or_clear_diagnosis_related_group.rb +69 -0
  82. data/lib/candidhealth/health_care_code_information/v_1/types/set_or_clear_principal_diagnosis.rb +69 -0
  83. data/lib/candidhealth/health_care_code_information/v_1/types/set_or_clear_principal_procedure_information.rb +71 -0
  84. data/lib/candidhealth/health_care_code_information/v_1/types/treatment_code_information.rb +236 -0
  85. data/lib/candidhealth/health_care_code_information/v_1/types/treatment_code_information_new.rb +206 -0
  86. data/lib/candidhealth/health_care_code_information/v_1/types/treatment_code_qualifier.rb +13 -0
  87. data/lib/candidhealth/health_care_code_information/v_1/types/value_code.rb +119 -0
  88. data/lib/candidhealth/health_care_code_information/v_1/types/value_code_qualifier.rb +13 -0
  89. data/lib/candidhealth/health_care_code_information/v_1/types/value_information.rb +245 -0
  90. data/lib/candidhealth/health_care_code_information/v_1/types/value_information_new.rb +215 -0
  91. data/lib/candidhealth/individual/types/patient.rb +6 -6
  92. data/lib/candidhealth/individual/types/patient_base.rb +6 -6
  93. data/lib/candidhealth/individual/types/patient_create.rb +6 -6
  94. data/lib/candidhealth/individual/types/patient_update.rb +6 -6
  95. data/lib/candidhealth/individual/types/patient_update_with_optional_address.rb +6 -6
  96. data/lib/candidhealth/organization_providers/v_2/types/license_type.rb +2 -0
  97. data/lib/candidhealth/patient_ar/client.rb +30 -0
  98. data/lib/candidhealth/patient_ar/v_1/client.rb +161 -0
  99. data/lib/candidhealth/patient_ar/v_1/types/insurance_adjustment_info.rb +60 -0
  100. data/lib/candidhealth/patient_ar/v_1/types/insurance_payment_info.rb +60 -0
  101. data/lib/candidhealth/patient_ar/v_1/types/invalid_filters_error_type.rb +60 -0
  102. data/lib/candidhealth/patient_ar/v_1/types/inventory_record.rb +101 -0
  103. data/lib/candidhealth/patient_ar/v_1/types/invoice_itemization_response.rb +103 -0
  104. data/lib/candidhealth/patient_ar/v_1/types/list_inventory_paged_response.rb +77 -0
  105. data/lib/candidhealth/patient_ar/v_1/types/non_insurance_adjustment_info.rb +60 -0
  106. data/lib/candidhealth/patient_ar/v_1/types/non_insurance_payment_info.rb +60 -0
  107. data/lib/candidhealth/patient_ar/v_1/types/patient_adjustment_info.rb +60 -0
  108. data/lib/candidhealth/patient_ar/v_1/types/patient_ar_status.rb +14 -0
  109. data/lib/candidhealth/patient_ar/v_1/types/patient_payment_allocation.rb +76 -0
  110. data/lib/candidhealth/patient_ar/v_1/types/patient_payment_info.rb +75 -0
  111. data/lib/candidhealth/patient_ar/v_1/types/service_line_itemization.rb +210 -0
  112. data/lib/candidhealth/payers/client.rb +7 -0
  113. data/lib/candidhealth/payers/v_4/client.rb +137 -0
  114. data/lib/candidhealth/payers/v_4/types/clearinghouse_payer_info.rb +93 -0
  115. data/lib/candidhealth/payers/v_4/types/payer.rb +116 -0
  116. data/lib/candidhealth/payers/v_4/types/payer_ids.rb +107 -0
  117. data/lib/candidhealth/payers/v_4/types/payer_page.rb +88 -0
  118. data/lib/candidhealth/payers/v_4/types/support_state.rb +15 -0
  119. data/lib/candidhealth/pre_encounter/coverages/v_1/client.rb +4 -4
  120. data/lib/candidhealth/pre_encounter/coverages/v_1/types/subscriber.rb +3 -3
  121. data/lib/candidhealth/pre_encounter/patients/v_1/client.rb +204 -6
  122. data/lib/candidhealth/pre_encounter/patients/v_1/types/guarantor.rb +3 -3
  123. data/lib/candidhealth/pre_encounter/patients/v_1/types/inferred_patient_metadata.rb +80 -0
  124. data/lib/candidhealth/pre_encounter/patients/v_1/types/mutable_patient.rb +33 -5
  125. data/lib/candidhealth/pre_encounter/patients/v_1/types/mutable_patient_with_mrn.rb +33 -5
  126. data/lib/candidhealth/pre_encounter/patients/v_1/types/origination_detail.rb +104 -0
  127. data/lib/candidhealth/pre_encounter/patients/v_1/types/patient.rb +32 -4
  128. data/lib/candidhealth/pre_encounter/patients/v_1/types/referral_source.rb +18 -0
  129. data/lib/candidhealth/pre_encounter/patients/v_1/types/referral_type.rb +17 -0
  130. data/lib/candidhealth/pre_encounter/patients/v_1/types/specialization_category.rb +42 -0
  131. data/lib/candidhealth/service_lines/v_2/client.rb +252 -10
  132. data/lib/candidhealth/service_lines/v_2/types/service_line.rb +28 -10
  133. data/lib/candidhealth/service_lines/v_2/types/service_line_create.rb +52 -40
  134. data/lib/candidhealth/service_lines/v_2/types/service_line_create_base.rb +251 -0
  135. data/lib/candidhealth/service_lines/v_2/types/service_line_create_base_base.rb +243 -0
  136. data/lib/candidhealth/service_lines/v_2/types/service_line_create_optional.rb +48 -24
  137. data/lib/candidhealth/service_lines/v_2/types/service_line_create_standalone.rb +58 -46
  138. data/lib/candidhealth/service_lines/v_2/types/service_line_create_standalone_base.rb +273 -0
  139. data/lib/candidhealth/service_lines/v_2/types/service_line_create_standalone_base_base.rb +265 -0
  140. data/lib/candidhealth/service_lines/v_2/types/service_line_update.rb +64 -54
  141. data/lib/candidhealth/service_lines/v_2/types/service_line_update_base.rb +263 -0
  142. data/lib/candidhealth/service_lines/v_2/types/universal_service_line_create.rb +271 -0
  143. data/lib/candidhealth/service_lines/v_2/types/universal_service_line_create_standalone.rb +317 -0
  144. data/lib/candidhealth/service_lines/v_2/types/universal_service_line_update.rb +307 -0
  145. data/lib/candidhealth/x_12/v_1/types/type_of_bill_composite.rb +2 -2
  146. data/lib/candidhealth/x_12/v_1/types/type_of_bill_composite_base.rb +90 -0
  147. data/lib/candidhealth/x_12/v_1/types/type_of_bill_composite_update.rb +112 -0
  148. data/lib/candidhealth.rb +21 -7
  149. data/lib/requests.rb +2 -2
  150. data/lib/types_export.rb +116 -13
  151. metadata +109 -2
@@ -0,0 +1,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../commons/types/procedure_modifier"
4
+ require_relative "../../../commons/types/service_line_units"
5
+ require_relative "drug_identification"
6
+ require_relative "../../../commons/types/facility_type_code"
7
+ require "date"
8
+ require_relative "../../../encounter_providers/v_2/types/ordering_provider"
9
+ require_relative "test_result"
10
+ require "ostruct"
11
+ require "json"
12
+
13
+ module CandidApiClient
14
+ module ServiceLines
15
+ module V2
16
+ module Types
17
+ class ServiceLineCreateBase
18
+ # @return [String]
19
+ attr_reader :procedure_code
20
+ # @return [Array<CandidApiClient::Commons::Types::ProcedureModifier>]
21
+ attr_reader :modifiers
22
+ # @return [Boolean] Maps to SV1-11 on the 837-P and Box 24H on the CMS-1500.
23
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
24
+ # will not be populated.
25
+ attr_reader :has_epsdt_indicator
26
+ # @return [Boolean] Maps to SV1-12 on the 837-P and Box 24I on the CMS-1500.
27
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
28
+ # will not be populated.
29
+ attr_reader :has_family_planning_indicator
30
+ # @return [String] String representation of a Decimal that can be parsed by most libraries.
31
+ # For professional claims, a ServiceLine quantity cannot contain more than one
32
+ # digit of precision
33
+ # (Example: 1.1 is valid, 1.11 is not). For institutional claims, a ServiceLine
34
+ # quantity cannot contain
35
+ # more than three decimal digits of precision.
36
+ attr_reader :quantity
37
+ # @return [CandidApiClient::Commons::Types::ServiceLineUnits]
38
+ attr_reader :units
39
+ # @return [Integer] The total amount charged for this service line, factoring in quantity. If
40
+ # procedure_code is updated and this is not, the system will attempt to set it
41
+ # based on chargemasters entries and the service line’s quantity. For example, if
42
+ # a single unit has an entry of 100 cents and 2 units were rendered, the
43
+ # charge_amount_cents will be set to 200, if there is no chargemaster entry, it
44
+ # will default to the amount set in this field.
45
+ attr_reader :charge_amount_cents
46
+ # @return [CandidApiClient::ServiceLines::V2::Types::DrugIdentification]
47
+ attr_reader :drug_identification
48
+ # @return [CandidApiClient::Commons::Types::FacilityTypeCode] 837p Loop2300, SV105. This enum is not used or required for institutional
49
+ # claims. If your organization does not intend to submit claims with a different
50
+ # place of service at the service line level, this field should not be populated.
51
+ # 02 for telemedicine, 11 for in-person. Full list
52
+ # //www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set).
53
+ attr_reader :place_of_service_code
54
+ # @return [String] A free-form description to clarify the related data elements and their content.
55
+ # Maps to SV1-01, C003-07 on a 837-P and SV2-02, C003-07 on a 837-I form.
56
+ attr_reader :description
57
+ # @return [Date]
58
+ attr_reader :date_of_service
59
+ # @return [Date]
60
+ attr_reader :end_date_of_service
61
+ # @return [CandidApiClient::EncounterProviders::V2::Types::OrderingProvider] Required when the service or supply was ordered by a provider who is different
62
+ # than the rendering provider for this service line.
63
+ # If not required by this implementation guide, do not send.
64
+ attr_reader :ordering_provider
65
+ # @return [Array<CandidApiClient::ServiceLines::V2::Types::TestResult>] Contains a list of test results. Test result types may map to MEA-02 on the
66
+ # 837-P (ex: Hemoglobin, Hematocrit).
67
+ # This is unused by 837-i and ignored for institutional service lines.
68
+ # No more than 5 MEA-02 test results may be submitted per service line.
69
+ attr_reader :test_results
70
+ # @return [String] Maps to NTE02 loop 2400 on the EDI 837.
71
+ attr_reader :note
72
+ # @return [OpenStruct] Additional properties unmapped to the current class definition
73
+ attr_reader :additional_properties
74
+ # @return [Object]
75
+ attr_reader :_field_set
76
+ protected :_field_set
77
+
78
+ OMIT = Object.new
79
+
80
+ # @param procedure_code [String]
81
+ # @param modifiers [Array<CandidApiClient::Commons::Types::ProcedureModifier>]
82
+ # @param has_epsdt_indicator [Boolean] Maps to SV1-11 on the 837-P and Box 24H on the CMS-1500.
83
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
84
+ # will not be populated.
85
+ # @param has_family_planning_indicator [Boolean] Maps to SV1-12 on the 837-P and Box 24I on the CMS-1500.
86
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
87
+ # will not be populated.
88
+ # @param quantity [String] String representation of a Decimal that can be parsed by most libraries.
89
+ # For professional claims, a ServiceLine quantity cannot contain more than one
90
+ # digit of precision
91
+ # (Example: 1.1 is valid, 1.11 is not). For institutional claims, a ServiceLine
92
+ # quantity cannot contain
93
+ # more than three decimal digits of precision.
94
+ # @param units [CandidApiClient::Commons::Types::ServiceLineUnits]
95
+ # @param charge_amount_cents [Integer] The total amount charged for this service line, factoring in quantity. If
96
+ # procedure_code is updated and this is not, the system will attempt to set it
97
+ # based on chargemasters entries and the service line’s quantity. For example, if
98
+ # a single unit has an entry of 100 cents and 2 units were rendered, the
99
+ # charge_amount_cents will be set to 200, if there is no chargemaster entry, it
100
+ # will default to the amount set in this field.
101
+ # @param drug_identification [CandidApiClient::ServiceLines::V2::Types::DrugIdentification]
102
+ # @param place_of_service_code [CandidApiClient::Commons::Types::FacilityTypeCode] 837p Loop2300, SV105. This enum is not used or required for institutional
103
+ # claims. If your organization does not intend to submit claims with a different
104
+ # place of service at the service line level, this field should not be populated.
105
+ # 02 for telemedicine, 11 for in-person. Full list
106
+ # //www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set).
107
+ # @param description [String] A free-form description to clarify the related data elements and their content.
108
+ # Maps to SV1-01, C003-07 on a 837-P and SV2-02, C003-07 on a 837-I form.
109
+ # @param date_of_service [Date]
110
+ # @param end_date_of_service [Date]
111
+ # @param ordering_provider [CandidApiClient::EncounterProviders::V2::Types::OrderingProvider] Required when the service or supply was ordered by a provider who is different
112
+ # than the rendering provider for this service line.
113
+ # If not required by this implementation guide, do not send.
114
+ # @param test_results [Array<CandidApiClient::ServiceLines::V2::Types::TestResult>] Contains a list of test results. Test result types may map to MEA-02 on the
115
+ # 837-P (ex: Hemoglobin, Hematocrit).
116
+ # This is unused by 837-i and ignored for institutional service lines.
117
+ # No more than 5 MEA-02 test results may be submitted per service line.
118
+ # @param note [String] Maps to NTE02 loop 2400 on the EDI 837.
119
+ # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition
120
+ # @return [CandidApiClient::ServiceLines::V2::Types::ServiceLineCreateBase]
121
+ def initialize(procedure_code:, quantity:, units:, modifiers: OMIT, has_epsdt_indicator: OMIT,
122
+ has_family_planning_indicator: OMIT, charge_amount_cents: OMIT, drug_identification: OMIT, place_of_service_code: OMIT, description: OMIT, date_of_service: OMIT, end_date_of_service: OMIT, ordering_provider: OMIT, test_results: OMIT, note: OMIT, additional_properties: nil)
123
+ @procedure_code = procedure_code
124
+ @modifiers = modifiers if modifiers != OMIT
125
+ @has_epsdt_indicator = has_epsdt_indicator if has_epsdt_indicator != OMIT
126
+ @has_family_planning_indicator = has_family_planning_indicator if has_family_planning_indicator != OMIT
127
+ @quantity = quantity
128
+ @units = units
129
+ @charge_amount_cents = charge_amount_cents if charge_amount_cents != OMIT
130
+ @drug_identification = drug_identification if drug_identification != OMIT
131
+ @place_of_service_code = place_of_service_code if place_of_service_code != OMIT
132
+ @description = description if description != OMIT
133
+ @date_of_service = date_of_service if date_of_service != OMIT
134
+ @end_date_of_service = end_date_of_service if end_date_of_service != OMIT
135
+ @ordering_provider = ordering_provider if ordering_provider != OMIT
136
+ @test_results = test_results if test_results != OMIT
137
+ @note = note if note != OMIT
138
+ @additional_properties = additional_properties
139
+ @_field_set = {
140
+ "procedure_code": procedure_code,
141
+ "modifiers": modifiers,
142
+ "has_epsdt_indicator": has_epsdt_indicator,
143
+ "has_family_planning_indicator": has_family_planning_indicator,
144
+ "quantity": quantity,
145
+ "units": units,
146
+ "charge_amount_cents": charge_amount_cents,
147
+ "drug_identification": drug_identification,
148
+ "place_of_service_code": place_of_service_code,
149
+ "description": description,
150
+ "date_of_service": date_of_service,
151
+ "end_date_of_service": end_date_of_service,
152
+ "ordering_provider": ordering_provider,
153
+ "test_results": test_results,
154
+ "note": note
155
+ }.reject do |_k, v|
156
+ v == OMIT
157
+ end
158
+ end
159
+
160
+ # Deserialize a JSON object to an instance of ServiceLineCreateBase
161
+ #
162
+ # @param json_object [String]
163
+ # @return [CandidApiClient::ServiceLines::V2::Types::ServiceLineCreateBase]
164
+ def self.from_json(json_object:)
165
+ struct = JSON.parse(json_object, object_class: OpenStruct)
166
+ parsed_json = JSON.parse(json_object)
167
+ procedure_code = struct["procedure_code"]
168
+ modifiers = struct["modifiers"]
169
+ has_epsdt_indicator = struct["has_epsdt_indicator"]
170
+ has_family_planning_indicator = struct["has_family_planning_indicator"]
171
+ quantity = struct["quantity"]
172
+ units = struct["units"]
173
+ charge_amount_cents = struct["charge_amount_cents"]
174
+ if parsed_json["drug_identification"].nil?
175
+ drug_identification = nil
176
+ else
177
+ drug_identification = parsed_json["drug_identification"].to_json
178
+ drug_identification = CandidApiClient::ServiceLines::V2::Types::DrugIdentification.from_json(json_object: drug_identification)
179
+ end
180
+ place_of_service_code = struct["place_of_service_code"]
181
+ description = struct["description"]
182
+ date_of_service = (Date.parse(parsed_json["date_of_service"]) unless parsed_json["date_of_service"].nil?)
183
+ end_date_of_service = unless parsed_json["end_date_of_service"].nil?
184
+ Date.parse(parsed_json["end_date_of_service"])
185
+ end
186
+ if parsed_json["ordering_provider"].nil?
187
+ ordering_provider = nil
188
+ else
189
+ ordering_provider = parsed_json["ordering_provider"].to_json
190
+ ordering_provider = CandidApiClient::EncounterProviders::V2::Types::OrderingProvider.from_json(json_object: ordering_provider)
191
+ end
192
+ test_results = parsed_json["test_results"]&.map do |item|
193
+ item = item.to_json
194
+ CandidApiClient::ServiceLines::V2::Types::TestResult.from_json(json_object: item)
195
+ end
196
+ note = struct["note"]
197
+ new(
198
+ procedure_code: procedure_code,
199
+ modifiers: modifiers,
200
+ has_epsdt_indicator: has_epsdt_indicator,
201
+ has_family_planning_indicator: has_family_planning_indicator,
202
+ quantity: quantity,
203
+ units: units,
204
+ charge_amount_cents: charge_amount_cents,
205
+ drug_identification: drug_identification,
206
+ place_of_service_code: place_of_service_code,
207
+ description: description,
208
+ date_of_service: date_of_service,
209
+ end_date_of_service: end_date_of_service,
210
+ ordering_provider: ordering_provider,
211
+ test_results: test_results,
212
+ note: note,
213
+ additional_properties: struct
214
+ )
215
+ end
216
+
217
+ # Serialize an instance of ServiceLineCreateBase to a JSON object
218
+ #
219
+ # @return [String]
220
+ def to_json(*_args)
221
+ @_field_set&.to_json
222
+ end
223
+
224
+ # Leveraged for Union-type generation, validate_raw attempts to parse the given
225
+ # hash and check each fields type against the current object's property
226
+ # definitions.
227
+ #
228
+ # @param obj [Object]
229
+ # @return [Void]
230
+ def self.validate_raw(obj:)
231
+ obj.procedure_code.is_a?(String) != false || raise("Passed value for field obj.procedure_code is not the expected type, validation failed.")
232
+ obj.modifiers&.is_a?(Array) != false || raise("Passed value for field obj.modifiers is not the expected type, validation failed.")
233
+ obj.has_epsdt_indicator&.is_a?(Boolean) != false || raise("Passed value for field obj.has_epsdt_indicator is not the expected type, validation failed.")
234
+ obj.has_family_planning_indicator&.is_a?(Boolean) != false || raise("Passed value for field obj.has_family_planning_indicator is not the expected type, validation failed.")
235
+ obj.quantity.is_a?(String) != false || raise("Passed value for field obj.quantity is not the expected type, validation failed.")
236
+ obj.units.is_a?(CandidApiClient::Commons::Types::ServiceLineUnits) != false || raise("Passed value for field obj.units is not the expected type, validation failed.")
237
+ obj.charge_amount_cents&.is_a?(Integer) != false || raise("Passed value for field obj.charge_amount_cents is not the expected type, validation failed.")
238
+ obj.drug_identification.nil? || CandidApiClient::ServiceLines::V2::Types::DrugIdentification.validate_raw(obj: obj.drug_identification)
239
+ obj.place_of_service_code&.is_a?(CandidApiClient::Commons::Types::FacilityTypeCode) != false || raise("Passed value for field obj.place_of_service_code is not the expected type, validation failed.")
240
+ obj.description&.is_a?(String) != false || raise("Passed value for field obj.description is not the expected type, validation failed.")
241
+ obj.date_of_service&.is_a?(Date) != false || raise("Passed value for field obj.date_of_service is not the expected type, validation failed.")
242
+ obj.end_date_of_service&.is_a?(Date) != false || raise("Passed value for field obj.end_date_of_service is not the expected type, validation failed.")
243
+ obj.ordering_provider.nil? || CandidApiClient::EncounterProviders::V2::Types::OrderingProvider.validate_raw(obj: obj.ordering_provider)
244
+ obj.test_results&.is_a?(Array) != false || raise("Passed value for field obj.test_results is not the expected type, validation failed.")
245
+ obj.note&.is_a?(String) != false || raise("Passed value for field obj.note is not the expected type, validation failed.")
246
+ end
247
+ end
248
+ end
249
+ end
250
+ end
251
+ end
@@ -0,0 +1,243 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../commons/types/procedure_modifier"
4
+ require_relative "../../../commons/types/service_line_units"
5
+ require_relative "drug_identification"
6
+ require_relative "../../../commons/types/facility_type_code"
7
+ require "date"
8
+ require_relative "../../../encounter_providers/v_2/types/ordering_provider"
9
+ require_relative "test_result"
10
+ require "ostruct"
11
+ require "json"
12
+
13
+ module CandidApiClient
14
+ module ServiceLines
15
+ module V2
16
+ module Types
17
+ class ServiceLineCreateBaseBase
18
+ # @return [Array<CandidApiClient::Commons::Types::ProcedureModifier>]
19
+ attr_reader :modifiers
20
+ # @return [Boolean] Maps to SV1-11 on the 837-P and Box 24H on the CMS-1500.
21
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
22
+ # will not be populated.
23
+ attr_reader :has_epsdt_indicator
24
+ # @return [Boolean] Maps to SV1-12 on the 837-P and Box 24I on the CMS-1500.
25
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
26
+ # will not be populated.
27
+ attr_reader :has_family_planning_indicator
28
+ # @return [String] String representation of a Decimal that can be parsed by most libraries.
29
+ # For professional claims, a ServiceLine quantity cannot contain more than one
30
+ # digit of precision
31
+ # (Example: 1.1 is valid, 1.11 is not). For institutional claims, a ServiceLine
32
+ # quantity cannot contain
33
+ # more than three decimal digits of precision.
34
+ attr_reader :quantity
35
+ # @return [CandidApiClient::Commons::Types::ServiceLineUnits]
36
+ attr_reader :units
37
+ # @return [Integer] The total amount charged for this service line, factoring in quantity. If
38
+ # procedure_code is updated and this is not, the system will attempt to set it
39
+ # based on chargemasters entries and the service line’s quantity. For example, if
40
+ # a single unit has an entry of 100 cents and 2 units were rendered, the
41
+ # charge_amount_cents will be set to 200, if there is no chargemaster entry, it
42
+ # will default to the amount set in this field.
43
+ attr_reader :charge_amount_cents
44
+ # @return [CandidApiClient::ServiceLines::V2::Types::DrugIdentification]
45
+ attr_reader :drug_identification
46
+ # @return [CandidApiClient::Commons::Types::FacilityTypeCode] 837p Loop2300, SV105. This enum is not used or required for institutional
47
+ # claims. If your organization does not intend to submit claims with a different
48
+ # place of service at the service line level, this field should not be populated.
49
+ # 02 for telemedicine, 11 for in-person. Full list
50
+ # //www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set).
51
+ attr_reader :place_of_service_code
52
+ # @return [String] A free-form description to clarify the related data elements and their content.
53
+ # Maps to SV1-01, C003-07 on a 837-P and SV2-02, C003-07 on a 837-I form.
54
+ attr_reader :description
55
+ # @return [Date]
56
+ attr_reader :date_of_service
57
+ # @return [Date]
58
+ attr_reader :end_date_of_service
59
+ # @return [CandidApiClient::EncounterProviders::V2::Types::OrderingProvider] Required when the service or supply was ordered by a provider who is different
60
+ # than the rendering provider for this service line.
61
+ # If not required by this implementation guide, do not send.
62
+ attr_reader :ordering_provider
63
+ # @return [Array<CandidApiClient::ServiceLines::V2::Types::TestResult>] Contains a list of test results. Test result types may map to MEA-02 on the
64
+ # 837-P (ex: Hemoglobin, Hematocrit).
65
+ # This is unused by 837-i and ignored for institutional service lines.
66
+ # No more than 5 MEA-02 test results may be submitted per service line.
67
+ attr_reader :test_results
68
+ # @return [String] Maps to NTE02 loop 2400 on the EDI 837.
69
+ attr_reader :note
70
+ # @return [OpenStruct] Additional properties unmapped to the current class definition
71
+ attr_reader :additional_properties
72
+ # @return [Object]
73
+ attr_reader :_field_set
74
+ protected :_field_set
75
+
76
+ OMIT = Object.new
77
+
78
+ # @param modifiers [Array<CandidApiClient::Commons::Types::ProcedureModifier>]
79
+ # @param has_epsdt_indicator [Boolean] Maps to SV1-11 on the 837-P and Box 24H on the CMS-1500.
80
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
81
+ # will not be populated.
82
+ # @param has_family_planning_indicator [Boolean] Maps to SV1-12 on the 837-P and Box 24I on the CMS-1500.
83
+ # If the value is true, the box will be populated with "Y". Otherwise, the box
84
+ # will not be populated.
85
+ # @param quantity [String] String representation of a Decimal that can be parsed by most libraries.
86
+ # For professional claims, a ServiceLine quantity cannot contain more than one
87
+ # digit of precision
88
+ # (Example: 1.1 is valid, 1.11 is not). For institutional claims, a ServiceLine
89
+ # quantity cannot contain
90
+ # more than three decimal digits of precision.
91
+ # @param units [CandidApiClient::Commons::Types::ServiceLineUnits]
92
+ # @param charge_amount_cents [Integer] The total amount charged for this service line, factoring in quantity. If
93
+ # procedure_code is updated and this is not, the system will attempt to set it
94
+ # based on chargemasters entries and the service line’s quantity. For example, if
95
+ # a single unit has an entry of 100 cents and 2 units were rendered, the
96
+ # charge_amount_cents will be set to 200, if there is no chargemaster entry, it
97
+ # will default to the amount set in this field.
98
+ # @param drug_identification [CandidApiClient::ServiceLines::V2::Types::DrugIdentification]
99
+ # @param place_of_service_code [CandidApiClient::Commons::Types::FacilityTypeCode] 837p Loop2300, SV105. This enum is not used or required for institutional
100
+ # claims. If your organization does not intend to submit claims with a different
101
+ # place of service at the service line level, this field should not be populated.
102
+ # 02 for telemedicine, 11 for in-person. Full list
103
+ # //www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set).
104
+ # @param description [String] A free-form description to clarify the related data elements and their content.
105
+ # Maps to SV1-01, C003-07 on a 837-P and SV2-02, C003-07 on a 837-I form.
106
+ # @param date_of_service [Date]
107
+ # @param end_date_of_service [Date]
108
+ # @param ordering_provider [CandidApiClient::EncounterProviders::V2::Types::OrderingProvider] Required when the service or supply was ordered by a provider who is different
109
+ # than the rendering provider for this service line.
110
+ # If not required by this implementation guide, do not send.
111
+ # @param test_results [Array<CandidApiClient::ServiceLines::V2::Types::TestResult>] Contains a list of test results. Test result types may map to MEA-02 on the
112
+ # 837-P (ex: Hemoglobin, Hematocrit).
113
+ # This is unused by 837-i and ignored for institutional service lines.
114
+ # No more than 5 MEA-02 test results may be submitted per service line.
115
+ # @param note [String] Maps to NTE02 loop 2400 on the EDI 837.
116
+ # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition
117
+ # @return [CandidApiClient::ServiceLines::V2::Types::ServiceLineCreateBaseBase]
118
+ def initialize(quantity:, units:, modifiers: OMIT, has_epsdt_indicator: OMIT,
119
+ has_family_planning_indicator: OMIT, charge_amount_cents: OMIT, drug_identification: OMIT, place_of_service_code: OMIT, description: OMIT, date_of_service: OMIT, end_date_of_service: OMIT, ordering_provider: OMIT, test_results: OMIT, note: OMIT, additional_properties: nil)
120
+ @modifiers = modifiers if modifiers != OMIT
121
+ @has_epsdt_indicator = has_epsdt_indicator if has_epsdt_indicator != OMIT
122
+ @has_family_planning_indicator = has_family_planning_indicator if has_family_planning_indicator != OMIT
123
+ @quantity = quantity
124
+ @units = units
125
+ @charge_amount_cents = charge_amount_cents if charge_amount_cents != OMIT
126
+ @drug_identification = drug_identification if drug_identification != OMIT
127
+ @place_of_service_code = place_of_service_code if place_of_service_code != OMIT
128
+ @description = description if description != OMIT
129
+ @date_of_service = date_of_service if date_of_service != OMIT
130
+ @end_date_of_service = end_date_of_service if end_date_of_service != OMIT
131
+ @ordering_provider = ordering_provider if ordering_provider != OMIT
132
+ @test_results = test_results if test_results != OMIT
133
+ @note = note if note != OMIT
134
+ @additional_properties = additional_properties
135
+ @_field_set = {
136
+ "modifiers": modifiers,
137
+ "has_epsdt_indicator": has_epsdt_indicator,
138
+ "has_family_planning_indicator": has_family_planning_indicator,
139
+ "quantity": quantity,
140
+ "units": units,
141
+ "charge_amount_cents": charge_amount_cents,
142
+ "drug_identification": drug_identification,
143
+ "place_of_service_code": place_of_service_code,
144
+ "description": description,
145
+ "date_of_service": date_of_service,
146
+ "end_date_of_service": end_date_of_service,
147
+ "ordering_provider": ordering_provider,
148
+ "test_results": test_results,
149
+ "note": note
150
+ }.reject do |_k, v|
151
+ v == OMIT
152
+ end
153
+ end
154
+
155
+ # Deserialize a JSON object to an instance of ServiceLineCreateBaseBase
156
+ #
157
+ # @param json_object [String]
158
+ # @return [CandidApiClient::ServiceLines::V2::Types::ServiceLineCreateBaseBase]
159
+ def self.from_json(json_object:)
160
+ struct = JSON.parse(json_object, object_class: OpenStruct)
161
+ parsed_json = JSON.parse(json_object)
162
+ modifiers = struct["modifiers"]
163
+ has_epsdt_indicator = struct["has_epsdt_indicator"]
164
+ has_family_planning_indicator = struct["has_family_planning_indicator"]
165
+ quantity = struct["quantity"]
166
+ units = struct["units"]
167
+ charge_amount_cents = struct["charge_amount_cents"]
168
+ if parsed_json["drug_identification"].nil?
169
+ drug_identification = nil
170
+ else
171
+ drug_identification = parsed_json["drug_identification"].to_json
172
+ drug_identification = CandidApiClient::ServiceLines::V2::Types::DrugIdentification.from_json(json_object: drug_identification)
173
+ end
174
+ place_of_service_code = struct["place_of_service_code"]
175
+ description = struct["description"]
176
+ date_of_service = (Date.parse(parsed_json["date_of_service"]) unless parsed_json["date_of_service"].nil?)
177
+ end_date_of_service = unless parsed_json["end_date_of_service"].nil?
178
+ Date.parse(parsed_json["end_date_of_service"])
179
+ end
180
+ if parsed_json["ordering_provider"].nil?
181
+ ordering_provider = nil
182
+ else
183
+ ordering_provider = parsed_json["ordering_provider"].to_json
184
+ ordering_provider = CandidApiClient::EncounterProviders::V2::Types::OrderingProvider.from_json(json_object: ordering_provider)
185
+ end
186
+ test_results = parsed_json["test_results"]&.map do |item|
187
+ item = item.to_json
188
+ CandidApiClient::ServiceLines::V2::Types::TestResult.from_json(json_object: item)
189
+ end
190
+ note = struct["note"]
191
+ new(
192
+ modifiers: modifiers,
193
+ has_epsdt_indicator: has_epsdt_indicator,
194
+ has_family_planning_indicator: has_family_planning_indicator,
195
+ quantity: quantity,
196
+ units: units,
197
+ charge_amount_cents: charge_amount_cents,
198
+ drug_identification: drug_identification,
199
+ place_of_service_code: place_of_service_code,
200
+ description: description,
201
+ date_of_service: date_of_service,
202
+ end_date_of_service: end_date_of_service,
203
+ ordering_provider: ordering_provider,
204
+ test_results: test_results,
205
+ note: note,
206
+ additional_properties: struct
207
+ )
208
+ end
209
+
210
+ # Serialize an instance of ServiceLineCreateBaseBase to a JSON object
211
+ #
212
+ # @return [String]
213
+ def to_json(*_args)
214
+ @_field_set&.to_json
215
+ end
216
+
217
+ # Leveraged for Union-type generation, validate_raw attempts to parse the given
218
+ # hash and check each fields type against the current object's property
219
+ # definitions.
220
+ #
221
+ # @param obj [Object]
222
+ # @return [Void]
223
+ def self.validate_raw(obj:)
224
+ obj.modifiers&.is_a?(Array) != false || raise("Passed value for field obj.modifiers is not the expected type, validation failed.")
225
+ obj.has_epsdt_indicator&.is_a?(Boolean) != false || raise("Passed value for field obj.has_epsdt_indicator is not the expected type, validation failed.")
226
+ obj.has_family_planning_indicator&.is_a?(Boolean) != false || raise("Passed value for field obj.has_family_planning_indicator is not the expected type, validation failed.")
227
+ obj.quantity.is_a?(String) != false || raise("Passed value for field obj.quantity is not the expected type, validation failed.")
228
+ obj.units.is_a?(CandidApiClient::Commons::Types::ServiceLineUnits) != false || raise("Passed value for field obj.units is not the expected type, validation failed.")
229
+ obj.charge_amount_cents&.is_a?(Integer) != false || raise("Passed value for field obj.charge_amount_cents is not the expected type, validation failed.")
230
+ obj.drug_identification.nil? || CandidApiClient::ServiceLines::V2::Types::DrugIdentification.validate_raw(obj: obj.drug_identification)
231
+ obj.place_of_service_code&.is_a?(CandidApiClient::Commons::Types::FacilityTypeCode) != false || raise("Passed value for field obj.place_of_service_code is not the expected type, validation failed.")
232
+ obj.description&.is_a?(String) != false || raise("Passed value for field obj.description is not the expected type, validation failed.")
233
+ obj.date_of_service&.is_a?(Date) != false || raise("Passed value for field obj.date_of_service is not the expected type, validation failed.")
234
+ obj.end_date_of_service&.is_a?(Date) != false || raise("Passed value for field obj.end_date_of_service is not the expected type, validation failed.")
235
+ obj.ordering_provider.nil? || CandidApiClient::EncounterProviders::V2::Types::OrderingProvider.validate_raw(obj: obj.ordering_provider)
236
+ obj.test_results&.is_a?(Array) != false || raise("Passed value for field obj.test_results is not the expected type, validation failed.")
237
+ obj.note&.is_a?(String) != false || raise("Passed value for field obj.note is not the expected type, validation failed.")
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end