era_835_parser 0.1.12 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +23 -6
- data/lib/era_835_parser/parser.rb +77 -35
- data/lib/era_835_parser/version.rb +1 -1
- data/spec/era_835_parser_spec.rb +868 -22
- data/spec/example_5.835 +34 -0
- data/spec/example_6.835 +66 -0
- metadata +6 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ab71e41a87a2f73200361b1bedeb9740c6edc2451cee146057682484a3d3caf7
|
|
4
|
+
data.tar.gz: 9ed593d781b601484ac0c99019de108f6b4d15374059c1ef46d5a707d5dbec72
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 260a869a1d17269a37c9e06177357b4e8a3c3ac3be88bc9605b9d58459c7bb2bb19be8752109d0640c81b7c7ece04307c9a652f4450d3c94bf198b91213d593c
|
|
7
|
+
data.tar.gz: fd110d86ad73c4a50f2578f0b65fb5f90c174408bde64f97b03b4682eb8615f44dee6e9790f0a6ff26886c39d603f5d6891a7c6aa3f54dc395a9943e4012989e
|
data/README.md
CHANGED
|
@@ -28,6 +28,9 @@ puts era[:addressed_to] # The person/name the ERA is addressed to
|
|
|
28
28
|
if !era[:checks].nil?
|
|
29
29
|
era[:checks].each do |check_number, check|
|
|
30
30
|
puts check[:check_number] # Check number
|
|
31
|
+
puts check[:transaction_handling_code] # Transaction handling code
|
|
32
|
+
puts check[:credit_debit_flag] # Credit/debit flag
|
|
33
|
+
puts check[:payment_method_code] # Payment method code
|
|
31
34
|
puts check[:amount] # Check amount
|
|
32
35
|
puts check[:number_of_claims] # Number of claims this check covers (integer)
|
|
33
36
|
puts check[:npi_tax_id] # NPI or Tax ID of payee
|
|
@@ -38,17 +41,26 @@ if !era[:checks].nil?
|
|
|
38
41
|
puts check[:payer_state] # Payer state
|
|
39
42
|
puts check[:payer_zip_code] # Payer zip code
|
|
40
43
|
puts check[:payer_tax_id] # Payer tax id
|
|
44
|
+
puts check[:payer_edi_id] # Payer EDI id
|
|
41
45
|
puts check[:date] # Check date (string mm/dd/yyyy)
|
|
42
46
|
if !check[:eras].nil?
|
|
43
47
|
check[:eras].each do |era_counter, individual_era|
|
|
44
48
|
puts individual_era[:era_text] # ERA text
|
|
45
|
-
puts individual_era[:patient_id] # Patient ID
|
|
49
|
+
puts individual_era[:patient_id] # Patient ID / Member number
|
|
46
50
|
puts individual_era[:patient_name] # Patient name
|
|
47
|
-
puts individual_era[:patient_last_name] # Patient last name (
|
|
48
|
-
puts individual_era[:patient_first_name] # Patient first name (
|
|
51
|
+
puts individual_era[:patient_last_name] # Patient last name (titleized)
|
|
52
|
+
puts individual_era[:patient_first_name] # Patient first name (titleized)
|
|
53
|
+
puts individual_era[:patient_middle_initial] # Patient middle initial
|
|
54
|
+
puts individual_era[:patient_suffix] # Patient suffix
|
|
55
|
+
puts individual_era[:subscriber_id] # Subscriber ID / Member number
|
|
56
|
+
puts individual_era[:subscriber_name] # Subscriber name
|
|
57
|
+
puts individual_era[:subscriber_last_name] # Subscriber last name (titleized)
|
|
58
|
+
puts individual_era[:subscriber_first_name] # Subscriber first name (titleized)
|
|
59
|
+
puts individual_era[:subscriber_middle_initial] # Subscriber middle initial
|
|
60
|
+
puts individual_era[:subscriber_suffix] # Subscriber suffix
|
|
49
61
|
puts individual_era[:rendering_provider_name] # Rendering provider name
|
|
50
|
-
puts individual_era[:rendering_provider_last_name] # Rendering provider last name (
|
|
51
|
-
puts individual_era[:rendering_provider_first_name] # Rendering provider first name (
|
|
62
|
+
puts individual_era[:rendering_provider_last_name] # Rendering provider last name (titleized)
|
|
63
|
+
puts individual_era[:rendering_provider_first_name] # Rendering provider first name (titleized)
|
|
52
64
|
puts individual_era[:charge_amount] # Total charge amount (integer)
|
|
53
65
|
puts individual_era[:payment_amount] # Total payment amount (integer)
|
|
54
66
|
puts individual_era[:account_number] # Account number
|
|
@@ -121,6 +133,11 @@ era = Era835Parser::Parser.new(file: string_io).parse
|
|
|
121
133
|
4. Push to the branch (`git push origin my-new-feature`)
|
|
122
134
|
5. Create a new Pull Request
|
|
123
135
|
|
|
136
|
+
## Publishing
|
|
137
|
+
|
|
138
|
+
1. gem build era_835_parser.gemspec
|
|
139
|
+
2. gem push era_835_parser-x.x.x.gem
|
|
140
|
+
|
|
124
141
|
## License
|
|
125
142
|
|
|
126
143
|
The MIT License (MIT)
|
|
@@ -143,4 +160,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
143
160
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
144
161
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
145
162
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
146
|
-
THE SOFTWARE.
|
|
163
|
+
THE SOFTWARE.
|
|
@@ -57,10 +57,14 @@ module Era835Parser
|
|
|
57
57
|
header_number_loop = false
|
|
58
58
|
claim_payment_information_loop = false
|
|
59
59
|
patient_loop = false
|
|
60
|
+
subscriber_loop = false
|
|
60
61
|
rendering_provider_loop = false
|
|
61
62
|
service_payment_information_loop = false
|
|
62
63
|
bpr_amount = ''
|
|
63
64
|
bpr_date = ''
|
|
65
|
+
transaction_handling_code = ''
|
|
66
|
+
credit_debit_flag = ''
|
|
67
|
+
payment_method_code = ''
|
|
64
68
|
receive_date = false
|
|
65
69
|
claim_date_start = false
|
|
66
70
|
claim_date_end = false
|
|
@@ -360,6 +364,7 @@ module Era835Parser
|
|
|
360
364
|
when 1
|
|
361
365
|
# Transaction Handling Code
|
|
362
366
|
# puts "Transaction Handling Code: #{element}"
|
|
367
|
+
transaction_handling_code = element.strip
|
|
363
368
|
when 2
|
|
364
369
|
# Monetary Amount
|
|
365
370
|
# puts "Monetary Amount: #{element}"
|
|
@@ -367,9 +372,11 @@ module Era835Parser
|
|
|
367
372
|
when 3
|
|
368
373
|
# Credit/Debit Flag
|
|
369
374
|
# puts "Credit/Debit Flag: #{element}"
|
|
375
|
+
credit_debit_flag = element.strip
|
|
370
376
|
when 4
|
|
371
377
|
# PAYMENT METHOD CODE
|
|
372
378
|
# puts "PAYMENT METHOD CODE: #{element}"
|
|
379
|
+
payment_method_code = element.strip
|
|
373
380
|
when 5
|
|
374
381
|
# PAYMENT FORMAT CODE
|
|
375
382
|
# puts "PAYMENT FORMAT CODE: #{element}"
|
|
@@ -443,13 +450,20 @@ module Era835Parser
|
|
|
443
450
|
when 2
|
|
444
451
|
# REFERENCE IDENTIFICATION
|
|
445
452
|
# puts "REFERENCE IDENTIFICATION: #{element}"
|
|
446
|
-
check =
|
|
447
|
-
|
|
448
|
-
|
|
453
|
+
check = {
|
|
454
|
+
check_number: element.strip,
|
|
455
|
+
amount: (bpr_amount.to_f * 100).round().to_i,
|
|
456
|
+
date: bpr_date,
|
|
457
|
+
transaction_handling_code: transaction_handling_code,
|
|
458
|
+
credit_debit_flag: credit_debit_flag,
|
|
459
|
+
payment_method_code: payment_method_code,
|
|
460
|
+
}
|
|
461
|
+
checks[check[:check_number]] = check
|
|
449
462
|
bpr_amount = ''
|
|
450
|
-
check[:date] = bpr_date
|
|
451
463
|
bpr_date = ''
|
|
452
|
-
|
|
464
|
+
transaction_handling_code = ''
|
|
465
|
+
credit_debit_flag = ''
|
|
466
|
+
payment_method_code = ''
|
|
453
467
|
when 3
|
|
454
468
|
# ORIGINATING COMPANY IDENTIFIER
|
|
455
469
|
# puts "ORIGINATING COMPANY IDENTIFIER: #{element}"
|
|
@@ -844,56 +858,84 @@ module Era835Parser
|
|
|
844
858
|
when 1
|
|
845
859
|
# Patient Identifier Code
|
|
846
860
|
# puts "Patient Identifier Code: #{element}"
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
patient_loop = false
|
|
851
|
-
end
|
|
852
|
-
if element == "82"
|
|
853
|
-
rendering_provider_loop = true
|
|
854
|
-
else
|
|
855
|
-
rendering_provider_loop = false
|
|
856
|
-
end
|
|
861
|
+
patient_loop = element == "QC"
|
|
862
|
+
subscriber_loop = element == 'IL'
|
|
863
|
+
rendering_provider_loop = element == "82"
|
|
857
864
|
when 2
|
|
858
865
|
# Entity Type Qualifier
|
|
859
866
|
# puts "Entity Type Qualifier: #{element}"
|
|
860
867
|
when 3
|
|
861
868
|
# Patient Last Name
|
|
862
869
|
# puts "Patient Last Name: #{element}"
|
|
863
|
-
if claim_payment_information_loop
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
870
|
+
if claim_payment_information_loop
|
|
871
|
+
if patient_loop
|
|
872
|
+
individual_era[:patient_last_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
873
|
+
end
|
|
874
|
+
if subscriber_loop
|
|
875
|
+
individual_era[:subscriber_last_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
876
|
+
end
|
|
877
|
+
if rendering_provider_loop
|
|
878
|
+
individual_era[:rendering_provider_last_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
879
|
+
end
|
|
868
880
|
end
|
|
869
881
|
when 4
|
|
870
882
|
# Patient First Name
|
|
871
883
|
# puts "Patient First Name: #{element}"
|
|
872
|
-
if claim_payment_information_loop
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
884
|
+
if claim_payment_information_loop
|
|
885
|
+
if patient_loop
|
|
886
|
+
individual_era[:patient_first_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
887
|
+
individual_era[:patient_name] = individual_era[:patient_last_name].upcase + "," + individual_era[:patient_first_name].upcase
|
|
888
|
+
end
|
|
889
|
+
if subscriber_loop
|
|
890
|
+
individual_era[:subscriber_first_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
891
|
+
individual_era[:subscriber_name] = individual_era[:subscriber_last_name].upcase + "," + individual_era[:subscriber_first_name].upcase
|
|
892
|
+
end
|
|
893
|
+
if rendering_provider_loop
|
|
894
|
+
individual_era[:rendering_provider_first_name] = element.strip.downcase.split(" ").map { |word| word.capitalize }.join(" ")
|
|
895
|
+
individual_era[:rendering_provider_name] = individual_era[:rendering_provider_last_name].upcase + "," + individual_era[:rendering_provider_first_name].upcase
|
|
896
|
+
end
|
|
879
897
|
end
|
|
880
898
|
when 5
|
|
881
899
|
# Patient Middle Initial
|
|
882
900
|
# puts "Patient Middle Initial: #{element}"
|
|
901
|
+
if claim_payment_information_loop
|
|
902
|
+
if patient_loop
|
|
903
|
+
individual_era[:patient_middle_initial] = element.strip
|
|
904
|
+
end
|
|
905
|
+
if subscriber_loop
|
|
906
|
+
individual_era[:subscriber_middle_initial] = element.strip
|
|
907
|
+
end
|
|
908
|
+
end
|
|
883
909
|
when 6
|
|
884
910
|
# Name Prefix
|
|
885
911
|
# puts "Name Prefix: #{element}"
|
|
886
912
|
when 7
|
|
887
913
|
# Patient Name Suffix
|
|
888
914
|
# puts "Patient Name Suffix: #{element}"
|
|
915
|
+
if claim_payment_information_loop
|
|
916
|
+
if patient_loop
|
|
917
|
+
individual_era[:patient_suffix] = element.strip
|
|
918
|
+
end
|
|
919
|
+
if subscriber_loop
|
|
920
|
+
individual_era[:subscriber_suffix] = element.strip
|
|
921
|
+
end
|
|
922
|
+
end
|
|
889
923
|
when 8
|
|
890
924
|
# Identification Code Qualifier
|
|
891
925
|
# puts "Identification Code Qualifier: #{element}"
|
|
892
926
|
when 9
|
|
893
|
-
# Patient Member Number
|
|
927
|
+
# Patient Member Number or rendering provider NPI number
|
|
894
928
|
# puts "Patient Member Number: #{element}"
|
|
895
|
-
if claim_payment_information_loop
|
|
896
|
-
|
|
929
|
+
if claim_payment_information_loop
|
|
930
|
+
if patient_loop
|
|
931
|
+
individual_era[:patient_id] = element.strip
|
|
932
|
+
end
|
|
933
|
+
if subscriber_loop
|
|
934
|
+
individual_era[:subscriber_id] = element.strip
|
|
935
|
+
end
|
|
936
|
+
if rendering_provider_loop
|
|
937
|
+
individual_era[:rendering_provider_npi] = element.strip
|
|
938
|
+
end
|
|
897
939
|
end
|
|
898
940
|
end
|
|
899
941
|
when "SVC"
|
|
@@ -1005,7 +1047,7 @@ module Era835Parser
|
|
|
1005
1047
|
eras[era_counter] = individual_era
|
|
1006
1048
|
era[:checks][check_number][:eras] = era[:checks][check_number][:eras].merge(eras)
|
|
1007
1049
|
end
|
|
1008
|
-
|
|
1050
|
+
era
|
|
1009
1051
|
else
|
|
1010
1052
|
if individual_line_item != {}
|
|
1011
1053
|
if line_items.nil?
|
|
@@ -1071,7 +1113,7 @@ module Era835Parser
|
|
|
1071
1113
|
end
|
|
1072
1114
|
end
|
|
1073
1115
|
end
|
|
1074
|
-
|
|
1116
|
+
era
|
|
1075
1117
|
end
|
|
1076
1118
|
end
|
|
1077
1119
|
|
|
@@ -1079,15 +1121,15 @@ module Era835Parser
|
|
|
1079
1121
|
|
|
1080
1122
|
def get_length(string)
|
|
1081
1123
|
if string.nil?
|
|
1082
|
-
|
|
1124
|
+
0
|
|
1083
1125
|
else
|
|
1084
|
-
|
|
1126
|
+
string.length
|
|
1085
1127
|
end
|
|
1086
1128
|
end
|
|
1087
1129
|
|
|
1088
1130
|
def truncate(string, truncate_at)
|
|
1089
1131
|
if !string.nil?
|
|
1090
|
-
|
|
1132
|
+
string.to_s[0...truncate_at]
|
|
1091
1133
|
end
|
|
1092
1134
|
end
|
|
1093
1135
|
|