Fix response rates for small schools by accounting for expected minimum counts of responses less than 10

rpp-main
rebuilt 3 years ago
parent 7c800255c3
commit 9f21a76ba4

@ -28,11 +28,14 @@ class StudentResponseRateCalculator < ResponseRateCalculator
end end
def survey_items_with_sufficient_responses(grade:) def survey_items_with_sufficient_responses(grade:)
threshold = 10
quarter_of_grade = enrollment_by_grade[grade] / 4
threshold = threshold > quarter_of_grade ? quarter_of_grade : threshold
SurveyItem.joins('inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id') SurveyItem.joins('inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id')
.student_survey_items .student_survey_items
.where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year, "survey_item_responses.grade": grade, "survey_item_responses.survey_item_id": subcategory.survey_items.student_survey_items) .where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year, "survey_item_responses.grade": grade, "survey_item_responses.survey_item_id": subcategory.survey_items.student_survey_items)
.group('survey_items.id') .group('survey_items.id')
.having('count(*) >= 10') .having("count(*) >= #{threshold}")
.count .count
end end

@ -65,7 +65,8 @@ describe ResponseRateCalculator, type: :model do
context 'there are responses for another survey item but not enough to meet the minimum threshold' do context 'there are responses for another survey item but not enough to meet the minimum threshold' do
before do before do
create_list(:survey_item_response, 9, survey_item: insufficient_student_survey_item_1, academic_year:, less_than_a_quarter_of_respondents_for_first_grade = 4
create_list(:survey_item_response, less_than_a_quarter_of_respondents_for_first_grade, survey_item: insufficient_student_survey_item_1, academic_year:,
school:, grade: 1) school:, grade: 1)
end end
it 'returns an average of the response rates for all grades' do it 'returns an average of the response rates for all grades' do

Loading…
Cancel
Save