dzero 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +265 -0
  3. data/lib/dzero/segments/01_patient.rb +27 -0
  4. data/lib/dzero/segments/02_pharmacy_provider.rb +12 -0
  5. data/lib/dzero/segments/03_prescriber.rb +22 -0
  6. data/lib/dzero/segments/04_insurance.rb +29 -0
  7. data/lib/dzero/segments/05_coord_of_benefits.rb +27 -0
  8. data/lib/dzero/segments/06_workers_comp.rb +30 -0
  9. data/lib/dzero/segments/07_claim.rb +52 -0
  10. data/lib/dzero/segments/08_dur_pps.rb +17 -0
  11. data/lib/dzero/segments/09_coupon.rb +13 -0
  12. data/lib/dzero/segments/10_compound.rb +20 -0
  13. data/lib/dzero/segments/11_pricing.rb +26 -0
  14. data/lib/dzero/segments/12_prior_auth.rb +23 -0
  15. data/lib/dzero/segments/13_clinical.rb +19 -0
  16. data/lib/dzero/segments/14_additional_documentation.rb +25 -0
  17. data/lib/dzero/segments/15_facility.rb +16 -0
  18. data/lib/dzero/segments/16_narrative.rb +11 -0
  19. data/lib/dzero/segments/20_response_message.rb +11 -0
  20. data/lib/dzero/segments/21_response_status.rb +26 -0
  21. data/lib/dzero/segments/22_response_claim.rb +19 -0
  22. data/lib/dzero/segments/23_response_pricing.rb +55 -0
  23. data/lib/dzero/segments/24_response_dur_pps.rb +20 -0
  24. data/lib/dzero/segments/25_response_insurance.rb +18 -0
  25. data/lib/dzero/segments/26_response_prior_auth.rb +18 -0
  26. data/lib/dzero/segments/27_response_insurance_additional_documentation.rb +17 -0
  27. data/lib/dzero/segments/28_response_coord_of_benefits.rb +22 -0
  28. data/lib/dzero/segments/29_response_patient.rb +13 -0
  29. data/lib/dzero/segments/base.rb +128 -0
  30. data/lib/dzero/segments/concerns/parser.rb +18 -0
  31. data/lib/dzero/segments/concerns/serializer.rb +20 -0
  32. data/lib/dzero/test_support.rb +5 -0
  33. data/lib/dzero/transmissions/base.rb +47 -0
  34. data/lib/dzero/transmissions/concerns/parser.rb +23 -0
  35. data/lib/dzero/transmissions/concerns/segments_methods.rb +76 -0
  36. data/lib/dzero/transmissions/concerns/serializer.rb +11 -0
  37. data/lib/dzero/transmissions/groups/base.rb +59 -0
  38. data/lib/dzero/transmissions/groups/transaction_group.rb +3 -0
  39. data/lib/dzero/transmissions/groups/transmission_group.rb +11 -0
  40. data/lib/dzero/transmissions/request.rb +19 -0
  41. data/lib/dzero/transmissions/response.rb +17 -0
  42. data/lib/dzero/utils/fixed_width.rb +19 -0
  43. data/lib/dzero/utils/rejection_codes.rb +297 -0
  44. data/lib/dzero/utils/validator.rb +61 -0
  45. data/lib/dzero/version.rb +3 -0
  46. data/lib/dzero.rb +28 -0
  47. metadata +186 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '0889c270bd2f9cfe9505d504101d12addeb55162'
