era_835_parser 0.1.10 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/era_835_parser/parser.rb +24 -8
- data/lib/era_835_parser/version.rb +2 -2
- data/lib/era_835_parser.rb +1 -1
- data/spec/era_835_parser_spec.rb +255 -3
- data/spec/example_1.835 +1 -1
- data/spec/example_2.835 +1 -1
- data/spec/example_3.835 +1 -0
- data/spec/example_4.835 +32 -0
- data/spec/spec_helper.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a4d95e601bfb1f71b439fe740842c2485accf92bbd7b890e922e5fa53d1b447
|
4
|
+
data.tar.gz: 89f39835c344f1a9005245ac6712ec0c56dedbebe1cca0f92f608ad598b93ca8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 489f980ede5fe53b11c9e83806343da7a891e333f3a4d21cdcb1e73918915938473f5cee500b9624874fd1c34e2f06c6d050b616756060dc8e4fd9f1eae21237
|
7
|
+
data.tar.gz: 641a2ddd323d683091d047dd04c4b26e43bdbf4bc9151bbe28c0e8aa5bf72d958a329eeadf40cdcfe402c4bff51477d9f17f7f2ab337fc2e85986272ee4f9a3e
|
@@ -67,6 +67,7 @@ module Era835Parser
|
|
67
67
|
service_date = false
|
68
68
|
floating_adjustment_group_code = nil
|
69
69
|
returned_reference_number = false
|
70
|
+
payer_edi_id = false
|
70
71
|
|
71
72
|
file_or_file_path = !file.nil? ? file : file_path
|
72
73
|
opened_file = file_or_file_path.respond_to?(:write) ? file_or_file_path : open(file_or_file_path)
|
@@ -962,6 +963,7 @@ module Era835Parser
|
|
962
963
|
# Additional Payee Identification Qualifier
|
963
964
|
# puts "Additional Payee Identification Qualifier: #{element}"
|
964
965
|
returned_reference_number = true if element == '6R'
|
966
|
+
payer_edi_id = true if element == '2U'
|
965
967
|
when 2
|
966
968
|
# Reference Identification Code
|
967
969
|
# puts "Reference Identification Code: #{element}"
|
@@ -969,6 +971,11 @@ module Era835Parser
|
|
969
971
|
individual_line_item[:reference_number] = element
|
970
972
|
returned_reference_number = false
|
971
973
|
end
|
974
|
+
|
975
|
+
if payer_edi_id
|
976
|
+
era[:checks][check[:check_number]][:payer_edi_id] = element
|
977
|
+
payer_edi_id = false
|
978
|
+
end
|
972
979
|
when 3
|
973
980
|
# Additional Payee Identification Qualifier
|
974
981
|
# puts "Additional Payee Identification Qualifier: #{element}"
|
@@ -1031,13 +1038,13 @@ module Era835Parser
|
|
1031
1038
|
else
|
1032
1039
|
remark = truncate(line_item[:remarks], 82)
|
1033
1040
|
end
|
1034
|
-
line_items += "#{" " *
|
1041
|
+
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"
|
1035
1042
|
|
1036
1043
|
if !line_item[:adjustment_groups].nil?
|
1037
1044
|
line_item[:adjustment_groups].each do |adjustment_group_counter, adjustment_group|
|
1038
1045
|
line_items += " Adjustment Group Adj Amt Translated Reason Code\n" if adjustment_group_counter == 0
|
1039
1046
|
reason_code = adjustment_group[:translated_reason_code].nil? ? '' : adjustment_group[:translated_reason_code].upcase
|
1040
|
-
line_items += " #{adjustment_group[:adjustment_group].upcase}#{
|
1047
|
+
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"
|
1041
1048
|
line_items += "\n" if line_item[:adjustment_groups].length == (adjustment_group_counter + 1)
|
1042
1049
|
end
|
1043
1050
|
end
|
@@ -1045,19 +1052,19 @@ module Era835Parser
|
|
1045
1052
|
end
|
1046
1053
|
era_text = "--------------------------------------------------------------------------------------------------------------------------------------------------------\n"
|
1047
1054
|
era_text += "Check# Patient ID Last,First Charge Amt Payment Amt Accnt##{" " * [8, get_length(individual_era[:account_number]) - 5].max}Status Payer\n"
|
1048
|
-
era_text += "#{check[:check_number]}#{
|
1055
|
+
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"
|
1049
1056
|
era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_address]}\n"
|
1050
1057
|
era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}#{check[:payer_city]},#{check[:payer_state]} #{check[:payer_zip_code]}\n"
|
1051
1058
|
era_text += "#{" " * (126 + [14, get_length(individual_era[:account_number]) + 1].max)}Tax ID: #{check[:payer_tax_id]}\n"
|
1052
1059
|
|
1053
1060
|
if !individual_era[:claim_statement_period_end].nil? && !individual_era[:claim_statement_period_start].nil?
|
1054
|
-
era_text += "#{" " *
|
1055
|
-
era_text += "#{" " *
|
1061
|
+
era_text += "#{" " * 96}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n"
|
1062
|
+
era_text += "#{" " * 96}Claim Statement Period: #{individual_era[:claim_statement_period_start]} - #{individual_era[:claim_statement_period_end]}\n\n"
|
1056
1063
|
else
|
1057
|
-
era_text += "#{" " *
|
1064
|
+
era_text += "#{" " * 96}Payer Claim Control Number: #{individual_era[:payer_claim_control_number]}\n\n"
|
1058
1065
|
end
|
1059
1066
|
if line_items.length > 0
|
1060
|
-
era_text += "#{" " *
|
1067
|
+
era_text += "#{" " * 10}Line Item: Svc Date CPT Charge Amt Payment Amt Total Adj Amt Remarks\n"
|
1061
1068
|
era_text += line_items
|
1062
1069
|
end
|
1063
1070
|
era[:checks][check[:check_number]][:eras][era_counter][:era_text] = era_text
|
@@ -1083,5 +1090,14 @@ module Era835Parser
|
|
1083
1090
|
return string.to_s[0...truncate_at]
|
1084
1091
|
end
|
1085
1092
|
end
|
1093
|
+
|
1094
|
+
def safe_spacing(max, length)
|
1095
|
+
value = max - length
|
1096
|
+
if value >= 0
|
1097
|
+
" " * value
|
1098
|
+
else
|
1099
|
+
""
|
1100
|
+
end
|
1101
|
+
end
|
1086
1102
|
end
|
1087
|
-
end
|
1103
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module Era835Parser
|
2
|
-
VERSION = "0.1.
|
3
|
-
end
|
2
|
+
VERSION = "0.1.12"
|
3
|
+
end
|
data/lib/era_835_parser.rb
CHANGED
data/spec/era_835_parser_spec.rb
CHANGED
@@ -65,6 +65,9 @@ RSpec.describe Era835Parser::Parser do
|
|
65
65
|
it 'returns the Payer tax id' do
|
66
66
|
expect(@era[:checks]['70408535'][:payer_tax_id]).to eq('57-14001')
|
67
67
|
end
|
68
|
+
it 'returns the Payer EDI id' do
|
69
|
+
expect(@era[:checks]['70408535'][:payer_edi_id]).to eq('11111')
|
70
|
+
end
|
68
71
|
it 'returns the Check date (string mm/dd/yyyy)' do
|
69
72
|
expect(@era[:checks]['70408535'][:date]).to eq('09/23/2010')
|
70
73
|
end
|
@@ -185,7 +188,7 @@ RSpec.describe Era835Parser::Parser do
|
|
185
188
|
end
|
186
189
|
end
|
187
190
|
|
188
|
-
context 'Check #
|
191
|
+
context 'Check #02790758' do
|
189
192
|
it 'returns the check number' do
|
190
193
|
expect(@era[:checks]['02790758'][:check_number]).to eq('02790758')
|
191
194
|
end
|
@@ -219,6 +222,9 @@ RSpec.describe Era835Parser::Parser do
|
|
219
222
|
it 'returns the Payer tax id' do
|
220
223
|
expect(@era[:checks]['02790758'][:payer_tax_id]).to eq('60-894904')
|
221
224
|
end
|
225
|
+
it 'returns the Payer EDI id' do
|
226
|
+
expect(@era[:checks]['02790758'][:payer_edi_id]).to eq('22222')
|
227
|
+
end
|
222
228
|
it 'returns the Check date (string mm/dd/yyyy)' do
|
223
229
|
expect(@era[:checks]['02790758'][:date]).to eq('01/08/2011')
|
224
230
|
end
|
@@ -425,7 +431,7 @@ RSpec.describe Era835Parser::Parser do
|
|
425
431
|
end
|
426
432
|
end
|
427
433
|
|
428
|
-
context 'Check #
|
434
|
+
context 'Check #02790758' do
|
429
435
|
it 'returns the check number' do
|
430
436
|
expect(@era[:checks]['02790758'][:check_number]).to eq('02790758')
|
431
437
|
end
|
@@ -459,6 +465,9 @@ RSpec.describe Era835Parser::Parser do
|
|
459
465
|
it 'returns the Payer tax id' do
|
460
466
|
expect(@era[:checks]['02790758'][:payer_tax_id]).to eq('60-894904')
|
461
467
|
end
|
468
|
+
it 'returns the Payer EDI id' do
|
469
|
+
expect(@era[:checks]['02790758'][:payer_edi_id]).to eq('33333')
|
470
|
+
end
|
462
471
|
it 'returns the Check date (string mm/dd/yyyy)' do
|
463
472
|
expect(@era[:checks]['02790758'][:date]).to eq('01/08/2011')
|
464
473
|
end
|
@@ -632,6 +641,249 @@ RSpec.describe Era835Parser::Parser do
|
|
632
641
|
end
|
633
642
|
end
|
634
643
|
end
|
644
|
+
|
645
|
+
context 'example_4.835' do
|
646
|
+
before :all do
|
647
|
+
@era = Era835Parser::Parser.new(file_path: "../era_835_parser/spec/example_4.835").parse
|
648
|
+
end
|
649
|
+
|
650
|
+
context 'Aggregate totals' do
|
651
|
+
it 'returns the addressed to' do
|
652
|
+
expect(@era[:addressed_to]).to eq(nil)
|
653
|
+
end
|
654
|
+
it 'returns the correct number of checks' do
|
655
|
+
expect(@era[:checks].count).to eq(1)
|
656
|
+
end
|
657
|
+
it 'returns the correct number of adjustments' do
|
658
|
+
expect(@era[:adjustments]).to eq(nil)
|
659
|
+
end
|
660
|
+
it 'returns the correct number of eras' do
|
661
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras].count).to eq(1)
|
662
|
+
end
|
663
|
+
it 'returns the correct number of line items' do
|
664
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items].count).to eq(3)
|
665
|
+
end
|
666
|
+
it 'returns the correct number of adjustment groups' do
|
667
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups].count).to eq(2)
|
668
|
+
end
|
669
|
+
it 'returns the correct number of adjustment groups' do
|
670
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups].count).to eq(1)
|
671
|
+
end
|
672
|
+
it 'returns the correct number of adjustment groups' do
|
673
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:adjustment_groups]).to eq(nil)
|
674
|
+
end
|
675
|
+
end
|
676
|
+
|
677
|
+
context 'Check #70408535' do
|
678
|
+
it 'returns the check number' do
|
679
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:check_number]).to eq('0123456789012345678901234567890123456789')
|
680
|
+
end
|
681
|
+
it 'returns the amount' do
|
682
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:amount]).to eq(192286)
|
683
|
+
end
|
684
|
+
it 'returns the number of claims' do
|
685
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:number_of_claims]).to eq(1)
|
686
|
+
end
|
687
|
+
it 'returns the NPI or Tax ID of payee' do
|
688
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:npi_tax_id]).to eq('0987654321')
|
689
|
+
end
|
690
|
+
it 'returns the Check payee' do
|
691
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payee]).to eq('XYZ HEALTHCARE CORPORATION')
|
692
|
+
end
|
693
|
+
it 'returns the Payer name' do
|
694
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_name]).to eq('BLUE CROSS AND BLUE SHIELD OF NORTH CAROLINA')
|
695
|
+
end
|
696
|
+
it 'returns the Payer address' do
|
697
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_address]).to eq('P O BOX 2291')
|
698
|
+
end
|
699
|
+
it 'returns the Payer city' do
|
700
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_city]).to eq('DURHAM')
|
701
|
+
end
|
702
|
+
it 'returns the Payer state' do
|
703
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_state]).to eq('NC')
|
704
|
+
end
|
705
|
+
it 'returns the Payer zip code' do
|
706
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_zip_code]).to eq('27702')
|
707
|
+
end
|
708
|
+
it 'returns the Payer tax id' do
|
709
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_tax_id]).to eq('60-894904')
|
710
|
+
end
|
711
|
+
it 'returns the Payer EDI id' do
|
712
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:payer_edi_id]).to eq(nil)
|
713
|
+
end
|
714
|
+
it 'returns the Check date (string mm/dd/yyyy)' do
|
715
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:date]).to eq('01/08/2011')
|
716
|
+
end
|
717
|
+
context 'ERA #0' do
|
718
|
+
it 'returns the Patient ID' do
|
719
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_id]).to eq('YPB123456789001')
|
720
|
+
end
|
721
|
+
it 'returns the Patient name' do
|
722
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_name]).to eq('DOUGH,MARY')
|
723
|
+
end
|
724
|
+
it 'returns the Patient last name (titlized)' do
|
725
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_last_name]).to eq('Dough')
|
726
|
+
end
|
727
|
+
it 'returns the Patient first name (titlized)' do
|
728
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:patient_first_name]).to eq('Mary')
|
729
|
+
end
|
730
|
+
it 'returns the Total charge amount (integer)' do
|
731
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:charge_amount]).to eq(210000)
|
732
|
+
end
|
733
|
+
it 'returns the Total payment amount (integer)' do
|
734
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:payment_amount]).to eq(192286)
|
735
|
+
end
|
736
|
+
it 'returns the Account number' do
|
737
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:account_number]).to eq('200200964A52')
|
738
|
+
end
|
739
|
+
it 'returns the Cliam status code' do
|
740
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_status_code]).to eq('1')
|
741
|
+
end
|
742
|
+
it 'returns the Claim status code description' do
|
743
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:status]).to eq("PROCESSED AS PRIMARY")
|
744
|
+
end
|
745
|
+
it 'returns the Payer claim control number' do
|
746
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:payer_claim_control_number]).to eq('94151100100')
|
747
|
+
end
|
748
|
+
it 'returns the Claim statement period start' do
|
749
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_statement_period_start]).to eq(nil)
|
750
|
+
end
|
751
|
+
it 'returns the Claim statement period end' do
|
752
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:claim_statement_period_end]).to eq(nil)
|
753
|
+
end
|
754
|
+
|
755
|
+
context 'Line item #0' do
|
756
|
+
it 'returns the Date of service (string mm/dd/yyyy)' do
|
757
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:service_date]).to eq("12/31/2010")
|
758
|
+
end
|
759
|
+
it 'returns the CPT code' do
|
760
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:cpt_code]).to eq("59430")
|
761
|
+
end
|
762
|
+
it 'returns the Charge amount (integer)' do
|
763
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:charge_amount]).to eq(121000)
|
764
|
+
end
|
765
|
+
it 'returns the Payment amount (integer)' do
|
766
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:payment_amount]).to eq(105786)
|
767
|
+
end
|
768
|
+
it 'returns the Total adjustment amount (integer)' do
|
769
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:total_adjustment_amount]).to eq(15214)
|
770
|
+
end
|
771
|
+
it 'returns the Remark code' do
|
772
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:remark_code]).to eq(nil)
|
773
|
+
end
|
774
|
+
it 'returns the Remarks' do
|
775
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:remarks]).to eq(nil)
|
776
|
+
end
|
777
|
+
it 'returns the Reference number' do
|
778
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:reference_number]).to eq('0001')
|
779
|
+
end
|
780
|
+
context 'Adjustment group #0' do
|
781
|
+
it 'returns the Adjustment group' do
|
782
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group]).to eq("Contractual Obligation")
|
783
|
+
end
|
784
|
+
it 'returns the Adjustment group code' do
|
785
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_group_code]).to eq("CO")
|
786
|
+
end
|
787
|
+
it 'returns the Adjustment amount (integer)' do
|
788
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:adjustment_amount]).to eq(3460)
|
789
|
+
end
|
790
|
+
it 'returns the Reason code' do
|
791
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][0][:reason_code]).to eq('42')
|
792
|
+
end
|
793
|
+
it 'returns the Translated reason code' do
|
794
|
+
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)")
|
795
|
+
end
|
796
|
+
end
|
797
|
+
context 'Adjustment group #1' do
|
798
|
+
it 'returns the Adjustment group' do
|
799
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_group]).to eq("Patient Responsibility")
|
800
|
+
end
|
801
|
+
it 'returns the Adjustment group code' do
|
802
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_group_code]).to eq("PR")
|
803
|
+
end
|
804
|
+
it 'returns the Adjustment amount (integer)' do
|
805
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:adjustment_amount]).to eq(11754)
|
806
|
+
end
|
807
|
+
it 'returns the Reason code' do
|
808
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:reason_code]).to eq('2')
|
809
|
+
end
|
810
|
+
it 'returns the Translated reason code' do
|
811
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][0][:adjustment_groups][1][:translated_reason_code]).to eq("Coinsurance Amount")
|
812
|
+
end
|
813
|
+
end
|
814
|
+
end
|
815
|
+
context 'Line item #1' do
|
816
|
+
it 'returns the Date of service (string mm/dd/yyyy)' do
|
817
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:service_date]).to eq("12/31/2010")
|
818
|
+
end
|
819
|
+
it 'returns the CPT code' do
|
820
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:cpt_code]).to eq("59440")
|
821
|
+
end
|
822
|
+
it 'returns the Charge amount (integer)' do
|
823
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:charge_amount]).to eq(89000)
|
824
|
+
end
|
825
|
+
it 'returns the Payment amount (integer)' do
|
826
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:payment_amount]).to eq(86500)
|
827
|
+
end
|
828
|
+
it 'returns the Total adjustment amount (integer)' do
|
829
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:total_adjustment_amount]).to eq(2500)
|
830
|
+
end
|
831
|
+
it 'returns the Remark code' do
|
832
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:remark_code]).to eq(nil)
|
833
|
+
end
|
834
|
+
it 'returns the Remarks' do
|
835
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:remarks]).to eq(nil)
|
836
|
+
end
|
837
|
+
it 'returns the Reference number' do
|
838
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:reference_number]).to eq('0002')
|
839
|
+
end
|
840
|
+
context 'Adjustment group #0' do
|
841
|
+
it 'returns the Adjustment group' do
|
842
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group]).to eq("Patient Responsibility")
|
843
|
+
end
|
844
|
+
it 'returns the Adjustment group code' do
|
845
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_group_code]).to eq("PR")
|
846
|
+
end
|
847
|
+
it 'returns the Adjustment amount (integer)' do
|
848
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:adjustment_amount]).to eq(2500)
|
849
|
+
end
|
850
|
+
it 'returns the Reason code' do
|
851
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:reason_code]).to eq('3')
|
852
|
+
end
|
853
|
+
it 'returns the Translated reason code' do
|
854
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][1][:adjustment_groups][0][:translated_reason_code]).to eq("Co-payment Amount")
|
855
|
+
end
|
856
|
+
end
|
857
|
+
end
|
858
|
+
context 'Line item #2' do
|
859
|
+
it 'returns the Date of service (string mm/dd/yyyy)' do
|
860
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:service_date]).to eq("12/31/2010")
|
861
|
+
end
|
862
|
+
it 'returns the CPT code' do
|
863
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:cpt_code]).to eq("59426")
|
864
|
+
end
|
865
|
+
it 'returns the Charge amount (integer)' do
|
866
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:charge_amount]).to eq(74200)
|
867
|
+
end
|
868
|
+
it 'returns the Payment amount (integer)' do
|
869
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:payment_amount]).to eq(74200)
|
870
|
+
end
|
871
|
+
it 'returns the Total adjustment amount (integer)' do
|
872
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:total_adjustment_amount]).to eq(nil)
|
873
|
+
end
|
874
|
+
it 'returns the Remark code' do
|
875
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:remark_code]).to eq(nil)
|
876
|
+
end
|
877
|
+
it 'returns the Remarks' do
|
878
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:remarks]).to eq(nil)
|
879
|
+
end
|
880
|
+
it 'returns the Reference number' do
|
881
|
+
expect(@era[:checks]['0123456789012345678901234567890123456789'][:eras][0][:line_items][2][:reference_number]).to eq('0003')
|
882
|
+
end
|
883
|
+
end
|
884
|
+
end
|
885
|
+
end
|
886
|
+
end
|
635
887
|
end
|
636
888
|
|
637
889
|
context 'Human readable' do
|
@@ -1498,4 +1750,4 @@ Check# Patient ID Last,First Charge Amt
|
|
1498
1750
|
end
|
1499
1751
|
end
|
1500
1752
|
end
|
1501
|
-
end
|
1753
|
+
end
|
data/spec/example_1.835
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ST*835*1234~BPR*I*15096.46*C*CHK************20100923~TRN*1*70408535*15714001~REF*F2*slca435w~DTM*405*20100923~N1*PR*NC TEACHERS & STATE EMPLOYEES HEALTH PLAN & HEALTH CHOICE~N3*P O BOX 30025~N4*DURHAM*NC*27702~PER*CX**TE*8002144844~N1*PE*ACME UNIV HLTH SYS INC*XX*1234567890~N3*P O BOX AAA1~N4*DURHAM*NC*27701~REF*TJ*123456789~CLP*474623UB001CW0321*1*3740.6*5451.04**15*80209000000*11*1**397*0.7309~CAS*CO*94*-1710.44~NM1*QC*1*Rabbit*Roger*B***MI* RUN123456789~MIA*0~REF*EA*CW0321~DTM*232*20100307~DTM*233*20100310~DTM*50*20100918~AMT*AU*5451.04~SE*21*1234~
|
1
|
+
ST*835*1234~BPR*I*15096.46*C*CHK************20100923~TRN*1*70408535*15714001~REF*F2*slca435w~DTM*405*20100923~N1*PR*NC TEACHERS & STATE EMPLOYEES HEALTH PLAN & HEALTH CHOICE~N3*P O BOX 30025~N4*DURHAM*NC*27702~REF*2U*11111~PER*CX**TE*8002144844~N1*PE*ACME UNIV HLTH SYS INC*XX*1234567890~N3*P O BOX AAA1~N4*DURHAM*NC*27701~REF*TJ*123456789~CLP*474623UB001CW0321*1*3740.6*5451.04**15*80209000000*11*1**397*0.7309~CAS*CO*94*-1710.44~NM1*QC*1*Rabbit*Roger*B***MI* RUN123456789~MIA*0~REF*EA*CW0321~DTM*232*20100307~DTM*233*20100310~DTM*50*20100918~AMT*AU*5451.04~SE*21*1234~
|
data/spec/example_2.835
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ST*835*1234~BPR*I*1922.86*C*CHK************20110108~TRN*1*02790758*560894904~REF*F2*LCLA438D~DTM*405*20110104~N1*PR*BLUE CROSS AND BLUE SHIELD OF NORTH CAROLINA~N3*P O BOX 2291~N4*DURHAM*NC*27702~PER*CX*TE*8005554844~N1*PE*XYZ HEALTHCARE CORPORATION*XX*0987654321~N3*P O BOX XYZ~N4*CHARLOTTE*NC*28234~REF*TJ*123456789~LX*1~CLP*200200964A52*1*2100*1922.86*142.54*15*94151100100~NM1*QC*1*Dough*Mary****MI* YPB123456789001~DTM*050*20110103~SVC*HC:59430*1210*1057.86**1*HC:59410~DTM*472*20101231~CAS*CO*42*34.6~CAS*PR*2*117.54~REF*6R*0001~AMT*B6*1175.4~SVC*HC:59440*890*865**1*HC:59410~DTM*472*20101231~CAS*PR*3*25~REF*6R*0002~SVC*HC:59426*742*742**1~DTM*472*20101231~REF*6R*0003~AMT*B6*742~SE*33*1234~
|
1
|
+
ST*835*1234~BPR*I*1922.86*C*CHK************20110108~TRN*1*02790758*560894904~REF*F2*LCLA438D~DTM*405*20110104~N1*PR*BLUE CROSS AND BLUE SHIELD OF NORTH CAROLINA~N3*P O BOX 2291~N4*DURHAM*NC*27702~REF*2U*22222~PER*CX*TE*8005554844~N1*PE*XYZ HEALTHCARE CORPORATION*XX*0987654321~N3*P O BOX XYZ~N4*CHARLOTTE*NC*28234~REF*TJ*123456789~LX*1~CLP*200200964A52*1*2100*1922.86*142.54*15*94151100100~NM1*QC*1*Dough*Mary****MI* YPB123456789001~DTM*050*20110103~SVC*HC:59430*1210*1057.86**1*HC:59410~DTM*472*20101231~CAS*CO*42*34.6~CAS*PR*2*117.54~REF*6R*0001~AMT*B6*1175.4~SVC*HC:59440*890*865**1*HC:59410~DTM*472*20101231~CAS*PR*3*25~REF*6R*0002~SVC*HC:59426*742*742**1~DTM*472*20101231~REF*6R*0003~AMT*B6*742~SE*33*1234~
|
data/spec/example_3.835
CHANGED
data/spec/example_4.835
ADDED
@@ -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
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.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin S. Dias
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -78,6 +78,7 @@ 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
|
@@ -99,8 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
100
|
- !ruby/object:Gem::Version
|
100
101
|
version: '0'
|
101
102
|
requirements: []
|
102
|
-
|
103
|
-
rubygems_version: 2.7.6
|
103
|
+
rubygems_version: 3.3.26
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Electronic Remittance Advice (ERA) 835 parser
|
@@ -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
|