Advertisement
andrey_zavyalov

Untitled

Feb 22nd, 2024
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. def clinic_data(admin_id)
  2. return [] if admin_id.presence.nil?
  3.  
  4. admin = ::Health::ClinicAdmin.find(admin_id)
  5. patients = admin.patients
  6. practitioner_ids = admin.practitioners.ids + [admin_id]
  7. row = [patients.size]
  8.  
  9. ages = { '<6' => 0, '6-11' => 0, '12-17' =>0, '18-64' => 0, '>65' => 0 }
  10. patients.each do |patient|
  11. age = patient.details.age
  12. age_key = if age < 6
  13. '<6'
  14. elsif age.in?(6..11)
  15. '6-11'
  16. elsif age.in?(12..17)
  17. '12-17'
  18. elsif age.in?(18..64)
  19. '18-64'
  20. else age >= 65
  21. '>65'
  22. end
  23.  
  24. ages[age_key] = ages[age_key] + 1
  25. end
  26. row += ages.values
  27.  
  28. trials = admin.trials
  29. batches = Batch.where(trial_id: trials.ids)
  30. c_batches_ids = batches.assessment_type_cognitive.ids
  31. q_batched_ids = batches.assessment_type_questionnaire.ids
  32.  
  33. c_report_count = BatchSession.status_complete.where(batch_id: c_batches_ids, cfp: false).count
  34. q_report_count = BatchSession.status_complete.where(batch_id: q_batched_ids, cfp: false).count
  35.  
  36. protocols = ::Health::Protocol.where(owner_id: practitioner_ids)
  37.  
  38. protocol_only_c_ids = []
  39. protocol_only_q_ids = []
  40. protocol_c_and_q_ids = []
  41. protocols.each do |protocol|
  42. assessments = protocol.assessments
  43. if assessments.assessment_type_questionnaire.any? && assessments.assessment_type_cognitive.any?
  44. protocol_c_and_q_ids << protocol.id
  45. elsif assessments.assessment_type_cognitive.any?
  46. protocol_only_c_ids << protocol.id
  47. elsif assessments.assessment_type_questionnaire.any?
  48. protocol_only_q_ids << protocol.id
  49. end
  50. end
  51.  
  52. completed_c_protocol_sessions = ::Health::ProtocolSession.status_complete.where(protocol_id: protocol_only_c_ids).count
  53. completed_q_protocol_sessions = ::Health::ProtocolSession.status_complete.where(protocol_id: protocol_only_q_ids).count
  54. completed_c_and_q_protocol_sessions = ::Health::ProtocolSession.status_complete.where(protocol_id: protocol_c_and_q_ids).count
  55.  
  56. row += [c_report_count, q_report_count]
  57. row += [completed_c_protocol_sessions, completed_c_and_q_protocol_sessions, completed_q_protocol_sessions]
  58. row
  59. end
  60.  
  61. titles = '
  62. Admin User ID (provided)
  63. Account name (provided)
  64. Vertical (provided)
  65. Total number of patients created
  66. Number of patients created below 6 years of age
  67. Number of patients created between 6 to 11 years of age
  68. Number of patients created older than 11 years and younger than 18 years
  69. Number of patients created ages 18 years and older and younger than 65 years
  70. Number of patients created ages 65 years and older
  71. Number of completed cognitive assessments
  72. Number of completed questionnaire assessments
  73. Number of completed protocols with just cognitive tasks
  74. Number of completed protocols with cognitive tasks and questionnaires
  75. Number of completed protocols with just questionnaires
  76. '.split("\n")
  77.  
  78. mf = MediaFile.find_by(name: 'CS-1367')
  79. rows = CSV.parse(mf.content, headers: true)
  80. pbar = ProgressBar.new(rows.size)
  81.  
  82. CSV.open("tmp/CS-1367.csv", 'w') do |csv|
  83. csv << titles
  84. rows.each do |row|
  85. admin_id = row["Admin User ID"].to_i if row["Admin User ID"].presence
  86. p_bar.puts(admin_id)
  87. csv <<([admin_id, row['Account Name'], row['Vertical']] + clinic_data(admin_id))
  88. p_bar.increment!
  89. end
  90. nil
  91. end
  92.  
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement