era_835_parser 0.1.5 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f390e0d896ab2ffae2f577f17a0d5ac281e5a128ce593c02c061cc0d4bcb2487
4
- data.tar.gz: 1db0072a61ee30ec025f89d5697db2659f15835e293610f3654b0ffe5e7f2b07
3
+ metadata.gz: ea38eaeef52c3f1cde616b4691ec56b7cf8ee4162c28616da3719e6d22e66784
4
+ data.tar.gz: 40cfc3e0d4450234d550b0c46b15fffb8f3e30813bcd751b75af2349584929cc
5
5
  SHA512:
6
- metadata.gz: 63b6bf18aeee6074198544b4bb407e6bde2c0d404485070745b2e95bea9df5112795b77d9a728d077ab56926293de14915d4967de55ff9399094b4aa6441974a
7
- data.tar.gz: 6ae02ab2eabefd5c196463e7c15ef6726d245691842c2482bad12bd40aca6cd749b523cbd3e56a441e5a312997256e0570bf48c0888e523d1e31cb1ab318608a
6
+ metadata.gz: 14b8691233df6d0ca59b76fca3e773357654870b1db678451c481d6d4dba0cd4b503c614419441d8ffb06e2049f50d9bc9b40aa40e54c05defaf117950e5f4a1
7
+ data.tar.gz: ef3eb716b7c846a79e07daf88552dfa069ebcbecdb99e20cd91c33ac00f4a16a66efc6da594108e514df1e97df9be785b9d6cf2647671c9710761dc1570f4b7c
@@ -60,6 +60,7 @@ module Era835Parser
60
60
  claim_date_start = false
61
61
  claim_date_end = false
62
62
  service_date = false
63
+ floating_adjustment_group_code = nil
63
64
 
64
65
  open(file_path).readlines.each do |line|
65
66
  if line.include?("ISA")
@@ -131,8 +132,14 @@ module Era835Parser
131
132
  individual_line_item[:total_adjustment_amount] = (/\d+\/\d+\/\d+\s\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+/.match(line)[0].strip.split(" ")[4].to_f * 100).round().to_i if !/\d+\/\d+\/\d+\s\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+/.match(line).nil?
132
133
  individual_line_item[:remarks] = line.gsub(/\d+\/\d+\/\d+\s\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+/, "").strip if !/\d+\/\d+\/\d+\s\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+\s+\-?\d+\.\d+/.match(line).nil?
133
134
  if line_items.nil?
135
+ if individual_line_item[:service_date].nil?
136
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
137
+ end
134
138
  line_items[0] = individual_line_item
135
139
  else
140
+ if individual_line_item[:service_date].nil?
141
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
142
+ end
136
143
  line_items[line_items.count] = individual_line_item
137
144
  end
138
145
  next_line_line_item = false
@@ -502,6 +509,8 @@ module Era835Parser
502
509
  # puts "Date Time Qualifier: #{element}"
503
510
  if element == "050"
504
511
  receive_date = true
512
+ elsif element == "150"
513
+ service_date = true
505
514
  elsif element == "232"
506
515
  claim_date_start = true
507
516
  elsif element == "233"
@@ -596,8 +605,14 @@ module Era835Parser
596
605
  when 1
597
606
  if individual_line_item != {}
598
607
  if line_items.nil?
608
+ if individual_line_item[:service_date].nil?
609
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
610
+ end
599
611
  line_items[0] = individual_line_item
600
612
  else
613
+ if individual_line_item[:service_date].nil?
614
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
615
+ end
601
616
  line_items[line_items.count] = individual_line_item
602
617
  end
603
618
  individual_era[:line_items] = line_items
@@ -787,16 +802,23 @@ module Era835Parser
787
802
  individual_adjustment_group_item = Hash.new
788
803
  individual_adjustment_group_item[:adjustment_group_code] = element.strip
789
804
  individual_adjustment_group_item[:adjustment_group] = ADJUSTMENT_GROUP_CODES[element.strip]
790
- when 2
805
+ floating_adjustment_group_code = element.strip
806
+ when 2,5,8,11,14,17
791
807
  # Adjustment Reason Code
