class Iamspe::Door::Reeval
Classe de compilação de dados sobre reavaliações
Constants
- COLOUR
-
Cores para gráficos de pizza
- DELTA
-
Tempo, em horas, para levantamento de dados prévios
- PROBLEM_TITLE
-
Problemas e seus títulos
Public Class Methods
Source
# File lib/iamspe/door/reeval.rb 55 def initialize 56 # Incializar módulos TTY 57 @font = TTY::Font.new(:standard) 58 @prompt = TTY::Prompt.new 59 @config = TTY::Config.new 60 @config.filename = '.iamspe' 61 @config.append_path Dir.home 62 raise new Error, 'Arquivo de configuração não encontrado' unless @config.exist? 63 64 @config.read 65 # Inicializar variáveis de classe 66 @prev = Time.now.strftime('%s').to_i - (DELTA * 60 * 60) 67 @db_name = @config.fetch(:db) 68 @out = [] 69 @db = open_db 70 @session = [] 71 # Começar sessão de coleta de dados 72 start_session 73 end
Inicializador
Public Instance Methods
Source
# File lib/iamspe/door/reeval.rb 76 def to_s 77 @out.push @font.write("Total = #{parse_totals}") 78 @out.push parse_sexes 79 @out.push parse_meds 80 @out.push @font.write("Nota #{parse_avg_score}") 81 @out.push parse_scores 82 @out.push problems_table 83 @out.join "\n" 84 end
Compilar texto de “output” com estatísticas
Private Instance Methods
Source
# File lib/iamspe/door/reeval.rb 238 def insert(obj) 239 p obj 240 @db.execute 'INSERT INTO reeval (datetime, atend, age, sex, medic, score, problem1, problem2, problem3, problem4, problem5, problem6, problem7, problem8, problem9, problem10, problem11, problem12, problem13, problem14, problem15, outros_problem) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', 241 [obj[:datetime], obj[:atend], obj[:age], obj[:sex], obj[:medic], obj[:score], obj[:problem1], obj[:problem2], obj[:problem3], 242 obj[:problem4], obj[:problem5], obj[:problem6], obj[:problem7], obj[:problem8], obj[:problem9], obj[:problem10], obj[:problem11], obj[:problem12], obj[:problem13], obj[:problem14], obj[:problem15], obj[:outros_problem]] 243 end
Inserir reavaliação no banco de dados
Source
# File lib/iamspe/door/reeval.rb 246 def now 247 time = Time.now 248 { datetime: time.strftime('%s') } 249 end
Obter timestamp atual
Source
# File lib/iamspe/door/reeval.rb 89 def open_db 90 SQLite3::Database.new(@db_name, { results_as_hash: true }) 91 end
Abrir conexão com o banco de dados
Source
# File lib/iamspe/door/reeval.rb 134 def parse_avg_score 135 avg = @db.execute('SELECT 1.0*sum(score)/count(score) AS avg FROM reeval WHERE datetime >= ?', [@prev]) 136 avg[0]['avg'].to_f.round 2 137 end
Obter média das notas de qualidade de 1º atendimento
Source
# File lib/iamspe/door/reeval.rb 124 def parse_meds 125 table = @db.execute('SELECT medic, COUNT(medic) AS total FROM reeval WHERE datetime >= ? GROUP BY medic', 126 [@prev]) 127 table = table.map do |x| 128 { name: x['medic'], value: x['total'], color: COLOUR[rand(0..(COLOUR.length - 1))] } 129 end 130 TTY::Pie.new(data: table, radius: 8) 131 end
Compilar proporção de médicos responsáveis pelo 1ª atendimento
Source
# File lib/iamspe/door/reeval.rb 140 def parse_scores 141 table = @db.execute( 142 'SELECT score, COUNT(score) AS total FROM reeval WHERE datetime >= ? GROUP BY score ORDER BY score', [@prev] 143 ) 144 table = table.map do |x| 145 { name: x['score'], value: x['total'], color: COLOUR[rand(0..(COLOUR.length - 1))] } 146 end 147 TTY::Pie.new(data: table, radius: 8) 148 end
Compilar proporção das notas de qualidade de 1º atendimento
Source
# File lib/iamspe/door/reeval.rb 115 def parse_sexes 116 table = @db.execute('SELECT sex, COUNT(sex) AS total FROM reeval WHERE datetime >= ? GROUP BY sex', [@prev]) 117 table = table.map do |x| 118 { name: x['sex'], value: x['total'], color: COLOUR[rand(0..(COLOUR.length - 1))] } 119 end 120 TTY::Pie.new(data: table, radius: 8) 121 end
Compilar proporção de gêneros
Source
# File lib/iamspe/door/reeval.rb 109 def parse_totals 110 count = @db.execute('SELECT COUNT(datetime) AS count FROM reeval WHERE datetime >= ?', [@prev]) 111 count[0]['count'] 112 end
Compilar número total de reavaliações no período
Source
# File lib/iamspe/door/reeval.rb 151 def problems_table 152 table = @db.execute( 153 'SELECT SUM(problem1), SUM(problem2), SUM(problem3), SUM(problem4), SUM(problem5), SUM(problem6), SUM(problem7), SUM(problem8), SUM(problem9), SUM(problem10), SUM(problem11), SUM(problem12), SUM(problem13), SUM(problem14), SUM(problem15) FROM reeval WHERE datetime >= ?', [@prev] 154 )[0] 155 table = table.map do |key, value| 156 [PROBLEM_TITLE[key], value] 157 end 158 table = TTY::Table.new(['Problema', '#'], table) 159 table.render :unicode, alignments: %i[right left] 160 end
Compilar tabela de problemas identificados
Source
# File lib/iamspe/door/reeval.rb 163 def pt_id 164 @prompt.collect do 165 key(:atend).ask('# Atendimento:') do |q| 166 q.convert :int 167 end 168 next if @answers[:atend].nil? 169 170 key(:age).ask('Idade do Paciente: (anos)') do |q| 171 q.required true 172 q.convert :int 173 end 174 key(:sex).select('Expr. Gênero do Paciente:') do |q| 175 q.choice name: 'MeninA', value: 'F' 176 q.choice name: 'MeninO', value: 'M' 177 q.choice name: 'Outro', value: '?' 178 end 179 key(:medic).ask('Médico Responsável:') do |q| 180 q.required true 181 q.modify :trim, :up 182 end 183 end 184 end
Obter dados de identificação do paciente
Source
# File lib/iamspe/door/reeval.rb 228 def pt_other_problems 229 foo = @prompt.multiline('Quais são os outros problemas identificados?') do |q| 230 q.required true 231 q.help 'Use Ctrl+D para submeter.' 232 q.modify :trim 233 end 234 { outros_problem: foo } 235 end
Obter descrição de outros problemas identificados
Source
# File lib/iamspe/door/reeval.rb 199 def pt_problems 200 foo = @prompt.multi_select('Quais problemas você encontrou?') do |q| 201 q.choice '1ª anamnese pouco útil', :problem1 202 q.choice '1ª anamnese incompatível com quadro', :problem2 203 q.choice 'Ausência de AP', :problem3 204 q.choice 'Ausência de MU', :problem4 205 q.choice 'Ausência de Alergias', :problem5 206 q.choice 'Ausência de EF', :problem6 207 q.choice 'EF incompatível com quadro', :problem7 208 q.choice 'Ausência de HD', :problem8 209 q.choice 'CD incompatível com quadro', :problem9 210 q.choice 'Exames desnecessários', :problem10 211 q.choice 'Exames errados (Labs/ECG)', :problem11 212 q.choice 'Exames errados (Imagens)', :problem12 213 q.choice 'Exames insuficientes', :problem13 214 q.choice 'Necessidade de re-reaval', :problem14 215 q.choice 'Outros', :problem15 216 q.help '\u2191/\u2193 para mover | ESPAÇO para selecionar um | Ctrl+A para selecionar TODOS | ENTER para finalizar' 217 q.per_page 15 218 end 219 bar = { problem1: false, problem2: false, problem3: false, problem4: false, problem5: false, problem6: false, 220 problem7: false, problem8: false, problem9: false, problem10: false, problem11: false, problem12: false, problem13: false, problem14: false, problem15: false } 221 bar.each do |key, _value| 222 bar[key] = foo.include?(key) ? 1 : 0 223 end 224 bar 225 end
Obter problemas identificados no 1º atendimento
Source
# File lib/iamspe/door/reeval.rb 187 def pt_score 188 s = @prompt.select('Qualidade Geral do 1º Atendimento:') do |q| 189 q.choice name: "\u1f604 Péssimo", value: 1 190 q.choice name: "\u2639 Ruim", value: 2 191 q.choice name: "\u1f610 Regular", value: 3 192 q.choice name: "\u1f642 Bom", value: 4 193 q.choice name: "\u1f601 Ótimo", value: 5 194 end 195 { score: s } 196 end
Obter nota de qualidade do 1º atendimento
Source
# File lib/iamspe/door/reeval.rb 94 def start_session 95 loop do 96 foo = pt_id 97 break if foo[:atend].nil? 98 99 foo = foo.merge pt_score 100 foo = foo.merge pt_problems 101 foo = foo.merge pt_other_problems if foo[:problem15] 102 foo = foo.merge now 103 @session.push foo 104 insert foo 105 end 106 end
Iniciar sessão de coleta de dados de reavaliação