sunnyside 0.0.7 → 0.0.8
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.
- data/lib/sunnyside/advanced.rb +50 -0
- data/lib/sunnyside/cash_receipts/cash_receipt.rb +25 -7
- data/lib/sunnyside/ftp.rb +19 -36
- data/lib/sunnyside/ledger/edi.rb +17 -13
- data/lib/sunnyside/menu.rb +6 -0
- data/lib/sunnyside/models/db_setup.rb +18 -0
- data/lib/sunnyside/reports/private.rb +1 -21
- data/lib/sunnyside/version.rb +1 -1
- data/lib/sunnyside.rb +4 -2
- metadata +3 -2
@@ -0,0 +1,50 @@
|
|
1
|
+
module Sunnyside
|
2
|
+
def self.advanced_opts
|
3
|
+
puts "1.) Add new provider"
|
4
|
+
puts "2.) Export A/R denials"
|
5
|
+
|
6
|
+
case gets.chomp
|
7
|
+
when '1'
|
8
|
+
print "Type in the provider name _EXACTLY_ how it appears on the SanData archive report files (e.g. Guildnet is always GUILDNET): "
|
9
|
+
provider = gets.chomp
|
10
|
+
print "Now type in the abbreviation (batch initials - e.g. MetroPlus Health is MPH): "
|
11
|
+
abbrev = gets.chomp
|
12
|
+
print "Now type in the CREDIT account that is used in FUND EZ: "
|
13
|
+
credit = gets.chomp
|
14
|
+
print "Now type in the DEBIT account that is used in FUND EZ: "
|
15
|
+
debit = gets.chomp
|
16
|
+
print "And finally, type in the FUND number that is used in FUND EZ: "
|
17
|
+
fund = gets.chomp
|
18
|
+
puts "---------------------------------------------------"
|
19
|
+
puts "--------Please review the below information--------"
|
20
|
+
puts ""
|
21
|
+
puts "Name: #{provider}, Credit Account: #{credit}, Debit Account: #{debit}, Fund: #{fund}, Abbreviation: #{abbrev}"
|
22
|
+
puts ""
|
23
|
+
puts "---------------------------------------------------"
|
24
|
+
print "Is this correct? (Y for yes, N for No): "
|
25
|
+
raise 'You have an empty field! Start over!' if [provider, credit, debit, fund, abbrev].any? { |elem| elem.empty? }
|
26
|
+
if gets.chomp.upcase == 'Y'
|
27
|
+
provider = Provider.insert(name: provider, credit_account: credit, debit_account: debit, fund: fund, abbreviation: abbrev)
|
28
|
+
puts "#{Provider[provider].name} added."
|
29
|
+
else
|
30
|
+
Sunnyside.advanced_opts
|
31
|
+
end
|
32
|
+
else
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.rails_server
|
38
|
+
puts "Open your web browser and type in this in the address bar (and then press enter): http://localhost:3000/providers"
|
39
|
+
puts "Please wait..."
|
40
|
+
Dir.chdir("#{DRIVE}/Program Files/Mozilla Firefox")
|
41
|
+
|
42
|
+
%x(start /max http://localhost:3000/providers)
|
43
|
+
|
44
|
+
puts "Web browser launched. Now launching server..."
|
45
|
+
|
46
|
+
Dir.chdir("#{DRIVE}/sunnyside-files/sunnyside-app")
|
47
|
+
|
48
|
+
%x(rails s)
|
49
|
+
end
|
50
|
+
end
|
@@ -53,9 +53,17 @@ module Sunnyside
|
|
53
53
|
print "Enter in the check number: "
|
54
54
|
check = gets.chomp
|
55
55
|
invoices = invoice_selection
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
if invoices_exist?(invoices)
|
57
|
+
manual = ManualPayment.new(invoices, post_date, prov, check)
|
58
|
+
manual.seed_claims_and_services
|
59
|
+
manual.create_csv
|
60
|
+
else
|
61
|
+
manual_invoices
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def invoices_exist?(invoices)
|
66
|
+
invoices.map { |invoice| invoice.gsub(/-d/, '') }.all? { |invoice| !Invoice[invoice].nil? }
|
59
67
|
end
|
60
68
|
end
|
61
69
|
|
@@ -87,7 +95,7 @@ module Sunnyside
|
|
87
95
|
def collate
|
88
96
|
puts "Total Amount Paid for this check is: #{total}\nProcessing..."
|
89
97
|
populated_data.each do |clm|
|
90
|
-
if
|
98
|
+
if !not_fully_paid?(clm)
|
91
99
|
self.receivable_csv(clm, payment, post_date)
|
92
100
|
else
|
93
101
|
print "#{clm.invoice_id} was not added to the spreadsheet because the invoice was already fully paid for.\n"
|
@@ -105,13 +113,13 @@ module Sunnyside
|
|
105
113
|
end
|
106
114
|
|
107
115
|
def denied_services
|
108
|
-
Service.where(payment_id: payment.id).exclude(
|
116
|
+
Service.where(payment_id: payment.id).exclude(denial_reas on: nil).count
|
109
117
|
end
|
110
118
|
end
|
111
119
|
|
112
120
|
class ManualPayment
|
113
121
|
include Sunnyside
|
114
|
-
attr_reader :denied_invoices, :paid_invoices, :post_date, :provider, :check, :payment_id
|
122
|
+
attr_reader :denied_invoices, :paid_invoices, :post_date, :provider, :check, :payment_id, :total
|
115
123
|
|
116
124
|
def initialize(invoices, post_date, prov, check)
|
117
125
|
@denied_invoices = invoices.select { |inv| inv.include?('-d') }.map { |inv| Invoice[inv.gsub(/-d/, '')] }
|
@@ -120,6 +128,7 @@ module Sunnyside
|
|
120
128
|
@provider = prov
|
121
129
|
@check = check
|
122
130
|
@payment_id = Payment.insert(check_number: check, post_date: post_date, provider_id: prov.id)
|
131
|
+
@total = 0.0
|
123
132
|
end
|
124
133
|
|
125
134
|
def seed_claims_and_services
|
@@ -130,8 +139,17 @@ module Sunnyside
|
|
130
139
|
edit_services if denied_invoices.length > 0
|
131
140
|
end
|
132
141
|
|
142
|
+
def not_fully_paid?(clm)
|
143
|
+
Claim.where(invoice_id: clm.invoice_id).sum(:paid).round(2) < clm.paid
|
144
|
+
end
|
145
|
+
|
133
146
|
def create_csv
|
134
|
-
claims.each { |clm|
|
147
|
+
claims.each { |clm|
|
148
|
+
if clm.paid > 0.0 && !not_fully_paid?(clm)
|
149
|
+
puts "-----------------------Total so far: #{total += clm.paid}"
|
150
|
+
self.receivable_csv(clm, Payment[payment_id], post_date)
|
151
|
+
end
|
152
|
+
}
|
135
153
|
end
|
136
154
|
|
137
155
|
def claims
|
data/lib/sunnyside/ftp.rb
CHANGED
@@ -3,46 +3,23 @@ require 'rubygems'
|
|
3
3
|
|
4
4
|
module Sunnyside
|
5
5
|
def self.access_ftp
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
print 'Username for Guildnet? '
|
13
|
-
username = gets.chomp
|
14
|
-
print 'Password for Guildnet? '
|
15
|
-
pass = gets.chomp
|
16
|
-
access = SunnyFTP.new(username, pass, 'GUILDNET')
|
17
|
-
when '2'
|
18
|
-
print 'Username for ELDERSERVE? '
|
19
|
-
username = gets.chomp
|
20
|
-
print 'Password for ELDERSERVE? '
|
21
|
-
pass = gets.chomp
|
22
|
-
access = SunnyFTP.new(username, pass, 'ELDERSERVE')
|
23
|
-
when '3'
|
24
|
-
print 'Username for CPHL? '
|
25
|
-
username = gets.chomp
|
26
|
-
print 'Password for CPHL? '
|
27
|
-
pass = gets.chomp
|
28
|
-
access = SunnyFTP.new(username, pass, 'CPHL')
|
29
|
-
else
|
30
|
-
exit
|
6
|
+
CSV.foreach("#{DRIVE}/sunnyside-files/ftp/login.csv") do |row|
|
7
|
+
access = SunnyFTP.new(username: row[1], password: row[2], provider: row[0])
|
8
|
+
access.log_on
|
9
|
+
puts "Logged into #{access.name}..."
|
10
|
+
access.download_files
|
11
|
+
access.upload_files
|
31
12
|
end
|
32
|
-
access.log_on
|
33
|
-
puts "Logged into #{access.name}..."
|
34
|
-
access.download_files
|
35
|
-
access.upload_files
|
36
13
|
end
|
37
14
|
|
38
15
|
class SunnyFTP
|
39
16
|
attr_reader :ftp, :username, :password, :name, :directory
|
40
17
|
|
41
|
-
def initialize(
|
18
|
+
def initialize(login = {})
|
42
19
|
@ftp = Net::FTP.new('depot.per-se.com')
|
43
|
-
@username = username
|
44
|
-
@password = password
|
45
|
-
@name =
|
20
|
+
@username = login[:username]
|
21
|
+
@password = login[:password]
|
22
|
+
@name = login[:provider]
|
46
23
|
end
|
47
24
|
|
48
25
|
def log_on
|
@@ -93,12 +70,18 @@ module Sunnyside
|
|
93
70
|
provider_folder.include?(file)
|
94
71
|
end
|
95
72
|
|
73
|
+
def timestamp(file)
|
74
|
+
ftp.mtime(file).strftime('%Y-%m-%d')
|
75
|
+
end
|
76
|
+
|
96
77
|
def download_files
|
97
78
|
download_folder.each do |file|
|
98
79
|
if !provider_folder.include?(file)
|
99
|
-
|
100
|
-
|
101
|
-
|
80
|
+
if file.include?('835')
|
81
|
+
puts "Downloading #{file}..."
|
82
|
+
ftp.getbinaryfile(file, "#{DRIVE}/sunnyside-files/ftp/835/#{name}/#{timestamp(file)}-#{file}")
|
83
|
+
puts "#{file} placed, dated: #{timestamp(file)}."
|
84
|
+
end
|
102
85
|
end
|
103
86
|
end
|
104
87
|
ftp.close
|
data/lib/sunnyside/ledger/edi.rb
CHANGED
@@ -2,20 +2,26 @@ module Sunnyside
|
|
2
2
|
def self.edi_parser
|
3
3
|
print "checking for new files...\n"
|
4
4
|
Dir["#{DRIVE}/sunnyside-files/835/*.txt"].each do |file|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
|
6
|
+
if Filelib.where(filename: file).count > 0
|
7
|
+
puts "This file has been processed already. File removed."
|
8
|
+
File.delete(file)
|
9
|
+
else
|
10
|
+
print "processing #{file}...\n"
|
11
|
+
file_data = File.open(file)
|
12
|
+
data = file_data.read
|
13
|
+
# Detect to see if the EDI file already has new lines inserted. If so, the newlines are removed before the file gets processed.
|
9
14
|
|
10
|
-
|
15
|
+
data.gsub!(/\n/, '')
|
11
16
|
|
12
|
-
|
17
|
+
data = data.split(/~CLP\*/)
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
edi_file = EdiReader.new(data)
|
20
|
+
edi_file.parse_claims
|
21
|
+
Filelib.insert(filename: file, purpose: '835')
|
22
|
+
file_data.close
|
23
|
+
FileUtils.mv(file, "#{DRIVE}/sunnyside-files/835/archive/#{File.basename(file)}")
|
24
|
+
end
|
19
25
|
end
|
20
26
|
end
|
21
27
|
|
@@ -30,8 +36,6 @@ module Sunnyside
|
|
30
36
|
data.select { |clm| clm =~ /^\d+/ }.map { |clm| clm.split(/~(?=SVC)/) }
|
31
37
|
end
|
32
38
|
|
33
|
-
|
34
|
-
|
35
39
|
def check_number
|
36
40
|
check = data[0][/(?<=~TRN\*\d\*)\w+/]
|
37
41
|
return check.include?('E') ? check[/\d+$/] : check
|
data/lib/sunnyside/menu.rb
CHANGED
@@ -11,6 +11,8 @@ module Sunnyside
|
|
11
11
|
puts " 7.) EXPIRING AUTHORIZATION REPORT"
|
12
12
|
puts " 9.) MCO - MLTC HOURS UPDATE"
|
13
13
|
puts "10.) CUSTOM QUERY"
|
14
|
+
puts "11.) ADD A NEW PROVIDER"
|
15
|
+
puts "12.) VIEW DATABASE ON WEB BROWSER"
|
14
16
|
print "select option: "
|
15
17
|
case gets.chomp
|
16
18
|
when '1'
|
@@ -34,6 +36,10 @@ module Sunnyside
|
|
34
36
|
Sunnyside.run_mco_mltc
|
35
37
|
when '10'
|
36
38
|
Sunnyside.query
|
39
|
+
when '11'
|
40
|
+
Sunnyside.advanced_opts
|
41
|
+
when '12'
|
42
|
+
Sunnyside.rails_server
|
37
43
|
else
|
38
44
|
exit
|
39
45
|
end
|
@@ -2,6 +2,24 @@ module Sunnyside
|
|
2
2
|
|
3
3
|
class << self
|
4
4
|
|
5
|
+
def create_ftp_login_data
|
6
|
+
CSV.open("#{DRIVE}/sunnyside-files/ftp/login.csv", 'a+') do |row|
|
7
|
+
print "How many providers do you want to enter? "
|
8
|
+
gets.chomp.to_i.times do
|
9
|
+
print 'Enter in the name of the provider (please omit the use of special characters - make it a single word, if possible): '
|
10
|
+
provider = gets.chomp.upcase
|
11
|
+
puts "Enter in the username and the password for #{provider}, each seperated by a single space."
|
12
|
+
username, pass = gets.chomp.split
|
13
|
+
|
14
|
+
row << [provider, username, pass]
|
15
|
+
|
16
|
+
if !Dir.exist?("#{DRIVE}/sunnyside-files/ftp/#{provider}")
|
17
|
+
["#{provider}" ,"#{provider}/835", "#{provider}/837"].each { |prov| Dir.mkdir("#{DRIVE}/sunnyside-files/ftp/#{prov}/") }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
5
23
|
def create_folders
|
6
24
|
folders = ['db', '835', '837', 'summary', 'cash_receipts', 'new-ledger', 'private', 'private/archive',
|
7
25
|
'summary/archive', '837/archive', '835/archive', 'ftp', 'ftp/837', 'ftp/837/GUILDNET', 'ftp/837/CPHL', 'ftp/837/ELDERSERVE',
|
@@ -12,27 +12,7 @@ module Sunnyside
|
|
12
12
|
@file = file
|
13
13
|
@selected = []
|
14
14
|
end
|
15
|
-
|
16
|
-
def tabickman
|
17
|
-
selected_pages('TABICKMAN')
|
18
|
-
end
|
19
|
-
|
20
|
-
def jibaja
|
21
|
-
selected_pages('JIBAJA')
|
22
|
-
end
|
23
|
-
|
24
|
-
def community
|
25
|
-
selected_pages('SUNNYSIDE COMMUNITY')
|
26
|
-
end
|
27
|
-
|
28
|
-
def jensen
|
29
|
-
selected_pages('JENSEN')
|
30
|
-
end
|
31
|
-
|
32
|
-
def barrow
|
33
|
-
selected_pages('BARROW')
|
34
|
-
end
|
35
|
-
|
15
|
+
|
36
16
|
def selected_pages(name)
|
37
17
|
PDF::Reader.new(file).pages.select { |page| page.text.include?(name) && page.text.include?('Client Copy') }.map { |page| page.number }
|
38
18
|
end
|
data/lib/sunnyside/version.rb
CHANGED
data/lib/sunnyside.rb
CHANGED
@@ -16,13 +16,15 @@ require 'sunnyside/ftp'
|
|
16
16
|
require 'sunnyside/menu'
|
17
17
|
require 'sunnyside/expiring_auth'
|
18
18
|
require 'sunnyside/models/db_setup'
|
19
|
+
require 'sunnyside/advanced'
|
19
20
|
|
20
21
|
module Sunnyside
|
21
22
|
DRIVE = ENV["HOMEDRIVE"]
|
22
23
|
|
23
24
|
Sunnyside.create_folders if !Dir.exist?("#{DRIVE}/sunnyside-files")
|
24
|
-
|
25
|
-
|
25
|
+
Sunnyside.create_ftp_login_data if !File.exist?("#{DRIVE}/sunnyside-files/ftp/login.csv")
|
26
|
+
Dir.chdir("R:/Departments/AR Department")
|
27
|
+
DB = Sequel.connect("sqlite://sunnyside.db")
|
26
28
|
|
27
29
|
if DB.tables.empty?
|
28
30
|
Sunnyside.create_tables
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunnyside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sqlite3
|
@@ -115,6 +115,7 @@ executables:
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
+
- lib/sunnyside/advanced.rb
|
118
119
|
- lib/sunnyside/cash_receipts/cash_receipt.rb
|
119
120
|
- lib/sunnyside/expiring_auth.rb
|
120
121
|
- lib/sunnyside/ftp.rb
|