808
+ if index > 2
809
+ individual_adjustment_group_item = Hash.new
810
+ individual_adjustment_group_item[:adjustment_group_code] = floating_adjustment_group_code
811
+ individual_adjustment_group_item[:adjustment_group] = ADJUSTMENT_GROUP_CODES[floating_adjustment_group_code]
812
+ end
792
813
  # puts "Adjustment Reason Code: #{element}"
793
814
  individual_adjustment_group_item[:reason_code] = element.strip
794
815
  individual_adjustment_group_item[:translated_reason_code] = ADJUSTMENT_CODES[element.strip]
795
- when 3
816
+ when 3,6,9,12,15,18
796
817
  # Adjustment Amount
797
818
  # puts "Adjustment Amount: #{element}"
798
819
  #
799
820
  individual_adjustment_group_item[:adjustment_amount] = (element.to_f * 100).round().to_i
821
+ # puts individual_adjustment_group_item
800
822
  if adjustment_groups.nil?
801
823
  adjustment_groups[0] = individual_adjustment_group_item
802
824
  else
@@ -808,7 +830,7 @@ module Era835Parser
808
830
  adjustment_amount_tally += v[:adjustment_amount]
809
831
  end
810
832
  individual_line_item[:total_adjustment_amount] = adjustment_amount_tally
811
- when 4
833
+ when 4,7,10,13,16,19
812
834
  # QUANTITY
813
835
  # puts "QUANTITY: #{element}"
814
836
  end
@@ -884,8 +906,14 @@ module Era835Parser
884
906
  svc_counter += 1
885
907
  if individual_line_item != {} && svc_counter > 1
886
908
  if line_items.nil?
909
+ if individual_line_item[:service_date].nil?
910
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
911
+ end
887
912
  line_items[0] = individual_line_item
888
913
  else
914
+ if individual_line_item[:service_date].nil?
915
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
916
+ end
889
917
  line_items[line_items.count] = individual_line_item
890
918
  end
891
919
  individual_era[:line_items] = line_items
@@ -959,8 +987,14 @@ module Era835Parser
959
987
  else
960
988
  if individual_line_item != {}
961
989
  if line_items.nil?
990
+ if individual_line_item[:service_date].nil?
991
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
992
+ end
962
993
  line_items[0] = individual_line_item
963
994
  else
995
+ if individual_line_item[:service_date].nil?
996
+ individual_line_item[:service_date] = individual_era[:claim_statement_period_start]
997
+ end
964
998
  line_items[line_items.count] = individual_line_item
965
999
  end
966
1000
  individual_era[:line_items] = line_items
@@ -977,16 +1011,19 @@ module Era835Parser
977
1011
  line_items = ''
978
1012
  if !individual_era[:line_items].nil?
979
1013
  individual_era[:line_items].each do |line_item_counter, line_item|
980
- if line_item[:service_date].nil?
981
- line_items += "#{" " * (22)}#{individual_era[:claim_statement_period_start]} #{line_item[:cpt_code]}#{" " * (7 - get_length(line_item[:cpt_code]))}#{'%.2f' % (line_item[:charge_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:charge_amount].to_f / 100)))}#{'%.2f' % (line_item[:payment_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:payment_amount].to_f / 100)))}#{'%.2f' % (line_item[:total_adjustment_amount].to_f / 100)}#{" " * (15 - get_length('%.2f' % (line_item[:total_adjustment_amount].to_f / 100)))}#{truncate(line_item[:remarks], 82)}\n\n"
1014
+ if line_item[:remarks].nil?
1015
+ remark = "NO REMARKS"
982
1016
  else
983
- line_items += "#{" " * (22)}#{line_item[:service_date]} #{line_item[:cpt_code]}#{" " * (7 - get_length(line_item[:cpt_code]))}#{'%.2f' % (line_item[:charge_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:charge_amount].to_f / 100)))}#{'%.2f' % (line_item[:payment_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:payment_amount].to_f / 100)))}#{'%.2f' % (line_item[:total_adjustment_amount].to_f / 100)}#{" " * (15 - get_length('%.2f' % (line_item[:total_adjustment_amount].to_f / 100)))}#{truncate(line_item[:remarks], 82)}\n\n"
1017
+ remark = truncate(line_item[:remarks], 82)
984
1018
  end
1019
+ line_items += "#{" " * (22)}#{line_item[:service_date]} #{line_item[:cpt_code]}#{" " * (7 - get_length(line_item[:cpt_code]))}#{'%.2f' % (line_item[:charge_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:charge_amount].to_f / 100)))}#{'%.2f' % (line_item[:payment_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (line_item[:payment_amount].to_f / 100)))}#{'%.2f' % (line_item[:total_adjustment_amount].to_f / 100)}#{" " * (15 - get_length('%.2f' % (line_item[:total_adjustment_amount].to_f / 100)))}#{remark}\n\n"
1020
+
985
1021
  if !line_item[:adjustment_groups].nil?
986
1022
  line_item[:adjustment_groups].each do |adjustment_group_counter, adjustment_group|
987
- line_items += " Adjustment Group Adj Amt Translated Reason Code\n"
1023
+ line_items += " Adjustment Group Adj Amt Translated Reason Code\n" if adjustment_group_counter == 0
988
1024
  reason_code = adjustment_group[:translated_reason_code].nil? ? '' : adjustment_group[:translated_reason_code].upcase
989
1025
  line_items += " #{adjustment_group[:adjustment_group].upcase}#{" " * (28 - get_length(adjustment_group[:adjustment_group]))}#{'%.2f' % (adjustment_group[:adjustment_amount].to_f / 100)}#{" " * (8 - get_length('%.2f' % (adjustment_group[:adjustment_amount].to_f / 100)))}#{truncate(reason_code, 84)}\n"
1026
+ line_items += "\n" if line_item[:adjustment_groups].length == (adjustment_group_counter + 1)
990
1027
  end
991
1028
  end
992
1029
  end
@@ -997,7 +1034,13 @@ module Era835Parser
997
1034
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_address]}\n"
998
1035
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_city]},#{check[:payer_state]} #{check[:payer_zip_code]}\n"
999
1036
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}Tax ID: #{check[:payer_tax_id]}\n"
1000
- era_text += "#{" " * (96)}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n\n"
1037
+
1038
+ if !individual_era[:claim_statement_period_end].nil? && !individual_era[:claim_statement_period_start].nil?
1039
+ era_text += "#{" " * (96)}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n"
1040
+ era_text += "#{" " * (96)}Claim Statement Period: #{individual_era[:claim_statement_period_start]} - #{individual_era[:claim_statement_period_end]}\n\n"
1041
+ else
1042
+ era_text += "#{" " * (96)}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n\n"
1043
+ end
1001
1044
  if line_items.length > 0
1002
1045
  era_text += "#{" " * (10)}Line Item: Svc Date CPT Charge Amt Payment Amt Total Adj Amt Remarks\n"
1003
1046
  era_text += line_items
@@ -1,3 +1,3 @@
1
1
  module Era835Parser
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -3,7 +3,6 @@ require 'spec_helper'
3
3
  RSpec.describe Era835Parser::Parser do
4
4
 
5
5
  describe '#parse' do
6
-
7
6
  context 'Machine readable' do
8
7
  context 'example_1.835' do
9
8
  # https://www.bluecrossnc.com/sites/default/files/document/attachment/providers/public/pdfs/835_5010_v2.6%20Claim%20Payment%20Advice.pdf
@@ -109,7 +108,7 @@ RSpec.describe Era835Parser::Parser do
109
108
 
110
109
  context 'Line item #0' do
111
110
  it 'returns the Date of service (string mm/dd/yyyy)' do
112
- expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:service_date]).to eq(nil)
111
+ expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:service_date]).to eq("03/07/2010")
113
112
  end
114
113
  it 'returns the CPT code' do
115
114
  expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:cpt_code]).to eq(nil)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: era_835_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin S. Dias