dzero 0.1.1

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 (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