4
+ data.tar.gz: f96d26194929d27ffcfd78366337c9e47c1bf762
5
+ SHA512:
6
+ metadata.gz: 1d53f684c5ea68a1b1fdc2024d2dec97eeb1d2f12d97cff2eb05289a9f75af3321c04f6420b813233fc6cc56415842279fd87deca179395d8dd66bbb7eb67c43
7
+ data.tar.gz: ad88b00ad20a467bedd3b40270b2c19bfee2bab6cc828f4f4df6f0ba93a21a63d67194d4ad31cf457706c36b6c34b363acc04a35ea3e0c5b95d0e4a92b16af91
data/README.md ADDED
@@ -0,0 +1,265 @@
1
+ # DZero
2
+
3
+ DZero is a robust and easy-to-use NCPDP Telecommunications Standard D.0 Message **parser** and **serializer**.
4
+
5
+ 🍊Battle Tested at [Instacart](https://www.instacart.com/opensource)
6
+
7
+ ## Installation
8
+
9
+ Add this to your gemfile:
10
+ ```
11
+ gem 'dzero'
12
+ ```
13
+
14
+ And then run bundle install.
15
+
16
+ ## Features
17
+
18
+ - ✅ Complete field mapping for all **26** D.0 Segment types.
19
+ - This means you can access field values by a simple name instead of it's 2-character identifier. (ex: `claim_segment[:fill_number]` instead of `claim_segment['D3']`)
20
+ - ✅ Parse D.0 Requests or Responses with ease.
21
+ - ex: `DZero::Transmissions::Request.parse(your_raw_string)`
22
+ - ✅ Build D.0 Requests or Responses with ease.
23
+ - ex: `DZero::Transmissions::Request.new(...)` (see [Building](#Building) below)
24
+ - ✅ Supports multiple transaction groups
25
+ - ex: `request.transaction_groups[2].claim_segment`
26
+ - ✅ Serialize a D.0 message to JSON
27
+ - ex: `request.to_json`
28
+
29
+ ## Usage
30
+
31
+ ### Parsing and Manipulating
32
+
33
+ #### Parsing
34
+
35
+ ```ruby
36
+ require 'dzero'
37
+
38
+ request = DZero::Transmissions::Request.parse(raw_message_string)
39
+ ```
40
+
41
+ The above snippet will return a new instance of `DZero::Transmissions::Request`.
42
+
43
+ #### Reading the header
44
+
45
+ ```ruby
46
+ pp request.header
47
+ # =>
48
+ # {:bin_number=>"999999",
49
+ # :version=>"D0",
50
+ # :transaction_code=>"B1",
51
+ # :processor_control_number=>"",
52
+ # :transaction_count=>"1",
53
+ # :service_provider_id_qualifier=>"01",
54
+ # :service_provider_id=>"1111111111",
55
+ # :date_of_service=>"20181106",
56
+ # :software=>""}
57
+ ```
58
+
59
+ #### Reading a single segment
60
+
61
+ ```ruby
62
+ request.transmission_group.patient_segment
63
+ # => #<DZero::Segments::Patient>
64
+
65
+ request.transmission_group.insurance_segment
66
+ # => #<DZero::Segments::Insurance>
67
+
68
+ request.transaction_groups.first.claim_segment
69
+ # => #<DZero::Segments::Claim>
70
+
71
+ request.transaction_groups[2].claim_segment
72
+ # => #<DZero::Segments::Claim>
73
+ ```
74
+
75
+ #### Reading a field in a segment
76
+
77
+ Fields of a segment can be accessed via the `[]` method, which takes either a symbol or a string.
78
+
79
+ ```ruby
80
+ segment = request.transaction_groups.first.claim_segment
81
+ # => #<DZero::Segments::Claim>
82
+ segment[:segment_identification]
83
+ # => "07"
84
+ segment["AM"]
85
+ # => "07"
86
+ segment[:quantity_dispensed]
87
+ # => "2000"
88
+ segment["E7"]
89
+ # => "2000"
90
+ ```
91
+
92
+ #### Modifying a field in a segment
93
+
94
+ Fields of a segment can be accessed via the `[]` method, which takes either a symbol or a string. If a segment or field does not yet exist when it is attempted to be accessed, it will be created and added to the message.
95
+
96
+ ```ruby
97
+ segment = request.transaction_groups.first.claim_segment
98
+ segment[:quantity_dispensed]
99
+ # => "2000"
100
+ segment[:quantity_dispensed] = "9990"
101
+ # => "9990"
102
+ segment["E7"]
103
+ # => "9990"
104
+ segment["E7"] = "5555"
105
+ # => "5555"
106
+ segment[:quantity_dispensed]
107
+ # => "5555"
108
+ ```
109
+
110
+ #### Serializing to json
111
+
112
+ `Request`, `Response`, `TransmissionGroup`, `TransactionGroup`, and `Segment` all have **`to_json`** methods.
113
+
114
+ ```ruby
115
+ request.to_json
116
+ ```
117
+
118
+ **`to_json`** takes two options:
119
+ - **`:readable`** - if this is true, symbols will be used for the fields of a segment, instead of the field identifiers.
120
+ - **`:key_group_by_segment_sym`** - if this is true, groups will be objects instead of arrays of objects. A group object will be keyed by the segment identifiers it contains.
121
+
122
+ ### Building
123
+
124
+ For messages with a single transaction group, you can pass segments in with the **`segments`** argument. DZero will automatically filter the segments into the correct locations (either the **`transmission_group`** or the first **`transaction_group`**)
125
+
126
+ ```ruby
127
+ require 'dzero'
128
+
129
+ request = DZero::Transmissions::Request.new({
130
+ header: {
131
+ :bin_number=>"999999",
132
+ :version=>"D0",
133
+ :transaction_code=>"B1",
134
+ :processor_control_number=>"",
135
+ :transaction_count=>"1",
136
+ :service_provider_id_qualifier=>"01",
137
+ :service_provider_id=>"1111111111",
138
+ :date_of_service=>"20181106",
139
+ :software=>""
140
+ },
141
+ segments: [
142
+ DZero::Segments::Patient.build({
143
+ patient_first_name: 'AUSTIN',
144
+ patient_last_name: 'PIVARNIK',
145
+ patient_phone_number: '5555555555',
146
+ })
147
+ ]
148
+ })
149
+ ```
150
+
151
+ For more control over the structure of the message, you can manually construct the `transmission_group` and the `transaction_group`.
152
+
153
+ ```ruby
154
+ require 'dzero'
155
+
156
+ response = DZero::Transmissions::Response.new(
157
+ header: {
158
+ :bin_number=>"999999",
159
+ :version=>"D0",
160
+ :transaction_code=>"B1",
161
+ :processor_control_number=>"",
162
+ :transaction_count=>"1",
163
+ :service_provider_id_qualifier=>"01",
164
+ :service_provider_id=>"1111111111",
165
+ :date_of_service=>"20181106",
166
+ :software=>""
167
+ },
168
+ transmission_group: DZero::Transmissions::Groups::TransmissionGroup.new(
169
+ segments: [
170
+ DZero::Segments::ResponseMessage.build({
171
+ message: "TEST MESSAGE"
172
+ })
173
+ ]
174
+ ),
175
+ transaction_groups: [
176
+ DZero::Transmissions::Groups::TransactionGroup.new(
177
+ segments: [
178
+ DZero::Segments::ResponseStatus.build({
179
+ response_status: "C"
180
+ })
181
+ ]
182
+ ),
183
+ DZero::Transmissions::Groups::TransactionGroup.new(
184
+ segments: [
185
+ DZero::Segments::ResponseStatus.build({
186
+ response_status: "R"
187
+ })
188
+ ]
189
+ )
190
+ ]
191
+ )
192
+ ```
193
+
194
+ ### Stringifying a message
195
+
196
+ To render an instance of `Request` or `Response` into a D.0 string, simply call `#to_s` on the instance.
197
+
198
+ ```ruby
199
+ request.to_s
200
+ # => "999999D0B1 1011111111111 20181106 \u001E\u001CAM01\u001CCAAUSTIN\u001CCBPIVARNIK\u001CCQ5555555555"
201
+ ```
202
+
203
+ ### Serializing a message to JSON
204
+
205
+ ```rb
206
+ request.to_json(readable: true, key_group_by_segment_sym: true)
207
+ # => {
208
+ # "header": {
209
+ # "bin_number": "999999",
210
+ # "version": "D0",
211
+ # "transaction_code": "B1",
212
+ # "processor_control_number": "",
213
+ # "transaction_count": "1",
214
+ # "service_provider_id_qualifier": "01",
215
+ # "service_provider_id": "9999999999",
216
+ # "date_of_service": "11282018",
217
+ # "software": ""
218
+ # },
219
+ # "transmission_group": {
220
+ # "patient": {
221
+ # "segment_identification": "01",
222
+ # "patient_first_name": "AUSTIN",
223
+ # "patient_last_name": "PIVARNIK",
224
+ # "patient_street_address": "50 BEALE ST",
225
+ # "patient_city": "SAN FRANCISCO",
226
+ # "patient_state_or_province": "CA",
227
+ # "patient_zip_postal_code": "94105",
228
+ # "patient_phone_number": "5555555555"
229
+ # }
230
+ # },
231
+ # "transaction_groups": [
232
+ # {
233
+ # "claim": {
234
+ # "segment_identification": "07",
235
+ # "prescription_reference_number_qualifier": "1",
236
+ # "prescription_reference_number": "9999999999",
237
+ # "product_service_id_qualifier": "03",
238
+ # "product_service_id": "99999999999",
239
+ # "quantity_dispensed": "2000",
240
+ # "fill_number": "0",
241
+ # "days_supply": "1",
242
+ # "compound_code": "1",
243
+ # "dispense_as_written_product_selection_code": "0",
244
+ # "date_prescription_written": "20181025",
245
+ # "number_of_refills_authorized": "99",
246
+ # "prescription_origin_code": "1",
247
+ # "unit_of_measure": "EA",
248
+ # "level_of_service": "0",
249
+ # "patient_assignment_indicator": "Y",
250
+ # "pharmacy_service_type": "1"
251
+ # },
252
+ # "pricing": {
253
+ # "segment_identification": "11",
254
+ # "ingredient_cost_submitted": "A",
255
+ # "dispensing_fee_submitted": "{",
256
+ # "patient_paid_amount_submitted": "{",
257
+ # "percentage_sales_tax_rate_submitted": "1750{",
258
+ # "usual_and_customary_charge": "A",
259
+ # "gross_amount_due": "A",
260
+ # "basis_of_cost_determination": "01"
261
+ # }
262
+ # }
263
+ # ]
264
+ # }
265
+ ```
@@ -0,0 +1,27 @@
1
+ module DZero::Segments
2
+ class Patient < Base
3
+ Base.register_segment(self, identifier: '01')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'CX' => :patient_id_qualifier,
8
+ 'CY' => :patient_id,
9
+ 'C4' => :date_of_birth,
10
+ 'C5' => :patient_gender_code,
11
+ 'CA' => :patient_first_name,
12
+ 'CB' => :patient_last_name,
13
+ 'CM' => :patient_street_address,
14
+ 'CN' => :patient_city,
15
+ 'CO' => :patient_state_or_province,
16
+ 'CP' => :patient_zip_postal_code,
17
+ 'CQ' => :patient_phone_number,
18
+ 'C7' => :place_of_service,
19
+ 'CZ' => :employer_id,
20
+ '1C' => :smoker_non_smoker_code,
21
+ '2C' => :pregnancy_indicator,
22
+ 'HN' => :patient_email_address,
23
+ '4X' => :patient_residence,
24
+ })
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ module DZero::Segments
2
+ class PharmacyProvider < Base
3
+ Base.register_segment(self, identifier: '02')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'EY' => :provider_id_qualifier,
8
+ 'E9' => :provider_id,
9
+ })
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ module DZero::Segments
2
+ class Prescriber < Base
3
+ Base.register_segment(self, identifier: '03')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'EZ' => :prescriber_id_qualifier,
8
+ 'DB' => :prescriber_id,
9
+ 'DR' => :prescriber_last_name,
10
+ 'PM' => :prescriber_phone_number,
11
+ '2E' => :primary_care_provider_id_qualifier,
12
+ 'DL' => :primary_care_provider_id,
13
+ '4E' => :primary_care_provider_last_name,
14
+ '2J' => :prescriber_first_name,
15
+ '2K' => :prescriber_street_address,
16
+ '2M' => :prescriber_city_address,
17
+ '2N' => :prescriber_state_province_address,
18
+ '2P' => :prescriber_zip_postal_zone,
19
+ })
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ module DZero::Segments
2
+ class Insurance < Base
3
+ Base.register_segment(self, identifier: '04')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'C2' => :cardholder_id,
8
+ 'CC' => :cardholder_first_name,
9
+ 'CD' => :cardholder_last_name,
10
+ 'CE' => :home_plan,
11
+ 'FO' => :plan_id,
12
+ 'C9' => :eligibility_clarification_code,
13
+ 'C1' => :group_id,
14
+ 'C3' => :person_code,
15
+ 'C6' => :patient_relationship_code,
16
+ 'MG' => :other_payer_bin_number,
17
+ 'MH' => :other_payer_processor_control_number,
18
+ 'NU' => :other_payer_cardholder_id,
19
+ 'MJ' => :other_payer_group_id,
20
+ '2A' => :medigap_id,
21
+ '2B' => :medicaid_indicator,
22
+ '2D' => :provider_accept_assignment_indicator,
23
+ 'G2' => :cms_part_d_defined_qualified_facility,
24
+ 'N5' => :medicaid_id_number,
25
+ 'N6' => :medicaid_agency_number,
26
+ })
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module DZero::Segments
2
+ class CoordOfBenefits < Base
3
+ Base.register_segment(self, identifier: '05')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ '4C' => :coordination_of_benefits_other_payments_count,
8
+ '5C' => :other_payer_coverage_type,
9
+ '6C' => :other_payer_id_qualifier,
10
+ '7C' => :other_payer_id,
11
+ 'E8' => :other_payer_date,
12
+ 'A7' => :internal_control_number,
13
+ 'HB' => :other_payer_amount_paid_count,
14
+ 'HC' => :other_payer_amount_paid_qualifier,
15
+ 'DV' => :other_payer_amount_paid,
16
+ '5E' => :other_payer_reject_count,
17
+ '6E' => :other_payer_reject_code,
18
+ 'NR' => :other_payer_patient_responsibility_amount_count,
19
+ 'NP' => :other_payer_patient_responsibility_amount_qualifier,
20
+ 'NQ' => :other_payer_patient_responsibility_amount,
21
+ 'MU' => :benefit_stage_count,
22
+ 'MV' => :benefit_stage_qualifier,
23
+ 'MW' => :benefit_stage_amount,
24
+ })
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ module DZero::Segments
2
+ class WorkersComp < Base
3
+ Base.register_segment(self, identifier: '06')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'DY' => :date_of_injury,
8
+ 'CF' => :employer_name,
9
+ 'CG' => :employer_street_address,
10
+ 'CH' => :employer_city_address,
11
+ 'CI' => :employer_state_province_address,
12
+ 'CJ' => :employer_zip_postal_code,
13
+ 'CK' => :employer_phone_number,
14
+ 'CL' => :employer_contact_name,
15
+ 'CR' => :carrier_id,
16
+ 'DZ' => :claim_reference_id,
17
+ 'TR' => :billing_entity_type_indicator,
18
+ 'TS' => :pay_to_qualifier,
19
+ 'TT' => :pay_to_id,
20
+ 'TU' => :pay_to_name,
21
+ 'TV' => :pay_to_street_address,
22
+ 'TW' => :pay_to_city_address,
23
+ 'TX' => :pay_to_state_province_address,
24
+ 'TY' => :pay_to_zip_postal_zone,
25
+ 'TZ' => :generic_equivalent_product_id_qualifier,
26
+ 'UA' => :generic_equivalent_product_id,
27
+ })
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,52 @@
1
+ module DZero::Segments
2
+ class Claim < Base
3
+ Base.register_segment(self, identifier: '07')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'EM' => :prescription_reference_number_qualifier,
8
+ 'D2' => :prescription_reference_number,
9
+ 'E1' => :product_service_id_qualifier,
10
+ 'D7' => :product_service_id,
11
+ 'EN' => :associated_prescription_reference_number,
12
+ 'EP' => :associated_prescription_date,
13
+ 'SE' => :procedure_modifier_code_count,
14
+ 'ER' => :procedure_modifier_code,
15
+ 'E7' => :quantity_dispensed,
16
+ 'D3' => :fill_number,
17
+ 'D5' => :days_supply,
18
+ 'D6' => :compound_code,
19
+ 'D8' => :dispense_as_written_product_selection_code,
20
+ 'DE' => :date_prescription_written,
21
+ 'DF' => :number_of_refills_authorized,
22
+ 'DJ' => :prescription_origin_code,
23
+ 'NX' => :submission_clarification_code_count,
24
+ 'DK' => :submission_clarification_code,
25
+ 'ET' => :quantity_prescribed,
26
+ 'C8' => :other_coverage_code,
27
+ 'DT' => :special_packaging_indicator,
28
+ 'EJ' => :originally_prescribed_id_qualifier,
29
+ 'EA' => :originally_prescribed_code,
30
+ 'EB' => :originally_prescribed_quantity,
31
+ 'CW' => :alternate_id,
32
+ 'EK' => :scheduled_prescription_id_number,
33
+ '28' => :unit_of_measure,
34
+ 'DI' => :level_of_service,
35
+ 'EU' => :prior_authorization_type_code,
36
+ 'EV' => :prior_authorization_number_submitted,
37
+ 'EW' => :intermediary_authorization_type_id,
38
+ 'EX' => :intermediary_authorization_id,
39
+ 'HD' => :dispensing_status,
40
+ 'HF' => :quantity_intended_to_be_dispensed,
41
+ 'HG' => :days_supply_intended_to_be_dispensed,
42
+ 'NV' => :delay_reason_code,
43
+ 'K5' => :transaction_reference_number,
44
+ 'MT' => :patient_assignment_indicator,
45
+ 'E2' => :route_of_administration,
46
+ 'G1' => :compound_type,
47
+ 'N4' => :medicade_icn,
48
+ 'U7' => :pharmacy_service_type,
49
+ })
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ module DZero::Segments
2
+ class DurPps < Base
3
+ Base.register_segment(self, identifier: '08')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ '7E' => :dur_pps_code_counter,
8
+ 'E4' => :reason_for_service_code,
9
+ 'E5' => :professional_service_code,
10
+ 'E6' => :result_of_service_code,
11
+ '8E' => :dur_pps_level_of_effort,
12
+ 'J9' => :dur_co_agent_id_qualifier,
13
+ 'H6' => :dur_co_agent_id,
14
+ })
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module DZero::Segments
2
+ class Coupon < Base
3
+ Base.register_segment(self, identifier: '09')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'KE' => :coupon_type,
8
+ 'ME' => :coupon_number,
9
+ 'NE' => :coupon_value_amount,
10
+ })
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ module DZero::Segments
2
+ class Compound < Base
3
+ Base.register_segment(self, identifier: '10')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'EF' => :compound_dosage_form_description_code,
8
+ 'EG' => :compound_dispensing_unit_form_indicator,
9
+ 'EC' => :compound_ingredient_component_count,
10
+ 'RE' => :compound_product_id_qualifier,
11
+ 'TE' => :compound_product_id,
12
+ 'ED' => :compound_ingredient_quantity,
13
+ 'EE' => :compound_ingredient_drug_cost,
14
+ 'UE' => :compound_ingredient_basis_of_cost_determination,
15
+ '2G' => :compound_ingredient_modifier_code_count,
16
+ '2H' => :compound_ingredient_modifier_code,
17
+ })
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ module DZero::Segments
2
+ class Pricing < Base
3
+ Base.register_segment(self, identifier: '11')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'D9' => :ingredient_cost_submitted,
8
+ 'DC' => :dispensing_fee_submitted,
9
+ 'BE' => :professional_service_fee_submitted,
10
+ 'DX' => :patient_paid_amount_submitted,
11
+ 'E3' => :incentive_amount_submitted,
12
+ 'H7' => :other_amount_claimed_submitted_count,
13
+ 'H8' => :other_amount_claimed_submitted_qualifier,
14
+ 'H9' => :other_amount_claimed_submitted,
15
+ 'HA' => :flat_sales_tax_amount_submitted,
16
+ 'GE' => :percentage_sales_tax_amount_submitted,
17
+ 'HE' => :percentage_sales_tax_rate_submitted,
18
+ 'JE' => :percentage_sales_tax_basis_submitted,
19
+ 'DQ' => :usual_and_customary_charge,
20
+ 'DU' => :gross_amount_due,
21
+ 'DN' => :basis_of_cost_determination,
22
+ 'N3' => :medicaid_paid_amount ,
23
+ })
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module DZero::Segments
2
+ class PriorAuth < Base
3
+ Base.register_segment(self, identifier: '12')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'PA' => :request_type,
8
+ 'PB' => :request_period_date_begin,
9
+ 'PC' => :request_period_date_end,
10
+ 'PD' => :basis_of_request,
11
+ 'PE' => :authorized_representative_first_name,
12
+ 'PF' => :authorized_rep_last_name,
13
+ 'PG' => :authorized_rep_street_address,
14
+ 'PH' => :authorized_rep_city,
15
+ 'PJ' => :authorized_rep_state_province,
16
+ 'PK' => :authorized_rep_zip_postal_code,
17
+ 'PY' => :prior_authorization_number_assigned,
18
+ 'F3' => :authorization_number,
19
+ 'PP' => :prior_authorization_supporting_documentation,
20
+ })
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module DZero::Segments
2
+ class Clinical < Base
3
+ Base.register_segment(self, identifier: '13')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'VE' => :diagnosis_code_count,
8
+ 'WE' => :diagnosis_code_qualifier,
9
+ 'DO' => :diagnosis_code,
10
+ 'XE' => :clinical_information_counter,
11
+ 'ZE' => :measurement_date,
12
+ 'H1' => :measurement_time,
13
+ 'H2' => :measurement_dimension,
14
+ 'H3' => :measurement_unit,
15
+ 'H4' => :measurement_value,
16
+ })
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module DZero::Segments
2
+ class AdditionalDocumentation < Base
3
+ Base.register_segment(self, identifier: '14')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ '2Q' => :additional_documentation_type_id,
8
+ '2V' => :request_period_begin_date,
9
+ '2W' => :request_period_recert_revised_date,
10
+ '2U' => :request_status,
11
+ '2S' => :length_of_need_qualifier,
12
+ '2R' => :length_of_need,
13
+ '2T' => :prescriber_supplier_date_signed,
14
+ '2X' => :supporting_documentation,
15
+ '2Z' => :question_number_letter_count,
16
+ '4B' => :question_number_letter,
17
+ '4D' => :question_percent_response,
18
+ '4G' => :question_date_response,
19
+ '4H' => :question_dollar_amount_response,
20
+ '4J' => :question_numeric_response,
21
+ '4K' => :question_alphanumeric_response,
22
+ })
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ module DZero::Segments
2
+ class Facility < Base
3
+ Base.register_segment(self, identifier: '15')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ '8C' => :facility_id,
8
+ '3Q' => :facility_name,
9
+ '3U' => :facility_street_address,
10
+ '5J' => :facility_city_address,
11
+ '3V' => :facility_state_province_address,
12
+ '6D' => :facility_zip_postal_zone,
13
+ })
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module DZero::Segments
2
+ class Narrative < Base
3
+ Base.register_segment(self, identifier: '16')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'BM' => :narrative_message,
8
+ })
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module DZero::Segments
2
+ class ResponseMessage < Base
3
+ Base.register_segment(self, identifier: '20')
4
+
5
+ def self.field_id_to_symbol
6
+ super.merge({
7
+ 'F4' => :message,
8
+ })
9
+ end
10
+ end
11
+ end