era_835_parser 0.1.9 → 0.1.11

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: 5b3817227f96a56601ede81601779419d30a6b0f420446539fcf595de56bb398
4
- data.tar.gz: '08b6b465d3fa6a3ffc988b71d2e111cf379a105f4fc8b8c9dc7e9ef974c739c4'
3
+ metadata.gz: bdc09dc9f3656f4155cf027e2ddc655167840ad8d4e06b0e09cc3658c4eb1309
4
+ data.tar.gz: 3b37bb69fc93fc5bde9125ad62b48d720402a848da1837535fcf928f0edf2bb5
5
5
  SHA512:
6
- metadata.gz: ceaaeddc9a0c5946349115f9ffba772e083aaf6888ee0e76bb861eef460510822b110dbcdf72109ea9746a0e607148db0dc74720eb8bd2afa8066cc694bdd8f1
7
- data.tar.gz: e0646f75463ea9582022c466b257f0bf2838ab998d9b9be44c9af08c9ac2f0cb14347db84700ce893594fa64be7329c5fef3fc383f7913fdecc0d27e9da0eee6
6
+ metadata.gz: a4e30df5a5cb6b819bc399d1fc6072f66ec6c950bc9abb33cd5c98d038aff1025dfd14c860719bfa9db4c1f7adbdee81131dd03ffaa7ad729661906af89f6a35
7
+ data.tar.gz: 158d3d082f2eb8b13af67845fd65dcacef8a12f342770e9ce2f2a1aeb8203092892f9f2341238f6d295c85f6dd534d12adf9d0758651f74dd67a90c774fd864b
data/README.md CHANGED
@@ -66,6 +66,7 @@ if !era[:checks].nil?
66
66
  puts line_item[:total_adjustment_amount] # Total adjustment amount (integer)
67
67
  puts line_item[:remark_code] # Remark code
68
68
  puts line_item[:remarks] # Remarks
69
+ puts line_item[:reference_number] # Reference number
69
70
  if !line_item[:adjustment_groups].nil?
70
71
  line_item[:adjustment_groups].each do |adjustment_group_counter, adjustment_group|
71
72
  puts adjustment_group[:adjustment_group] # Adjustment group
@@ -66,6 +66,7 @@ module Era835Parser
66
66
  claim_date_end = false
67
67
  service_date = false
68
68
  floating_adjustment_group_code = nil
69
+ returned_reference_number = false
69
70
 
70
71
  file_or_file_path = !file.nil? ? file : file_path
71
72
  opened_file = file_or_file_path.respond_to?(:write) ? file_or_file_path : open(file_or_file_path)
@@ -294,7 +295,6 @@ module Era835Parser
294
295
  # puts element_type
295
296
  # puts subline
296
297
  # https://www.healthpartnersplans.com/media/100017241/254_Electronic-Remittance-Advice.pdf
297
-
298
298
  subline.split("*").each_with_index do |element, index|
299
299
  case element_type
300
300
  when "ST"
@@ -457,15 +457,6 @@ module Era835Parser
457
457
  # Originating Company Supplemental Code
458
458
  # puts "Originating Company Supplemental Code: #{element}"
459
459
  end
460
- when "REF"
461
- case index
462
- when 1
463
- # Receiver Identification Number
464
- # puts "Receiver Identification Number: #{element}"
465
- when 2
466
- # Receiver REFERENCE IDENTIFICATION
467
- # puts "Receiver REFERENCE IDENTIFICATION: #{element}"
468
- end
469
460
  when "N1"
470
461
  if !payer_identification_loop && !payee_identification_loop
471
462
  payer_identification_loop = true
@@ -562,21 +553,6 @@ module Era835Parser
562
553
  payee_identification_loop = true
563
554
  end
564
555
  end
