18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/udise_school_report_reader/rte_yaml_writer.rb', line 18
def self.format_yaml(data)
return unless data
rte_data = { 'rte' => {} }
grades = data[:grade_rows].map { |row| row['text'] }
grade_indices = {}
grades.each_with_index do |grade, idx|
grade_indices[idx] = GRADE_MAPPING[grade] || grade.downcase.gsub(/\s+/, '_')
end
grade_indices.values.each do |grade_key|
rte_data['rte'][grade_key] = {
'boys' => 0,
'girls' => 0
}
end
data[:rte_numbers].each do |x_mid, pair|
next unless pair && pair.size == 2
grade_idx = grade_indices.keys.find do |idx|
x_start = data[:grade_rows][idx]['rect_x'].to_f
x_end = x_start + data[:grade_rows][idx]['rect_width'].to_f
x_mid >= x_start && x_mid <= x_end
end
next unless grade_idx && grade_indices[grade_idx]
grade_key = grade_indices[grade_idx]
boys_val = pair[0]&.dig('text')
girls_val = pair[1]&.dig('text')
rte_data['rte'][grade_key]['boys'] = boys_val == '-' ? 0 : boys_val.to_i
rte_data['rte'][grade_key]['girls'] = girls_val == '-' ? 0 : girls_val.to_i
end
rte_data
end
|