pacing 2.1.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pacing/error.rb +1 -2
- data/lib/pacing/normalizer.rb +9 -7
- data/lib/pacing/pacer.rb +5 -3
- data/lib/pacing/version.rb +1 -1
- data/spec/pacing_spec.rb +26 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ccfc4f4c8e6664190adfb475373feeffa18147777afe5dd19e28b39d1c2bff2
|
4
|
+
data.tar.gz: 4834d0e23c85d6681cb91053bd4db9ab38ccd216960a157005516d9d509a7ff1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41cb717c55137d9ca5cd92925fad3ba6364687bc8bab505633c2f436a39e71a7b55eb41ffc4408f619dfbd185470bc7907f5a76508d63ecbfb7135c400620bd9
|
7
|
+
data.tar.gz: 87d1830887611012fb05d9e9f1f6149e7d367b30c9464282ef2e4a571a8a105d3bd659d54f5b44a06524c1c99a0a82ea654157f1b74073cb44b29ef0146f88ca
|
data/lib/pacing/error.rb
CHANGED
@@ -53,7 +53,7 @@ module Pacing
|
|
53
53
|
|
54
54
|
begin
|
55
55
|
@school_plan[:school_plan_services].each do |school_plan_service|
|
56
|
-
if (parse_date(school_plan_service[:start_date])
|
56
|
+
if (parse_date(school_plan_service[:start_date]) <= parse_date(@date) && parse_date(@date) <= parse_date(school_plan_service[:end_date]))
|
57
57
|
valid_range_or_exceptions = true
|
58
58
|
end
|
59
59
|
end
|
@@ -72,4 +72,3 @@ module Pacing
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
75
|
-
|
data/lib/pacing/normalizer.rb
CHANGED
@@ -32,7 +32,7 @@ module Pacing
|
|
32
32
|
discipline_services = services.filter do |service|
|
33
33
|
["pragmatic language", "speech and language", "language", "speech", "language therapy", "speech therapy", "speech and language therapy", "speech language therapy"].include?(service[:type_of_service].downcase)
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
return {} if discipline_services.empty?
|
37
37
|
|
38
38
|
discipline_services = normalize_to_monthly_frequency(discipline_services)
|
@@ -57,7 +57,7 @@ module Pacing
|
|
57
57
|
discipline_services = services.filter do |service|
|
58
58
|
["occupation therapy", "occupational therapy", "occupation"].include?(service[:type_of_service].downcase)
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
return {} if discipline_services.empty?
|
62
62
|
|
63
63
|
discipline_services = normalize_to_monthly_frequency(discipline_services)
|
@@ -82,7 +82,7 @@ module Pacing
|
|
82
82
|
discipline_services = services.filter do |service|
|
83
83
|
["physical therapy", "physical"].include?(service[:type_of_service].downcase)
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
return {} if discipline_services.empty?
|
87
87
|
|
88
88
|
discipline_services = normalize_to_monthly_frequency(discipline_services)
|
@@ -107,7 +107,7 @@ module Pacing
|
|
107
107
|
discipline_services = services.filter do |service|
|
108
108
|
["feeding therapy", "feeding"].include?(service[:type_of_service].downcase)
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
return {} if discipline_services.empty?
|
112
112
|
|
113
113
|
discipline_services = normalize_to_monthly_frequency(discipline_services)
|
@@ -155,8 +155,11 @@ module Pacing
|
|
155
155
|
# average business days for each interval
|
156
156
|
interval_average_days = {
|
157
157
|
"weekly" => 5,
|
158
|
+
"per week" => 5,
|
158
159
|
"monthly" => 22,
|
159
|
-
"
|
160
|
+
"per month" => 22,
|
161
|
+
"yearly" => 210,
|
162
|
+
"per year" => 210 # take away average holidays period with is 2.5 months
|
160
163
|
}
|
161
164
|
|
162
165
|
return services if same_interval(services)
|
@@ -164,7 +167,7 @@ module Pacing
|
|
164
167
|
services.map do |service|
|
165
168
|
if !(service[:interval] == "monthly")
|
166
169
|
# weekly(5 days) = frequency # weekly
|
167
|
-
# monthly(20 days) = frequency * monthly
|
170
|
+
# monthly(20 days) = frequency * monthly
|
168
171
|
# yearly(200 days)
|
169
172
|
|
170
173
|
f = service[:frequency]
|
@@ -207,4 +210,3 @@ module Pacing
|
|
207
210
|
end
|
208
211
|
end
|
209
212
|
end
|
210
|
-
|
data/lib/pacing/pacer.rb
CHANGED
@@ -44,7 +44,9 @@ module Pacing
|
|
44
44
|
discipline = {}
|
45
45
|
discipline[:discipline] = discipline_name
|
46
46
|
discipline[:reset_date] = reset_date(start_date: service[:start_date], interval: service[:interval])
|
47
|
-
|
47
|
+
parsed_date = service[:start_date] ? parse_date(service[:start_date]) : nil
|
48
|
+
treatment_start_date = parsed_date && service[:interval] ? start_of_treatment_date(parsed_date, service[:interval]) : nil
|
49
|
+
discipline[:start_date] = treatment_start_date ? treatment_start_date.strftime("%m-%d-%Y") : nil
|
48
50
|
discipline
|
49
51
|
end
|
50
52
|
end
|
@@ -101,7 +103,7 @@ module Pacing
|
|
101
103
|
|
102
104
|
# discipline iep frequency
|
103
105
|
def discipline_frequency(service)
|
104
|
-
service[:frequency].to_s + service[:interval]
|
106
|
+
service[:frequency].to_s + service[:interval].gsub(/(per)|p/i, "").strip[0].upcase + "x" + service[:time_per_session_in_minutes].to_s + service[:type_of_service][0].upcase + "T"
|
105
107
|
end
|
106
108
|
|
107
109
|
# get a spreadout of visit dates over an interval by using simple proportion.
|
@@ -348,6 +350,6 @@ module Pacing
|
|
348
350
|
holidays_start += 1 until holidays_start.wday == 1
|
349
351
|
|
350
352
|
[holidays_start, holidays_end]
|
351
|
-
end
|
353
|
+
end
|
352
354
|
end
|
353
355
|
end
|
data/lib/pacing/version.rb
CHANGED
data/spec/pacing_spec.rb
CHANGED
@@ -5232,4 +5232,30 @@ describe "should include frequency in the output if show frequency is true" do
|
|
5232
5232
|
results = Pacing::Pacer.new(school_plan: school_plan, date: date, non_business_days: non_business_days, show_frequency: true).calculate
|
5233
5233
|
expect(results).to eq([{:discipline=>"Speech Therapy", :remaining_visits=>1, :used_visits=>0, :pace=>0, :pace_indicator=>"😁", :pace_suggestion=>"once a week", :expected_visits_at_date=>0, :reset_date=>"10-24-2022", :frequency=>"1Wx20ST"}])
|
5234
5234
|
end
|
5235
|
+
|
5236
|
+
it "should correctly parse the pacing for patient 4564 when start_date is same as date" do
|
5237
|
+
school_plan = {:school_plan_services=>[{:school_plan_type=>"IEP", :start_date=>"01-09-2023", :end_date=>"03-30-2023", :type_of_service=>"Speech Therapy", :frequency=>1, :interval=>"weekly", :time_per_session_in_minutes=>20, :completed_visits_for_current_interval=>0, :extra_sessions_allowable=>0, :interval_for_extra_sessions_allowable=>"weekly"}]}
|
5238
|
+
date = "01-09-2023"
|
5239
|
+
non_business_days = []
|
5240
|
+
results = Pacing::Pacer.new(school_plan: school_plan, date: date, non_business_days: non_business_days, show_frequency: true).calculate
|
5241
|
+
expect(results).to eq([{:discipline=>"Speech Therapy", :remaining_visits=>1, :used_visits=>0, :pace=>0, :pace_indicator=>"😁", :pace_suggestion=>"once a week", :expected_visits_at_date=>0, :reset_date=>"01-16-2023", :frequency=>"1Wx20ST"}])
|
5242
|
+
end
|
5243
|
+
end
|
5244
|
+
|
5245
|
+
describe "should calculate pacing correctly when interval starts with 'per month, per week, and per year'" do
|
5246
|
+
it "should correctly parse the pacing for patient 4565" do
|
5247
|
+
school_plan = {:school_plan_services=>[{:school_plan_type=>"IEP", :start_date=>"02-23-2022", :end_date=>"02-23-2023", :type_of_service=>"Speech Therapy", :frequency=>12, :interval=>"per month", :time_per_session_in_minutes=>20, :completed_visits_for_current_interval=>3, :extra_sessions_allowable=>0, :interval_for_extra_sessions_allowable=>"per month"}, {:school_plan_type=>"IEP", :start_date=>"05-19-2022", :end_date=>"11-01-2022", :type_of_service=>"Language Therapy", :frequency=>3, :interval=>"per week", :time_per_session_in_minutes=>20, :completed_visits_for_current_interval=>0, :extra_sessions_allowable=>0, :interval_for_extra_sessions_allowable=>"per week"}]}
|
5248
|
+
date = "10-17-2022"
|
5249
|
+
non_business_days = []
|
5250
|
+
results = Pacing::Pacer.new(school_plan: school_plan, date: date, non_business_days: non_business_days, show_frequency: true).calculate
|
5251
|
+
expect(results).to eq([{:discipline=>"Speech Therapy", :remaining_visits=>22, :used_visits=>3, :pace=>-10, :pace_indicator=>"🐢", :pace_suggestion=>"once a day", :expected_visits_at_date=>13, :reset_date=>"11-01-2022", :frequency=>"25Mx20ST"}])
|
5252
|
+
end
|
5253
|
+
|
5254
|
+
it "should correctly parse the pacing for patient 4566" do
|
5255
|
+
school_plan = {:school_plan_services=>[{:school_plan_type=>"IEP", :start_date=>"09-27-2022", :end_date=>"09-27-2023", :type_of_service=>"Language Therapy", :frequency=>30, :interval=>"per year", :time_per_session_in_minutes=>20, :completed_visits_for_current_interval=>4, :extra_sessions_allowable=>0, :interval_for_extra_sessions_allowable=>"per year"}]}
|
5256
|
+
date = "10-17-2022"
|
5257
|
+
non_business_days = []
|
5258
|
+
results = Pacing::Pacer.new(school_plan: school_plan, date: date, non_business_days: non_business_days, show_frequency: true).calculate
|
5259
|
+
expect(results).to eq([{:discipline=>"Speech Therapy", :remaining_visits=>26, :used_visits=>4, :pace=>2, :pace_indicator=>"🐇", :pace_suggestion=>"less than once per week", :expected_visits_at_date=>2, :reset_date=>"09-27-2023", :frequency=>"30Yx20ST"}])
|
5260
|
+
end
|
5235
5261
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pacing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin S. Dias
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2024-05-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
|
-
rubygems_version: 3.
|
94
|
+
rubygems_version: 3.3.26
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: Pacing is a tool that enables therapists to better manage and track their
|