565
- when "REF"
566
- case index
567
- when 1
568
- # Additional Payee Identification Qualifier
569
- # puts "Additional Payee Identification Qualifier: #{element}"
570
- when 2
571
- # Reference Identification Code
572
- # puts "Reference Identification Code: #{element}"
573
- when 3
574
- # Additional Payee Identification Qualifier
575
- # puts "Additional Payee Identification Qualifier: #{element}"
576
- when 4
577
- # Reference Identification Code
578
- # puts "Reference Identification Code: #{element}"
579
- end
580
556
  when "PER"
581
557
  case index
582
558
  when 1
@@ -980,6 +956,26 @@ module Era835Parser
980
956
  # Original Units of Service Count
981
957
  # puts "Original Units of Service Count: #{element}"
982
958
  end
959
+ when "REF"
960
+ case index
961
+ when 1
962
+ # Additional Payee Identification Qualifier
963
+ # puts "Additional Payee Identification Qualifier: #{element}"
964
+ returned_reference_number = true if element == '6R'
965
+ when 2
966
+ # Reference Identification Code
967
+ # puts "Reference Identification Code: #{element}"
968
+ if individual_line_item != {} && svc_counter >= 1 && returned_reference_number && !element.nil?
969
+ individual_line_item[:reference_number] = element
970
+ returned_reference_number = false
971
+ end
972
+ when 3
973
+ # Additional Payee Identification Qualifier
974
+ # puts "Additional Payee Identification Qualifier: #{element}"
975
+ when 4
976
+ # Reference Identification Code
977
+ # puts "Reference Identification Code: #{element}"
978
+ end
983
979
  end
984
980
  era[:checks] = checks
985
981
  end
@@ -1035,13 +1031,13 @@ module Era835Parser
1035
1031
  else
1036
1032
  remark = truncate(line_item[:remarks], 82)
1037
1033
  end
1038
- 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"
1034
+ line_items += "#{" " * 22}#{line_item[:service_date]} #{line_item[:cpt_code]}#{safe_spacing(7, get_length(line_item[:cpt_code]))}#{'%.2f' % (line_item[:charge_amount].to_f / 100)}#{safe_spacing(13, get_length('%.2f' % (line_item[:charge_amount].to_f / 100)))}#{'%.2f' % (line_item[:payment_amount].to_f / 100)}#{safe_spacing(13, get_length('%.2f' % (line_item[:payment_amount].to_f / 100)))}#{'%.2f' % (line_item[:total_adjustment_amount].to_f / 100)}#{safe_spacing(15, get_length('%.2f' % (line_item[:total_adjustment_amount].to_f / 100)))}#{remark}\n\n"
1039
1035
 
1040
1036
  if !line_item[:adjustment_groups].nil?
1041
1037
  line_item[:adjustment_groups].each do |adjustment_group_counter, adjustment_group|
1042
1038
  line_items += " Adjustment Group Adj Amt Translated Reason Code\n" if adjustment_group_counter == 0
1043
1039
  reason_code = adjustment_group[:translated_reason_code].nil? ? '' : adjustment_group[:translated_reason_code].upcase
1044
- 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"
1040
+ line_items += " #{adjustment_group[:adjustment_group].upcase}#{safe_spacing(28, get_length(adjustment_group[:adjustment_group]))}#{'%.2f' % (adjustment_group[:adjustment_amount].to_f / 100)}#{safe_spacing(8, get_length('%.2f' % (adjustment_group[:adjustment_amount].to_f / 100)))}#{truncate(reason_code, 84)}\n"
1045
1041
  line_items += "\n" if line_item[:adjustment_groups].length == (adjustment_group_counter + 1)
1046
1042
  end
1047
1043
  end
@@ -1049,19 +1045,19 @@ module Era835Parser
1049
1045
  end
1050
1046
  era_text = "--------------------------------------------------------------------------------------------------------------------------------------------------------\n"
1051
1047
  era_text += "Check# Patient ID Last,First Charge Amt Payment Amt Accnt##{" " * [8, get_length(individual_era[:account_number]) - 5].max}Status Payer\n"
1052
- era_text += "#{check[:check_number]}#{" " * (31 - get_length(check[:check_number]))}#{individual_era[:patient_id]}#{" " * (19 - get_length(individual_era[:patient_id]))}#{truncate(individual_era[:patient_name], 18)}#{" " * (20 - get_length(truncate(individual_era[:patient_name], 18)))}#{'%.2f' % (individual_era[:charge_amount].to_f / 100)}#{" " * (12 - get_length('%.2f' % (individual_era[:charge_amount].to_f / 100)))}#{'%.2f' % (individual_era[:payment_amount].to_f / 100)}#{" " * (13 - get_length('%.2f' % (individual_era[:payment_amount].to_f / 100)))}#{individual_era[:account_number]}#{" " * ([14, get_length(individual_era[:account_number]) + 1].max - get_length(individual_era[:account_number]))}#{individual_era[:status]}#{" " * (31 - get_length(individual_era[:status]))}#{check[:payer_name]}\n"
1048
+ era_text += "#{check[:check_number]}#{safe_spacing(31, get_length(check[:check_number]))}#{individual_era[:patient_id]}#{safe_spacing(19, get_length(individual_era[:patient_id]))}#{truncate(individual_era[:patient_name], 18)}#{safe_spacing(20, get_length(truncate(individual_era[:patient_name], 18)))}#{'%.2f' % (individual_era[:charge_amount].to_f / 100)}#{safe_spacing(12, get_length('%.2f' % (individual_era[:charge_amount].to_f / 100)))}#{'%.2f' % (individual_era[:payment_amount].to_f / 100)}#{safe_spacing(13, get_length('%.2f' % (individual_era[:payment_amount].to_f / 100)))}#{individual_era[:account_number]}#{safe_spacing([14, get_length(individual_era[:account_number]) + 1].max, get_length(individual_era[:account_number]))}#{individual_era[:status]}#{safe_spacing(31, get_length(individual_era[:status]))}#{check[:payer_name]}\n"
1053
1049
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_address]}\n"
1054
1050
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_city]},#{check[:payer_state]} #{check[:payer_zip_code]}\n"
1055
1051
  era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}Tax ID: #{check[:payer_tax_id]}\n"
1056
1052
 
1057
1053
  if !individual_era[:claim_statement_period_end].nil? && !individual_era[:claim_statement_period_start].nil?
1058
- era_text += "#{" " * (96)}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n"
1059
- era_text += "#{" " * (96)}Claim Statement Period: #{individual_era[:claim_statement_period_start]} - #{individual_era[:claim_statement_period_end]}\n\n"
1054
+ era_text += "#{" " * 96}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n"
1055
+ era_text += "#{" " * 96}Claim Statement Period: #{individual_era[:claim_statement_period_start]} - #{individual_era[:claim_statement_period_end]}\n\n"
1060
1056
  else
1061
- era_text += "#{" " * (96)}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n\n"
1057
+ era_text += "#{" " * 96}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n\n"
1062
1058
  end
1063
1059
  if line_items.length > 0
1064
- era_text += "#{" " * (10)}Line Item: Svc Date CPT Charge Amt Payment Amt Total Adj Amt Remarks\n"
1060
+ era_text += "#{" " * 10}Line Item: Svc Date CPT Charge Amt Payment Amt Total Adj Amt Remarks\n"
1065
1061
  era_text += line_items
1066
1062
  end
1067
1063
  era[:checks][check[:check_number]][:eras][era_counter][:era_text] = era_text
@@ -1087,5 +1083,14 @@ module Era835Parser
1087
1083
  return string.to_s[0...truncate_at]
1088
1084
  end
1089
1085
  end
1086
+
1087
+ def safe_spacing(max, length)
1088
+ value = max - length
1089
+ if value >= 0
1090
+ " " * value
1091
+ else
1092
+ ""
1093
+ end
1094
+ end
1090
1095
  end
1091
- end
1096
+ end
@@ -1,3 +1,3 @@
1
1
  module Era835Parser
2
- VERSION = "0.1.9"
3
- end
2
+ VERSION = "0.1.11"
3
+ end
@@ -1,3 +1,3 @@
1
1
  require "set"
2
2
  require "era_835_parser/version"
3
- require "era_835_parser/parser"
3
+ require "era_835_parser/parser"
@@ -128,6 +128,9 @@ RSpec.describe Era835Parser::Parser do
128
128
  it 'returns the Remarks' do
129
129
  expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:remarks]).to eq(nil)
130
130
  end
131
+ it 'returns the Reference number' do
132
+ expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:reference_number]).to eq(nil)
133
+ end
131
134
  context 'Adjustment group #0' do
132
135
  it 'returns the Adjustment group' do
133
136
  expect(@era[:checks]['70408535'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group]).to eq("Contractual Obligation")
@@ -279,6 +282,9 @@ RSpec.describe Era835Parser::Parser do
279
282
  it 'returns the Remarks' do
280
283
  expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:remarks]).to eq(nil)
281
284
  end
285
+ it 'returns the Reference number' do
286
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:reference_number]).to eq('0001')
287
+ end
282
288
  context 'Adjustment group #0' do
283
289
  it 'returns the Adjustment group' do
284
290
  expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group]).to eq("Contractual Obligation")
@@ -336,6 +342,9 @@ RSpec.describe Era835Parser::Parser do
336
342
  it 'returns the Remarks' do
337
343
  expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:remarks]).to eq(nil)
338
344
  end
345
+ it 'returns the Reference number' do
346
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:reference_number]).to eq('0002')
347
+ end
339
348
  context 'Adjustment group #0' do
340
349
  it 'returns the Adjustment group' do
341
350
  expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group]).to eq("Patient Responsibility")
@@ -376,6 +385,9 @@ RSpec.describe Era835Parser::Parser do
376
385
  it 'returns the Remarks' do
377
386
  expect(@era[:checks]['02790758'][:eras][0][:line_items][2][:remarks]).to eq(nil)
378
387
  end
388
+ it 'returns the Reference number' do
389
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][2][:reference_number]).to eq('0003')
390
+ end
379
391
  end
380
392
  end
381
393
  end
@@ -510,6 +522,9 @@ RSpec.describe Era835Parser::Parser do
510
522
  it 'returns the Remarks' do
511
523
  expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:remarks]).to eq(nil)
512
524
  end
525
+ it 'returns the Reference number' do
526
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:reference_number]).to eq('0001')
527
+ end
513
528
  context 'Adjustment group #0' do
514
529
  it 'returns the Adjustment group' do
515
530
  expect(@era[:checks]['02790758'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group]).to eq("Contractual Obligation")
@@ -567,6 +582,9 @@ RSpec.describe Era835Parser::Parser do
567
582
  it 'returns the Remarks' do
568
583
  expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:remarks]).to eq(nil)
569
584
  end
585
+ it 'returns the Reference number' do
586
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:reference_number]).to eq('0002')
587
+ end
570
588
  context 'Adjustment group #0' do
571
589
  it 'returns the Adjustment group' do
572
590
  expect(@era[:checks]['02790758'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group]).to eq("Patient Responsibility")
@@ -607,6 +625,249 @@ RSpec.describe Era835Parser::Parser do
607
625
  it 'returns the Remarks' do
608
626
  expect(@era[:checks]['02790758'][:eras][0][:line_items][2][:remarks]).to eq(nil)
609
627
  end
628
+ it 'returns the Reference number' do
629
+ expect(@era[:checks]['02790758'][:eras][0][:line_items][2][:reference_number]).to eq('0003')
630
+ end
631
+ end
632
+ end
633
+ end
634
+ end
635
+
636
+ context 'example_4.835' do
637
+ before :all do
638
+ @era = Era835Parser::Parser.new(file_path: "../era_835_parser/spec/example_4.835").parse
639
+ end
640
+
641
+ context 'Aggregate totals' do
642
+ it 'returns the addressed to' do
643
+ expect(@era[:addressed_to]).to eq(nil)
644
+ end
645
+ it 'returns the correct number of checks' do
646
+ expect(@era[:checks].count).to eq(1)
647
+ end
648
+ it 'returns the correct number of adjustments' do
649
+ expect(@era[:adjustments]).to eq(nil)
650
+ end
651
+ it 'returns the correct number of eras' do
652
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras].count).to eq(1)
653
+ end
654
+ it 'returns the correct number of line items' do
655
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items].count).to eq(3)
656
+ end
657
+ it 'returns the correct number of adjustment groups' do
658
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups].count).to eq(2)
659
+ end
660
+ it 'returns the correct number of adjustment groups' do
661
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups].count).to eq(1)
662
+ end
663
+ it 'returns the correct number of adjustment groups' do
664
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:adjustment_groups]).to eq(nil)
665
+ end
666
+ end
667
+
668
+ context 'Check #70408535' do
669
+ it 'returns the check number' do
670
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:check_number]).to eq('0123456789012345678901234567890123456789')
671
+ end
672
+ it 'returns the amount' do
673
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:amount]).to eq(192286)
674
+ end
675
+ it 'returns the number of claims' do
676
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:number_of_claims]).to eq(1)
677
+ end
678
+ it 'returns the NPI or Tax ID of payee' do
679
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:npi_tax_id]).to eq('0987654321')
680
+ end
681
+ it 'returns the Check payee' do
682
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payee]).to eq('XYZ HEALTHCARE CORPORATION')
683
+ end
684
+ it 'returns the Payer name' do
685
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_name]).to eq('BLUE CROSS AND BLUE SHIELD OF NORTH CAROLINA')
686
+ end
687
+ it 'returns the Payer address' do
688
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_address]).to eq('P O BOX 2291')
689
+ end
690
+ it 'returns the Payer city' do
691
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_city]).to eq('DURHAM')
692
+ end
693
+ it 'returns the Payer state' do
694
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_state]).to eq('NC')
695
+ end
696
+ it 'returns the Payer zip code' do
697
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_zip_code]).to eq('27702')
698
+ end
699
+ it 'returns the Payer tax id' do
700
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_tax_id]).to eq('60-894904')
701
+ end
702
+ it 'returns the Check date (string mm/dd/yyyy)' do
703
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:date]).to eq('01/08/2011')
704
+ end
705
+ context 'ERA #0' do
706
+ it 'returns the Patient ID' do
707
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_id]).to eq('YPB123456789001')
708
+ end
709
+ it 'returns the Patient name' do
710
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_name]).to eq('DOUGH,MARY')
711
+ end
712
+ it 'returns the Patient last name (titlized)' do
713
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_last_name]).to eq('Dough')
714
+ end
715
+ it 'returns the Patient first name (titlized)' do
716
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_first_name]).to eq('Mary')
717
+ end
718
+ it 'returns the Total charge amount (integer)' do
719
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:charge_amount]).to eq(210000)
720
+ end
721
+ it 'returns the Total payment amount (integer)' do
722
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:payment_amount]).to eq(192286)
723
+ end
724
+ it 'returns the Account number' do
725
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:account_number]).to eq('200200964A52')
726
+ end
727
+ it 'returns the Cliam status code' do
728
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_status_code]).to eq('1')
729
+ end
730
+ it 'returns the Claim status code description' do
731
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:status]).to eq("PROCESSED AS PRIMARY")
732
+ end
733
+ it 'returns the Payer claim control number' do
734
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:payer_claim_control_number]).to eq('94151100100')
735
+ end
736
+ it 'returns the Claim statement period start' do
737
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_statement_period_start]).to eq(nil)
738
+ end
739
+ it 'returns the Claim statement period end' do
740
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_statement_period_end]).to eq(nil)
741
+ end
742
+
743
+ context 'Line item #0' do
744
+ it 'returns the Date of service (string mm/dd/yyyy)' do
745
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:service_date]).to eq("12/31/2010")
746
+ end
747
+ it 'returns the CPT code' do
748
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:cpt_code]).to eq("59430")
749
+ end
750
+ it 'returns the Charge amount (integer)' do
751
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:charge_amount]).to eq(121000)
752
+ end
753
+ it 'returns the Payment amount (integer)' do
754
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:payment_amount]).to eq(105786)
755
+ end
756
+ it 'returns the Total adjustment amount (integer)' do
757
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:total_adjustment_amount]).to eq(15214)
758
+ end
759
+ it 'returns the Remark code' do
760
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:remark_code]).to eq(nil)
761
+ end
762
+ it 'returns the Remarks' do
763
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:remarks]).to eq(nil)
764
+ end
765
+ it 'returns the Reference number' do
766
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:reference_number]).to eq('0001')
767
+ end
768
+ context 'Adjustment group #0' do
769
+ it 'returns the Adjustment group' do
770
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group]).to eq("Contractual Obligation")
771
+ end
772
+ it 'returns the Adjustment group code' do
773
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group_code]).to eq("CO")
774
+ end
775
+ it 'returns the Adjustment amount (integer)' do
776
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_amount]).to eq(3460)
777
+ end
778
+ it 'returns the Reason code' do
779
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:reason_code]).to eq('42')
780
+ end
781
+ it 'returns the Translated reason code' do
782
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:translated_reason_code]).to eq("Charges exceed our fee schedule or maximum allowable amount. (Use CARC 45)")
783
+ end
784
+ end
785
+ context 'Adjustment group #1' do
786
+ it 'returns the Adjustment group' do
787
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_group]).to eq("Patient Responsibility")
788
+ end
789
+ it 'returns the Adjustment group code' do
790
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_group_code]).to eq("PR")
791
+ end
792
+ it 'returns the Adjustment amount (integer)' do
793
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_amount]).to eq(11754)
794
+ end
795
+ it 'returns the Reason code' do
796
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:reason_code]).to eq('2')
797
+ end
798
+ it 'returns the Translated reason code' do
799
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:translated_reason_code]).to eq("Coinsurance Amount")
800
+ end
801
+ end
802
+ end
803
+ context 'Line item #1' do
804
+ it 'returns the Date of service (string mm/dd/yyyy)' do
805
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:service_date]).to eq("12/31/2010")
806
+ end
807
+ it 'returns the CPT code' do
808
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:cpt_code]).to eq("59440")
809
+ end
810
+ it 'returns the Charge amount (integer)' do
811
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:charge_amount]).to eq(89000)
812
+ end
813
+ it 'returns the Payment amount (integer)' do
814
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:payment_amount]).to eq(86500)
815
+ end
816
+ it 'returns the Total adjustment amount (integer)' do
817
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:total_adjustment_amount]).to eq(2500)
818
+ end
819
+ it 'returns the Remark code' do
820
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:remark_code]).to eq(nil)
821
+ end
822
+ it 'returns the Remarks' do
823
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:remarks]).to eq(nil)
824
+ end
825
+ it 'returns the Reference number' do
826
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:reference_number]).to eq('0002')
827
+ end
828
+ context 'Adjustment group #0' do
829
+ it 'returns the Adjustment group' do
830
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group]).to eq("Patient Responsibility")
831
+ end
832
+ it 'returns the Adjustment group code' do
833
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group_code]).to eq("PR")
834
+ end
835
+ it 'returns the Adjustment amount (integer)' do
836
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_amount]).to eq(2500)
837
+ end
838
+ it 'returns the Reason code' do
839
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:reason_code]).to eq('3')
840
+ end
841
+ it 'returns the Translated reason code' do
842
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:translated_reason_code]).to eq("Co-payment Amount")
843
+ end
844
+ end
845
+ end
846
+ context 'Line item #2' do
847
+ it 'returns the Date of service (string mm/dd/yyyy)' do
848
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:service_date]).to eq("12/31/2010")
849
+ end
850
+ it 'returns the CPT code' do
851
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:cpt_code]).to eq("59426")
852
+ end
853
+ it 'returns the Charge amount (integer)' do
854
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:charge_amount]).to eq(74200)
855
+ end
856
+ it 'returns the Payment amount (integer)' do
857
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:payment_amount]).to eq(74200)
858
+ end
859
+ it 'returns the Total adjustment amount (integer)' do
860
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:total_adjustment_amount]).to eq(nil)
861
+ end
862
+ it 'returns the Remark code' do
863
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:remark_code]).to eq(nil)
864
+ end
865
+ it 'returns the Remarks' do
866
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:remarks]).to eq(nil)
867
+ end
868
+ it 'returns the Reference number' do
869
+ expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:reference_number]).to eq('0003')
870
+ end
610
871
  end
611
872
  end
612
873
  end
@@ -1477,4 +1738,4 @@ Check# Patient ID Last,First Charge Amt
1477
1738
  end
1478
1739
  end
1479
1740
  end
1480
- end
1741
+ end
@@ -0,0 +1,32 @@
1
+ ST*835*1234~
2
+ BPR*I*1922.86*C*CHK************20110108~
3
+ TRN*1*0123456789012345678901234567890123456789*560894904~
4
+ REF*F2*LCLA438D~
5
+ DTM*405*20110104~
6
+ N1*PR*BLUE CROSS AND BLUE SHIELD OF NORTH CAROLINA~
7
+ N3*P O BOX 2291~
8
+ N4*DURHAM*NC*27702~
9
+ PER*CX*TE*8005554844~
10
+ N1*PE*XYZ HEALTHCARE CORPORATION*XX*0987654321~
11
+ N3*P O BOX XYZ~
12
+ N4*CHARLOTTE*NC*28234~
13
+ REF*TJ*123456789~
14
+ LX*1~
15
+ CLP*200200964A52*1*2100*1922.86*142.54*15*94151100100~
16
+ NM1*QC*1*Dough*Mary****MI* YPB123456789001~
17
+ DTM*050*20110103~
18
+ SVC*HC:59430*1210*1057.86**1*HC:59410~
19
+ DTM*472*20101231~
20
+ CAS*CO*42*34.6~
21
+ CAS*PR*2*117.54~
22
+ REF*6R*0001~
23
+ AMT*B6*1175.4~
24
+ SVC*HC:59440*890*865**1*HC:59410~
25
+ DTM*472*20101231~
26
+ CAS*PR*3*25~
27
+ REF*6R*0002~
28
+ SVC*HC:59426*742*742**1~
29
+ DTM*472*20101231~
30
+ REF*6R*0003~
31
+ AMT*B6*742~
32
+ SE*33*1234~
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
- require 'era_835_parser'
3
+ require 'era_835_parser'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: era_835_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin S. Dias
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-10 00:00:00.000000000 Z
11
+ date: 2023-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,13 +78,14 @@ files:
78
78
  - spec/example_1.835
79
79
  - spec/example_2.835
80
80
  - spec/example_3.835
81
+ - spec/example_4.835
81
82
  - spec/spec_helper.rb
82
83
  - spec/test_era.txt
83
84
  homepage: https://github.com/diasks2/era_835_parser
84
85
  licenses:
85
86
  - MIT
86
87
  metadata: {}
87
- post_install_message:
88
+ post_install_message:
88
89
  rdoc_options: []
89
90
  require_paths:
90
91
  - lib
@@ -99,9 +100,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
100
  - !ruby/object:Gem::Version
100
101
  version: '0'
101
102
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.7.6
104
- signing_key:
103
+ rubygems_version: 3.3.26
104
+ signing_key:
105
105
  specification_version: 4
106
106
  summary: Electronic Remittance Advice (ERA) 835 parser
107
107
  test_files:
@@ -109,5 +109,6 @@ test_files:
109
109
  - spec/example_1.835
110
110
  - spec/example_2.835
111
111
  - spec/example_3.835
112
+ - spec/example_4.835
112
113
  - spec/spec_helper.rb
113
114
  - spec/test_era.txt